web-dev-qa-db-fra.com

Comment vérifier si une table existe dans Hive?

Je me connecte à Hive via un pilote ODBC à partir d'une application .NET. Existe-t-il une requête pour déterminer si une table existe déjà?

Par exemple, dans MSSQL, vous pouvez interroger le INFORMATION_SCHEMA table et dans Netezza vous pouvez interroger le _v_table table.

Toute aide serait appréciée.

15
Michael Robinson

Il existe deux approches par lesquelles vous pouvez vérifier que:

1.) Comme l'a suggéré @dimamah, juste pour ajouter un point ici, pour cette approche, vous devez

 1.1) start the **hiveserver** before running the query
 1.2) you have to run two queries
      1.2.1) USE <database_name>
      1.2.2) SHOW TABLES LIKE 'table_name'
      1.2.3) Then you check your result using Result set.

2.) La deuxième approche consiste à utiliser les API HiveMetastoreClient, où vous pouvez directement utiliser les API pour vérifier si le nom_table existe dans un particulier base de données ou non.

Pour plus d'aide, veuillez passer par cette Hive 11

10
Mukesh S

Exécutez la commande suivante: show tables in DB like 'TABLENAME'
Si la table existe, son nom sera retourné, sinon rien ne sera retourné.
Cela se fait directement depuis Hive. pour plus d'options, voir this .

DB est la base de données dans laquelle vous souhaitez voir si la table existe.
TABLENAME est le nom de table que vous recherchez,

Ce qui se passe réellement, c'est que Hive interroge son métastore (dépend de votre configuration mais il peut être dans un SGBDR standard comme MySQL) afin que vous puissiez éventuellement vous connecter directement au même métastore et écrire votre propre requête pour voir si la table existe.

14
dimamah

Lors de la programmation sur Hive par Spark SQL, vous pouvez utiliser la méthode suivante pour vérifier si la table Hive existe.

if (hiveContext.hql("SHOW TABLES LIKE '" + tableName + "'").count() == 1) {
    println(tableName + " exists")
}
12
Haimei

Si quelqu'un utilise le script Shell comme moi, ma réponse pourrait être utile. Supposons que votre table se trouve dans l'espace de noms par défaut.

table=your_Hive_table
validateTable=$(Hive --database default -e "SHOW TABLES LIKE '$table'")
if [[ -z $validateTable ]]; then
  echo "Error:: $table cannot be found"
  exit 1
fi
6

Si vous utilisez SparkSQL, vous pouvez effectuer les opérations suivantes.

if "table_name" in sqlContext.tableNames("db_name"):
    ...do something

http://spark.Apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.SQLContext.tableNames

4
Nicolas Castro

Un code similaire à celui ci-dessous peut être trouvé dans la plupart de mes Spark notebooks:

stg_table_exists = sqlCtx.sql("SHOW TABLES IN "+ stg_db) 
                  .filter("tableName='%s'" % stg_tab_name) .collect()

(fabriqué en deux lignes pour plus de lisibilité)

Je souhaite Spark aurait un appel API pour vérifier la même chose.

3
Tagar

Si vous utilisez une application scala spark et SparkSQL), vous pouvez effectuer les opérations suivantes

if spark.catalog.tableExists("tablename") {do something}
0
Tim