У меня есть внутренняя таблица impala, разделенная на несколько столбцов, и я хочу выполнить группировку по некоторым полям, включая столбцы разделения, в основном мой запрос выглядит так:
select market, col1, count(1) from mytable group by market, col1
с «рынком», являющимся разделительным столбцом.
Затем я получил сообщение «Превышен предел памяти», но если я выдам такой запрос:
select market, col1, count(1) from mytable where market='US' group by market, col1
Тогда я получаю свой результат без проблем с памятью.
Мне кажется, что в импале обрезка разделов действительно происходит, когда столбцы разделения находятся в предложениях where, но не работает, когда они находятся в группе group by, я прав? Если мое предположение верно, то это меня шокирует, поскольку group by в столбце разделения просто запускает group by для подкаталога hdfs.
Вот начало сообщения профиля импала, когда я запускаю свой первый запрос:
Estimated Per-Host Requirements: Memory=7.59TB VCores=2
F02:PLAN FRAGMENT [UNPARTITIONED] 04:EXCHANGE [UNPARTITIONED]
hosts=39 per-host-mem=unavailable
tuple-ids=1 row-size=133B cardinality=28530506252
F01:PLAN FRAGMENT [HASH(market,col1)] DATASTREAM SINK [FRAGMENT=F02, EXCHANGE=04, UNPARTITIONED] 03:AGGREGATE [FINALIZE] | output: count:merge(1) | group by: market, col1 | hosts=39 per-host-mem=3.80TB | tuple-ids=1 row-size=133B cardinality=28530506252 | 02:EXCHANGE [HASH(market,col1)]
hosts=39 per-host-mem=0B
tuple-ids=1 row-size=133B cardinality=28530506252
F00:PLAN FRAGMENT [RANDOM] DATASTREAM SINK [FRAGMENT=F01, EXCHANGE=02, HASH(market,col1)] 01:AGGREGATE | output: count(1) | group by: market, col1 | hosts=39 per-host-mem=3.80TB | tuple-ids=1 row-size=133B cardinality=28530506252 | 00:SCAN HDFS [mytable, RANDOM]
partitions=5057/5057 files=5397 size=207.71GB
table stats: 28530506252 rows total
column stats: all
hosts=39 per-host-mem=384.00MB
tuple-ids=0 row-size=125B cardinality=28530506252