Hive 分区表的记录数
Posted
技术标签:
【中文标题】Hive 分区表的记录数【英文标题】:Record count for Hive partitioned table 【发布时间】:2018-05-09 15:16:00 【问题描述】:我在 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】:观察到的输出是由于 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
【讨论】:
以上是关于Hive 分区表的记录数的主要内容,如果未能解决你的问题,请参考以下文章