You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Athena中重复使用split_part的查询以提升速度?

Athena查询优化:减少split_part重复调用提升性能

当然可以优化,而且方法很直接——把KEY一次性拆分成数组,后续直接通过数组下标取对应元素就行,避免重复拆分字符串带来的额外计算开销。

优化后的查询语句如下(用子查询先完成一次拆分):

SELECT
    key_parts[1] AS serviceid,
    key_parts[2] AS eventtype,
    CAST(date_parse(concat(key_parts[3], '-', key_parts[4], '-', key_parts[5]), '%Y-%m-%d') AS DATE) AS createTime
FROM (
    SELECT
        split(KEY, '/') AS key_parts
    FROM TEST2
    WHERE dt = '2023-05-24-01-00' 
      AND cardinality(split(KEY, '/')) > 5
) AS split_keys;

或者用CTE(公共表表达式)写法,可读性更好:

WITH split_keys AS (
    SELECT
        split(KEY, '/') AS key_parts
    FROM TEST2
    WHERE dt = '2023-05-24-01-00' 
      AND cardinality(split(KEY, '/')) > 5
)
SELECT
    key_parts[1] AS serviceid,
    key_parts[2] AS eventtype,
    CAST(date_parse(concat(key_parts[3], '-', key_parts[4], '-', key_parts[5]), '%Y-%m-%d') AS DATE) AS createTime
FROM split_keys;

优化原理

原查询中每次调用split_part都会重新对KEY字符串执行一次拆分操作,多次调用就会产生重复计算。上面的写法只在子查询/CTE中执行一次split(KEY, '/')将字符串拆分为数组,后续所有字段提取都直接访问数组的对应下标(Athena数组下标从1开始,和split_part的参数逻辑一致),彻底避免了重复拆分的开销,能有效提升查询速度。

内容的提问来源于stack exchange,提问作者sclee1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:44:55