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

Databricks中如何拆分Deck_Info并将范围展开为多行(含多分隔符)?

Databricks SQL 实现Deck_Info字段多场景拆分

以下是针对需求优化后的SQL查询,可同时处理多分隔符拆分和范围展开:

WITH processed_data AS (
    -- 统一范围标识:将TO/to、数字间的短横线替换为~,避免与非范围短横线混淆
    SELECT 
        id,
        regexp_replace(
            regexp_replace(Deck_Info, '\\s*(TO|to)\\s*', '~'),
            '(?<=\\d)-(?!\\d)', '~'
        ) AS normalized_info
    FROM raw_data
),
split_units AS (
    -- 按所有非范围分隔符拆分出独立单元
    SELECT 
        id,
        explode(
            split(
                normalized_info,
                '\\s*(,|&|/|\\+|\\.)\\s*'  -- 匹配带可选空格的目标分隔符
            )
        ) AS unit
    FROM processed_data
),
expand_ranges AS (
    -- 展开范围单元,普通单元直接保留
    SELECT 
        id,
        CASE 
            WHEN unit LIKE '%~%' THEN 
                explode(
                    sequence(
                        cast(split(unit, '~')[0] AS INT),
                        cast(split(unit, '~')[1] AS INT)
                    )
                )
            ELSE cast(unit AS INT)  -- 假设字段值为数字,若含字符串需调整类型
        END AS deck_value
    FROM split_units
)
SELECT id, deck_value FROM expand_ranges

关键逻辑说明:

  • 统一范围标识:先将TO/to和数字间的短横线替换为~,避免误处理产品型号等场景中的非范围短横线。
  • 拆分独立单元:通过split函数按,、&、/、+、.(支持前后带空格)拆分出单个值或范围表达式。
  • 展开范围值:利用sequence生成区间内的所有整数,再通过explode将范围展开为多行;非范围单元直接转换为对应类型输出。

注意事项:

  • 若Deck_Info包含非数字的范围或值,需调整cast的类型,字符串范围需额外编写逻辑处理。
  • 若存在数字与字符串混合的场景,需添加判断逻辑区分处理不同类型的单元。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:12:47