是可以计算分区数?

时间:2014-02-18 15:04:02

标签: hadoop hive hiveql

我正在进行一项测试,我必须找出一个表的分区数并检查它是否正确。如果我使用show partitions TableName我按名称获取所有分区,但是我希望得到分区的数量,比如show count(partitions) TableName行(它返回OK btw ..所以它不好)并得到12(例如)。
有没有办法实现这个目标?

7 个答案:

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