如何获取Hive表的分区列名称

时间:2016-08-19 02:26:00

标签: hive

我正在开发一个unix脚本,我将处理由列A或列B分区的Hive表。我想找到一个表是分区的列,以便我可以对其进行后续操作那些分区实例。

Hive中是否有任何属性直接返回分区列?

我想我必须做一个show create table并以某种方式提取分区名称,如果没有其他方法可行的话。

4 个答案:

答案 0 :(得分:2)

通过scala / java api,我们可以访问hive元存储并获取分区列名 org.apache.hadoop.hive.metastore.HiveMetaStoreClient

val conf = new Configuration()
conf.set("hive.metastore.uris","thrift://hdppmgt02.domain.com:9083")
val hiveConf = new HiveConf(conf, classOf[HiveConf])
val metastoreClient = new HiveMetaStoreClient(hiveConf)

metastoreClient.getTable(db, tbl).getPartitionKeys.foreach(x=>println("Keys : "+x))

答案 1 :(得分:1)

可能不是最好的,但还有一种方法是使用 describe 命令

创建表格:

create table employee ( id int, name string ) PARTITIONED BY (city string);

命令:

hive -e 'describe formatted employee'  | awk '/Partition/ {p=1}; p; /Detailed/ {p=0}'

<强>输出:

# Partition Information
# col_name              data_type               comment

city                    string

您可以根据需要改进它。

我探索的另一个选项是查询元存储库表以获取表的分区列信息。

答案 2 :(得分:0)

#use python pyhive:
import hive_client

def get_partition_column(table_name):
    #hc=hive connection
    hc=hive_client.HiveClient()
    cur=hc.query("desc "+table_name)
    return cur[len(cur)-1][0]


#################
hive_client.py

from pyhive import hive
default_encoding = 'utf-8'
host_name = 'localhost'
port = 10000
database="xxx"

class HiveClient:
    def __init__(self):
        self.conn = hive.Connection(host=host_name,port=port,username='hive',database=database)
    def query(self, sql):
        cursor = self.conn.cursor()
        #with self.conn.cursor() as cursor:
        cursor.execute(sql)
        return cursor.fetchall()

    def execute(self,sql):
        #with self.conn.cursor() as cursor:
        cursor = self.conn.cursor()
        cursor.execute(sql)

    def close(self):`enter code here`
        self.conn.close()

答案 3 :(得分:0)

rows = [['a', 'b', 'c'], ['c', 'b', 'a'], ..., ['a', 'c', 'b']]
values = np.array([]) 
for row in rows:
    values = np.append(values, row)