我通过.NET应用程序中的ODBC驱动程序连接到Hive。是否有查询来确定表是否已存在?
例如,在MSSQL中,您可以查询INFORMATION_SCHEMA
表,在Netezza中,您可以查询_v_table
表。
任何帮助都将不胜感激。
答案 0 :(得分:12)
执行以下命令:show tables in DB like 'TABLENAME'
如果表存在,将返回其名称,否则将不返回任何内容
这是直接从蜂巢完成的。有关更多选项,请参阅this。
DB
是您想要查看表是否存在的数据库
TABLENAME
是您寻求的表名,
实际发生的是Hive查询其metastore(取决于您的配置,但它可以在MySQL之类的标准RDBMS中),因此您可以选择直接连接到同一个Metastore并编写自己的查询以查看是否该表存在。
答案 1 :(得分:10)
有两种方法可以检查:
1。)正如@dimamah建议的那样,只需在这里添加一点,对于这种方法你需要
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.。)第二种方法是使用HiveMetastoreClient API,您可以直接使用API检查 table_name 是否存在于特定数据库中。
如需进一步帮助,请仔细阅读Hive 11
答案 2 :(得分:10)
使用Spark SQL在Hive上编程时,可以使用以下方法检查Hive表是否存在。
if (hiveContext.hql("SHOW TABLES LIKE '" + tableName + "'").count() == 1) {
println(tableName + " exists")
}
答案 3 :(得分:5)
如果有人使用像我这样的shell脚本,那么我的答案可能会有用。假设您的表位于默认命名空间中。
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
答案 4 :(得分:3)
类似于下面的代码可以在我的许多Spark笔记本中找到:
stg_table_exists = sqlCtx.sql("SHOW TABLES IN "+ stg_db)
.filter("tableName='%s'" % stg_tab_name) .collect()
(为了便于阅读而制作双线)
我希望Spark有一个API调用来检查相同的内容。
答案 5 :(得分:3)
如果您使用的是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
答案 6 :(得分:0)
如果您使用的是Scala Spark应用和SparkSQL,则可以执行以下操作
if spark.catalog.tableExists("tablename") {do something}