Странное поведение я никогда не видел.
A содержит файлы паркетных дисков в моей HDFS, сгенерированные Spark, разбитые на 3 раздела.
Вот количество всех разделов.Он был рассчитан по Spark .
+----------+--------+
|created_at|count(1)|
+----------+--------+
| 20190101|12774895|
| 20181231|18648432|
| 20190102|30010065|
+----------+--------+
Всего: 61433392 записей
Улей
Создана таблица.
CREATE EXTERNAL TABLE raw.event (
account_type STRING,
event_name STRING,
payload MAP<STRING, STRING>
)
PARTITIONED BY(created_at INT, product_name STRING, event_type STRING)
STORED AS PARQUET LOCATION '/datalake/raw/event'
TBLPROPERTIES('PARQUET.COMPRESS'='SNAPPY');
Добавлены все разделы.
Показать разделы raw.event;
+---------------------------------------------------------------------+--+
| partition |
+---------------------------------------------------------------------+--+
| created_at=20181231/product_name=A/event_type=X |
| created_at=20190101/product_name=A/event_type=X |
| created_at=20190102/product_name=A/event_type=X |
+---------------------------------------------------------------------+--+
Выполните полный подсчет, чтобы убедиться, что все работает гладко:
0: jdbc: hive2: // headnodehost: 10001 /> select count (*) из raw.event;
+-----------+--+
| _c0 |
+-----------+--+
| 61433392 |
+-----------+--+
Ожидаемый результат!ОК:)
Теперь считайте только с одного раздела.
0: jdbc: hive2: // headnodehost: 10001 /> выберите количество (*) из raw.event, где созданный_кат =20190102 и product_name = 'A' и event_type = 'X';
Вместо этого получите ожидаемое число строк 12774895 Я все еще получаю полный счет.
+-----------+--+
| _c0 |
+-----------+--+
| 61433392 |
+-----------+--+
Теперь я пытаюсь сосчитать и сгруппировать по разделу made_at .
0: jdbc: hive2: // headnodehost: 10001 /> SELECT созданный_at, count (*) FROM raw.event group by creat_at;
+-------------+-----------+--+
| created_at | _c1 |
+-------------+-----------+--+
| 20190102 | 61433392 |
+-------------+-----------+--+
Я все еще получаю полное количество строк и только последний добавленный раздел.
Я почти уверен, что паркетфайлы содержат различные значения create_at .
Избегайте использования статистики, также не помогает.
set hive.compute.query.using.stats=false;
Анализ таблицы также не помогает:
0: jdbc: hive2: // headnodehost: 10001 /> ANALYZE TABLE raw.event PARTITION (созданный_каталог_имя_продукта, тип_ события) КОМПЬЮТЕРНАЯ СТАТИСТИКА;
INFO : Partition raw.event{created_at=20181231, product_name=A, event_type=X} stats: [numFiles=111, numRows=**61433392**, totalSize=19637211108, rawDataSize=1965868544]
INFO : Partition raw.event{created_at=20190101, product_name=A, event_type=X} stats: [numFiles=111, numRows=0, totalSize=19637211108, rawDataSize=0]
INFO : Partition raw.event{created_at=20190102, product_name=A, event_type=X} stats: [numFiles=111, numRows=0, totalSize=19637211108, rawDataSize=0]
Форцинga раздел дает тот же результат.
0: jdbc: hive2: // headnodehost: 10001 /> ANALYZE TABLE raw.event PARTITION (create_at = 20190102, product_name, event_type) COMPUTE STATISTICS;
INFO : Partition raw.event{created_at=20190102, product_name=A, event_type=X} stats: [numFiles=111, numRows=**61433392**, totalSize=19637211108, rawDataSize=1965868544]
Есть предложения?