Databricks中拆分多账户字符串为单行单账户的SQL需求
解决方案(Databricks Spark SQL)
可以通过拆分字符串、行转列、提取纯账户号三个步骤实现需求,具体SQL如下:
SELECT DISTINCT ID, regexp_extract(account_item, '^(\\d+)', 1) AS Account FROM source_table LATERAL VIEW split(Account, ',') exploded_table AS account_item WHERE regexp_extract(account_item, '^(\\d+)', 1) != '';
代码说明:
- 拆分并炸开字符串:用
split(Account, ',')把逗号分隔的账户字符串拆成数组,再通过LATERAL VIEW explode将数组的每个元素转为单独行,得到每个ID对应的所有账户条目(包括带后缀的)。 - 提取纯账户号:用
regexp_extract配合正则^(\d+),提取每个账户条目中开头的数字部分,自动去掉-Michigan这类后缀。 - 去重:加
DISTINCT去掉同一ID下重复的账户号(比如源数据中1532214对应的109388和109388-Michigan处理后会重复,去重后只保留一条),符合“账户重复无影响”的要求。 - 过滤空值:
WHERE子句过滤掉可能的无效条目,避免拆分后出现空字符串的情况。
测试验证
用你提供的源数据测试,执行后会得到期望的输出结果:
| ID | Account |
|---|---|
| 1532214 | 109388 |
| 646729 | 109064 |
| 646729 | 134089 |
| 434239 | 652164 |
| 434239 | 654158 |
| 434239 | 156848 |
| 434239 | 6541635 |
| 434239 | 654615 |
| 434239 | 5451651 |
内容的提问来源于stack exchange,提问作者Ross Wimpey
相关产品推荐
相关产品推荐

