3.3.10 cbo丢失字段统计信息报错missing statistic of col

【详述】问题详细描述
【背景】线上一个SQL从3.3.7->3.3.10后运行报错cbo统计问题 本地可以稳定复现
【业务影响】
【是否存算分离】存算一体
【StarRocks版本】3.3.10
【集群规模】
【机器信息】CPU虚拟核/内存/网卡,例如:48C/64G/万兆
【联系方式】社区群22 hpp
【附件】

  • fe.log/beINFO/相应截图

    SQLException: (conn=16) only found column statistics: {41: VOUCHERGROUPNO, 115: json_query, 52: BUSDATE, 116: json_query, 117: json_query, 118: json_query, 119: json_query, 120: json_query, 121: json_query, 122: json_query, 59: key, 60: value, 125: json_query, 62: case, 127: json_query, 65: cast, 130: json_query, 2: Id, 131: json_query, 133: json_query, 135: json_query, 137: json_query, 11: YEAR, 12: PERIOD, 15: Invalid, 19: POSTERID, 23: DocumentStatus}, but missing statistic of col: 9: VOUCHERGROUPID.

最小复现case
cbo报错复现case.sql (36.4 KB)

补充一个方便复现的case:
SELECT
/*+ SET_VAR(“spill_mode”= ‘auto’, “new_planner_optimize_timeout”= ‘3000000’) */
entry AS entry, subject_name_json
FROM (SELECT t7.entry, CASE WHEN CAST(CAST(t7.entry1 AS JSON) -> ‘FACCOUNTID’ -> ‘FullName’ AS VARCHAR) = ‘[]’ THEN ‘’ ELSE t8.value END AS subject_name_json
FROM ((SELECT entry, entry AS entry1
FROM (SELECT t3.entry, CASE WHEN CAST(CAST(t3.entry1 AS JSON) -> ‘FCURRENCYID’ -> ‘Name’ AS VARCHAR) = ‘[]’ THEN ‘’ ELSE t4.value END AS currency_json
FROM ((SELECT entry, entry AS entry1
FROM (SELECT CASE WHEN t.value IS NULL THEN NULL ELSE t.value END AS entry
FROM ((SELECT _tmp_ods_api_kidxk_gl_voucher_info_f2.GL_VOUCHERENTRY
FROM hpp._tmp_ods_api_kidxk_gl_voucher_info_f2) AS _tmp_ods_api_kidxk_gl_voucher_info_f2 INNER JOIN JSON_EACH(CASE WHEN CAST(CASE WHEN GL_VOUCHERENTRY = ‘[]’ THEN NULL ELSE GL_VOUCHERENTRY END AS JSON) IS NULL THEN ‘{“mock”:null}’ ELSE CAST(CASE WHEN GL_VOUCHERENTRY = ‘[]’ THEN NULL ELSE GL_VOUCHERENTRY END AS JSON) END) AS t ON TRUE)) AS t0
WHERE CAST(CAST(entry AS JSON) -> ‘Id’ AS VARCHAR) <> ‘0’) AS t3 INNER JOIN JSON_EACH(CASE WHEN CAST(CAST(entry1 AS JSON) -> ‘FCURRENCYID’ -> ‘Name’ AS JSON) IS NULL THEN ‘{“mock”:null}’ ELSE CAST(CAST(entry1 AS JSON) -> ‘FCURRENCYID’ -> ‘Name’ AS JSON) END) AS t4 ON TRUE)) AS t5) AS t7 INNER JOIN JSON_EACH(CASE WHEN CAST(CAST(entry1 AS JSON) -> ‘FACCOUNTID’ -> ‘FullName’ AS JSON) IS NULL THEN ‘{“mock”:null}’ ELSE CAST(CAST(entry1 AS JSON) -> ‘FACCOUNTID’ -> ‘FullName’ AS JSON) END) AS t8 ON TRUE)) AS t9

project合并到input中的filter节点算子


后续cbo优化的时候从context拿统计信息的时候没有拿到


这部分异常的逻辑有大佬可以帮忙看下嘛