Количество записей для разделенной таблицы Hive - PullRequest
0 голосов
/ 09 мая 2018

У меня есть таблица с именем " транзакция " в 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') и т. Д.

Я здесь не так? Даже если выходные данные обоих запросов верны, в чем причина вышеуказанного вывода?

1 Ответ

0 голосов
/ 10 мая 2018

Наблюдаемый результат обусловлен наличием разделов 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
...