gpt4 book ai didi

performance - 使用 Hive 日期函数而不是硬编码日期字符串时,Hive 查询性能很慢?

转载 作者:可可西里 更新时间:2023-11-01 14:51:56 28 4
gpt4 key购买 nike

我有一个每天更新的事务表 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。

最佳答案

有时在 filter 子句中使用函数时分区修剪不起作用。如果您计算包装器 shell 脚本中的变量并将其作为 -hiveconf 变量传递给 Hive,它将正常工作。示例:

#inside shell script
date_ingest=$(date -d '-1 day' +%Y-%m-%d)
hive -f your_script.hql -hiveconf date_ingest="$date_ingest"

然后在 Hive 脚本中使用它作为 WHERE file_date ='${hiveconf:date_ingest}'

关于performance - 使用 Hive 日期函数而不是硬编码日期字符串时,Hive 查询性能很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41048132/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com