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

Flink SQL重复解析JSON致CPU过高,求单次解析复用优化方案

针对多次调用json_value重复解析同一段JSON导致CPU占用高的问题,Flink 1.16里有两种可行方案实现单次解析复用:

方案一:使用JSON_TABLE函数一次性解析提取字段

JSON_TABLE可以一次性解析JSON字符串并提取所有需要的字段,底层只会执行一次解析操作。改写后的SQL如下:

SELECT 
    t.key1,
    t.key2,
    t.key3,
    t.key4
FROM input_table,
LATERAL TABLE(JSON_TABLE(
    json_str,
    '$' COLUMNS(
        key1 STRING PATH '$.key1',
        key2 STRING PATH '$.key2',
        key3 STRING PATH '$.key3',
        key4 STRING PATH '$.key4'
    )
)) AS t

通过LATERAL TABLE关联JSON_TABLE,一次性从json_str中提取所有目标字段,避免了多次解析开销。

方案二:先解析为JSON对象再提取字段

先用JSON_PARSE将JSON字符串解析成JSON对象,后续字段提取直接基于这个已解析的对象操作,同样只触发一次解析:

WITH parsed_json AS (
    SELECT 
        JSON_PARSE(json_str) AS json_obj
    FROM input_table
)
SELECT
    JSON_VALUE(json_obj, '$.key1') AS key1,
    JSON_VALUE(json_obj, '$.key2') AS key2,
    JSON_VALUE(json_obj, '$.key3') AS key3,
    JSON_VALUE(json_obj, '$.key4') AS key4
FROM parsed_json

CTE里的JSON_PARSE完成单次解析,后续的JSON_VALUE都是对已解析对象的字段读取,不会重复解析原字符串。

这两种方案都能有效降低CPU占用,可根据实际场景选择使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:08:14