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

Azure Databricks:筛选Delta表嵌套结构含指定元素的行

解决方案

要实现筛选出transform_options中存在至少一个条目满足order_duplicates_by包含_commit_version的行,同时保留这些符合条件的条目,可以结合filter和exists函数来完成:

最终查询语句

SELECT 
    table_name,
    filter(transform_options, (k, v) -> array_contains(v.order_duplicates_by, '_commit_version')) AS updated_transform_options
FROM prod.silver.platform_ctl_ingestion
WHERE exists(map_values(transform_options), v -> array_contains(v.order_duplicates_by, '_commit_version'));

关键说明

  1. 行筛选逻辑:
    使用exists(map_values(transform_options), v -> array_contains(v.order_duplicates_by, '_commit_version'))作为WHERE条件,判断当前行的transform_options中是否存在至少一个值的order_duplicates_by数组包含_commit_version,仅保留满足该条件的行。

  2. 过滤无效Map条目:
    使用filter函数遍历transform_options的键值对,仅保留符合条件的条目,避免原查询中保留NULL值条目的问题。

原查询问题分析

你之前的查询没有添加行筛选的WHERE子句,因此会返回所有行;同时transform_values只是将不符合条件的条目设为NULL,但不会移除这些条目。如果需要保留所有行但标记不符合的条目为NULL,只需在原查询基础上添加WHERE条件即可:

SELECT 
    *,
    transform_values(transform_options, (k, v) -> 
        CASE
            WHEN array_contains(v.order_duplicates_by, '_commit_version') THEN v
            ELSE NULL
        END
    ) AS updated_transform_options
FROM prod.silver.platform_ctl_ingestion
WHERE exists(map_values(transform_options), v -> array_contains(v.order_duplicates_by, '_commit_version'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:24