Разбиение Dynami c на управляемой таблице куста перезаписывает существующие разделы, когда ожидается добавление - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь ускорить динамическое разделение куста 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.

Любые мысли о том, как я могу решить эту проблему и предотвратить перезапись данных в разделах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...