Я пытаюсь ускорить динамическое разделение куста c на многораздельной управляемой (внутренней) таблице. Схема таблицы следующая:
hive> describe formatted saibhargav_history;
OK
# col_name data_type comment
appid string
appstatus string
apptype string
submittime bigint
starttime bigint
finishtime bigint
launchtime bigint
jobcounters map<string,string>
# Partition Information
# col_name data_type comment
finishyear string
finishmonth string
finishday string
finishhour string
# Detailed Table Information
Database: saibhvar
Owner: bhargav
CreateTime: Thu Sep 26 09:54:48 GMT 2019
LastAccessTime: UNKNOWN
Protect Mode: None
Retention: 0
Location: hdfs://user/saibhargav/jobhistory
Table Type: MANAGED_TABLE
Table Parameters:
bucketing_version 2
orc.compress SNAPPY
transient_lastDdlTime 1569491688
# Storage Information
SerDe Library: org.apache.hadoop.hive.ql.io.orc.OrcSerde
InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
Storage Desc Params:
line.delim \n
serialization.format 1
Time taken: 0.401 seconds, Fetched: 54 row(s)
Я запускаю службу извлечения истории (все adho c и запланированные запросы кустов), отправляемую каждые 4 часа, которая заполняет эту таблицу путем разбиения таблицы на основе времени окончания работ (конечный год, конечный месяц, конечный день и конечный год), которые выполнялись в этот период времени. Предположим, что на более поздней итерации, если запись, которая попадает под раздел (finishyear = 2020, finishmonth = 04, finishday = 28 и finishhour = 04), динамически добавляется в таблицу, она перезаписывает содержимое этого раздела содержимым этого задания.
Вставка в управляемую таблицу выполняется с помощью этого запроса:
insert into table `saibhvar.saibhargav_history` partition(`finishyear`,`finishmonth`,`finishday`,`finishhour`)
select `appId`,`appStatus`,`appType`,`submitTime`,`startTime`,`finishTime`, str_to_map(`jobCounters`,'\\006','\\005'),`finishYear`,`finishMonth`,`finishDay`,`finishHour` from `saibhvar.temp_table_1588226958`
saibhvar.temp_table_1588226958
- это временная таблица, в которую служба извлечения истории направляет данные и облегчает динамическое вставка секционирования c в управляемую таблицу.
Я следовал за документацией https://cwiki.apache.org/confluence/display/Hive/DynamicPartitions.
Любые мысли о том, как я могу решить эту проблему и предотвратить перезапись данных в разделах.