繁体   English   中英

Hive分区表的记录计数

[英]Record count for Hive partitioned table

我在Hive中有一个名为“ transaction ”的表,该表在名为“ DS”的列上进行分区,该列将具有诸如“ 2018-05-05”,“ 2018-05-09”,“ 2018-05-10”等数据。上

该表在完成的当天过夜。 该表在任何时候都将保留到前一天的数据

当我查询交易表时

SELECT COUNT(*) FROM trasaction WHERE DS >= "current date";

我懂了

0行-这是正确的,因为当前和将来的日期尚未加载数据

当我在查询下面运行时

SELECT DISTINCT DS FROM trasaction WHERE DS >= "current date";

我懂了

2018年5月9日
2018年5月10日
2018年5月11日
2018年5月12日
2018年5月13日
...
2018年8月30日

我已经检查了HDFS位置,并且分区文件夹也已经存在,以备将来使用。 我想是做ETL的人已经使用

ALTER TABLE trasaction ADD PARTITION (DS = '2018-05-13')

我在这里做错了吗? 即使两个查询的输出正确,上述输出的原因是什么?

观察到的输出是由于将来存在Hive分区,但是尚未在HDFS中为其填充数据文件。

尝试这些命令以获取有关具有和不具有数据的分区的更多信息。 该图假定创建了3个分区,而第3个分区还没有数据文件。

获取为表创建的分区

hive> show partitions transaction;

-- output 
ds=2018-05-13
ds=2018-05-14
ds=2018-05-15

获取记录计数(对于具有数据的分区):

-- Only partitions having data will be returned. In this case, partitions '2018-05-13' and '2018-05-14' have data. Hence, partition '2018-05-15' is not included.

select ds, count(*) 
from transaction 
where ds > '2018-05-12'
group by ds;

-- output
2018-05-13  3
2018-05-14  5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM