【发布时间】:2016-12-08 20:20:16
【问题描述】:
我有一个每天都会更新的事务表table_A。每天我都会使用file_date 字段从外部table_B 将新数据插入table_A,以过滤来自外部table_B 的必要数据以插入table_A。但是,如果我使用硬编码日期与使用 Hive 日期函数相比,性能会有很大差异:
-- Fast version (~20 minutes)
SET date_ingest = '2016-12-07';
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.exec.dynamic.partition = TRUE;
INSERT
INTO
TABLE
table_A PARTITION (FILE_DATE) SELECT
id, eventtime
,CONCAT_WS( '-' ,substr ( eventtime ,0 ,4 ) ,SUBSTRING( eventtime ,5 ,2 ) ,SUBSTRING( eventtime ,7 ,2 ) )
FROM
table_B
WHERE
file_date = ${hiveconf:date_ingest}
;
相比:
-- Slow version (~9 hours)
SET date_ingest = date_add(to_date(from_unixtime( unix_timestamp( ) )),-1);
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.exec.dynamic.partition = TRUE;
INSERT
INTO
TABLE
table_A PARTITION (FILE_DATE) SELECT
id, eventtime
,CONCAT_WS( '-' ,substr ( eventtime ,0 ,4 ) ,SUBSTRING( eventtime ,5 ,2 ) ,SUBSTRING( eventtime ,7 ,2 ) )
FROM
table_B
WHERE
file_date = ${hiveconf:date_ingest}
;
有没有人遇到过类似的问题?您应该假设我无权访问 Unix hive 命令(即无法使用 --hiveconf 选项),因为我们使用的是第三方 UI。
【问题讨论】:
标签: performance hadoop hive query-optimization hiveql