Hadoop 配置单元分区表的记录计数
我有一个名为transaction in Hive的表,它被划分在一个名为DS的列上,该列将包含2018-05-05、2018-05-09、2018-05-10等数据 此表在完成的当天整夜填充。在任何时候,该表都将包含前一天的数据 当我像这样查询事务表时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
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