配置单元分区表的记录计数

snvhrwxg  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(405)

我在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-05-09
2018-05-10
2018-05-11
2018-05-12
2018-05-13
...
2018-08-30
我已经检查了hdfs的位置和分区文件夹已经存在的未来日期以及。我猜做etl的人,已经为将来的日期添加了分区 ALTER TABLE trasaction ADD PARTITION (DS = '2018-05-13') 等等
我做错了吗?即使两个查询的输出都是正确的,那么产生上述输出的原因是什么?

vkc1a9a2

vkc1a9a21#

观察到的输出是由于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

相关问题