[英]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.