如何检查Hive中是否存在表?

时间:2014-01-17 19:53:52

标签: sql odbc hive

我通过.NET应用程序中的ODBC驱动程序连接到Hive。是否有查询来确定表是否已存在?

例如,在MSSQL中,您可以查询INFORMATION_SCHEMA表,在Netezza中,您可以查询_v_table表。

任何帮助都将不胜感激。

7 个答案:

答案 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}