在Hive中识别分区表

时间:2017-12-26 07:18:50

标签: sql hive database-partitioning

有没有办法允许在Hive中列出分区表? 我找到了允许在SQL Server中实现这种情况的方法。

https://dba.stackexchange.com/questions/14996/how-do-i-get-a-list-of-all-the-partitioned-tables-in-my-database

我想仅列出特定数据库下的分区表,这样我就无法检查多个表的DDL以查找表是分区还是非分区。 Hive中的任何类似功能?请建议。

1 个答案:

答案 0 :(得分:0)

您可以直接连接hive Metorore数据库并获取有关已分区的表的信息。 需要了解以下信息,可能会根据您的群集配置进行更改:

  1. 数据库(例如PostgreSQL,mysql等),其中hive Metorore配置为存储有关表的元数据。
  2. 通常metastore是表信息存储在hive Metastore数据库中的数据库名称。
  3. TBLS是存储配置单表信息的表。 DBS是存储配置单元数据库信息的表,PARTITIONS是存储有关配置单元中的分区信息的表。
  4. DB_IDTBLS中的外键,TBL_IDTBLSPARTITIONS的外键。
  5. 加入以下表格:

    select d."NAME" as DATABASE_NAME, t."TBL_NAME" as TABLE_NAME, p."PKEY_NAME" as PARTITION_KEY_NAME from "PARTITION" p join "TBLS" on p."TBL_ID"=t."TBL_ID" join "DBS" dat on t."DB_ID"=d."DB_ID" where d."NAME"="filterdbname" AND p."PKEY_NAME" is not null; 这是sql方法。如果需要程序化方法。 HiveMetaStoreClient API可用于查询Metastore表。需要Metastore连接设置。在java下面是伪代码,

    import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;

    HiveConf conf = new HiveConf(); hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, Address+":"+ Port); HiveMetaStoreClient hiveMetaStoreClient = new HiveMetaStoreClient(conf);