我正在进行一项测试,我必须找出一个表的分区数并检查它是否正确。如果我使用show partitions TableName
我按名称获取所有分区,但是我希望得到分区的数量,比如show count(partitions) TableName
行(它返回OK btw ..所以它不好)并得到12(例如)。
有没有办法实现这个目标?
答案 0 :(得分:4)
使用Hive CLI
$ hive --silent -e "show partitions <dbName>.<tableName>;" | wc -l
- silent是启用静默模式
-e告诉hive执行引用的查询字符串
答案 1 :(得分:3)
您可以使用:
select count(distinct <partition key>) from <TableName>;
答案 2 :(得分:1)
通过使用以下命令,您将获得所有分区,并且最后它显示已获取的行数。该行数表示分区数
SHOW PARTITIONS [db_name。] table_name [PARTITION(partition_spec)];
例如 -
[在此处输入图像说明] [1]
答案 3 :(得分:0)
您可以使用WebHCat界面获取此类信息。这样做的好处是,您可以从服务器可访问的任何位置运行该命令。结果是JSON - 使用您选择的JSON解析器来处理结果。
在这个将WebHCat结果传递给Python的示例中,仅返回数字24,表示该表的分区数。 (服务器名称是名称节点)。
curl -s 'http://*myservername*:50111/templeton/v1/ddl/database/*mydatabasename*/table/*mytablename*/partition?user.name=*myusername*' | python -c 'import sys, json; print len(json.load(sys.stdin)["partitions"])'
24
答案 4 :(得分:0)
在scala中,您可以执行以下操作:
sql("show partitions <table_name>").count()
答案 5 :(得分:0)
我使用了以下内容。
beeline -silent --showHeader=false --outputformat=csv2 -e 'show partitions <dbname>.<tablename>' | wc -l
答案 6 :(得分:-2)
使用以下语法:
show create table <table name>;