Имея разделенную таблицу Hive
CREATE EXTERNAL TABLE IF NOT EXISTS CUSTOMER_PART (
NAME string ,
AGE int ,
YEAR INT)
PARTITIONED BY (CUSTOMER_ID decimal(15,0))
STORED AS PARQUET LOCATION 'HDFS LOCATION'
Первая LOAD выполняется из ORACLE в HIVE через PYSPARK с использованием
INSERT OVERWRITE TABLE CUSTOMER_PART PARTITION (CUSTOMER_ID) SELECT NAME, AGE, YEAR, CUSTOMER_ID FROM CUSTOMER;
, который прекрасно работает и создаетразделить динамически во время бега.Теперь при постепенной загрузке данных каждый день создаются отдельные файлы для одной записи в разделе.
INSERT INTO TABLE CUSTOMER_PART PARTITION (CUSTOMER_ID = 3) SELECT NAME, AGE, YEAR FROM CUSTOMER WHERE CUSTOMER_ID = 3; --Assume this gives me the latest record in the database
Есть ли возможность добавить значение к существующему файлу паркета в разделе, пока оно не достигнет размера блока?без создания файлов меньшего размера для каждой вставки.
Перезапись всего раздела является одним из вариантов, но я бы предпочел не делать этого
INSERT OVERWRITE TABLE CUSTOMER_PART PARTITION (CUSTOMER_ID = 3) SELECT NAME, AGE, YEAR FROM CUSTOMER WHERE CUSTOMER_ID = 3;
Следующие свойства установлены для Hive
set hive.execution.engine=tez; -- TEZ execution engine
set hive.merge.tezfiles=true; -- Notifying that merge step is required
set hive.merge.smallfiles.avgsize=128000000; --128MB
set hive.merge.size.per.task=128000000; -- 128MB
Что по-прежнему не помогает с ежедневными вставками.Любой альтернативный подход, который можно использовать, будет очень полезен.