.NETアプリケーションからODBCドライバーを介してHiveに接続しています。テーブルが既に存在するかどうかを判断するクエリはありますか?
たとえば、MSSQLでは、INFORMATION_SCHEMA
テーブルおよびNetezzaでは、_v_table
テーブル。
どんな援助も大歓迎です。
次の2つの方法で確認できます。
1.)@dimamahが示唆したように、ここに1つのポイントを追加するために、このアプローチでは
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.)2番目のアプローチは、HiveMetastoreClient APIを使用することです。APIを直接使用して、table_nameが特定のデータベースに存在するかどうかを確認できます か否か。
さらにサポートが必要な場合は、こちらをご覧ください Hive 11
次のコマンドを実行します:show tables in DB like 'TABLENAME'
テーブルが存在する場合、その名前が返され、そうでない場合は何も返されません。
これはHiveから直接行われます。その他のオプションについては this をご覧ください。
DB
は、テーブルが存在するかどうかを確認するデータベースです。TABLENAME
は、求めるテーブル名です。
実際に行われるのは、Hiveが metastore (設定によって異なりますが、MySQLのような標準RDBMS内に存在する可能性がある)をクエリするため、オプションで同じメタストアに直接接続し、独自のクエリを作成して、テーブルが存在します。
Spark SQLでHiveをプログラミングする場合、次のメソッドを使用してHiveテーブルが存在するかどうかを確認できます。
if (hiveContext.hql("SHOW TABLES LIKE '" + tableName + "'").count() == 1) {
println(tableName + " exists")
}
誰かが私のようなシェルスクリプトを使用している場合、私の答えは役に立つかもしれません。テーブルがデフォルトのネームスペースにあると仮定します。
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
SparkSQLを使用している場合、次のことができます。
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
以下のようなコードは、私のSparkノートブックの多くで見つけることができます。
stg_table_exists = sqlCtx.sql("SHOW TABLES IN "+ stg_db)
.filter("tableName='%s'" % stg_tab_name) .collect()
(読みやすくするために2ライナーを作成しました)
Spark=同じことを確認するためのAPI呼び出しが必要です。
scala sparkアプリとSparkSQLを使用している場合、次のことができます。
if spark.catalog.tableExists("tablename") {do something}