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

Hadoop 配置单元分区表的记录计数,hadoop,hive,bigdata,hadoop-partitioning,Hadoop,Hive,Bigdata,Hadoop Partitioning,我有一个名为transaction in Hive的表,它被划分在一个名为DS的列上,该列将包含2018-05-05、2018-05-09、2018-05-10等数据 此表在完成的当天整夜填充。在任何时候,该表都将包含前一天的数据 当我像这样查询事务表时 SELECT COUNT(*) FROM trasaction WHERE DS >= "current date"; 我明白了 0行-这是正确的,因为尚未加载当前和未来日期的数据 当我在下面运行查询时 SELECT DISTINCT

我有一个名为transaction in Hive的表,它被划分在一个名为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'等等


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

观察到的输出是由于将来存在配置单元分区,但尚未在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