我在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')
等等
我做错了吗?即使两个查询的输出都是正确的,那么产生上述输出的原因是什么?
1条答案
按热度按时间vkc1a9a21#
观察到的输出是由于hive分区是为将来而存在的,但是还没有在hdfs中为它们填充数据文件。
尝试使用这些命令来获得关于有数据和无数据分区的更多信息。图中假设创建了3个分区,第3个分区还没有数据文件。
获取为表创建的分区
获取记录计数(对于包含数据的分区):