簡體   English   中英

在Hive中識別分區表

[英]Identifying Partitioned tables in Hive

有什么方法可以在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中是否有類似功能? 請提出建議。

您可以直接與hive metastore數據庫連接,並獲取有關已分區表的信息。 需要了解以下信息,可能會根據您的集群配置而變化:

  1. 配置hive metastore的數據庫(例如PostgreSQL,mysql等)用於存儲有關表的元數據。
  2. 通常, metastore是數據庫名稱,表信息存儲在該數據庫中的配置單元metastore數據庫中。
  3. TBLS是存儲配置單元表信息的表。 DBS是存儲配置單元數據庫信息的表,而PARTITIONS是存儲有關配置單元中分區信息的表。
  4. DB_ID是外鍵TBLSTBL_ID是外鍵TBLSPARTITIONS
  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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM