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 分区表的记录数的主要内容,如果未能解决你的问题,请参考以下文章

查询所有HIVE表分区数据量

查询所有HIVE表分区数据量

Hive插入多个分区时OOM故障解决记录

hive多个分区插入同一个表

hive分区表

Spark 不使用 Hive 分区外部表中的分区信息