在我的数据中,有一个字段包含多个以逗号分隔的电子邮件。我使用 FLATTEN 将电子邮件分成自己的记录,保持所有其他字段相同。我需要能够创建一个新字段,为每封由 FLATTEN 函数分隔的电子邮件分配一个 id。
FLATTEN 部分正在工作,我正在将电子邮件分开,但我不知道如何创建新的 id 字段。我在雪花工作。
示例
来源记录:
身份证 | EMAIL_TO |
---|---|
1 | 电子邮件1,电子邮件2,电子邮件3 |
我需要什么:
身份证 | EMAIL_TO | NEW_DERIVED_ID |
---|---|---|
1 | 电子邮件1 | 1 |
1 | 电子邮件2 | 2 |
1 | 电子邮件3 | 3 |
CREATE OR REPLACE VIEW MYVIEW (
ID,
EMAIL_TO,
NEW_DERIVED_ID_FOR_EACH_SPLIT_EMAIL_TO_FIELD
) as (
SELECT
ID,
collate(cast(replace(value, '"')as varchar),'en-ci-trim') as EMAIL_TO,
NEW_DERIVED_ID_FOR_EACH_SPLIT_EMAIL_TO_FIELD
FROM MYSOURCE as CM,
LATERAL FLATTEN(input=>split(CM.EMAIL_TO, ',')) as EMAIL_TO
where EMAIL_TO is not null
);
您的主要查询类似于:
SELECT ID,
VALUE AS EMAIL, INDEX+1 AS NEW_DERIVED_ID
FROM MYSOURCE as CM,
LATERAL FLATTEN(input=>split(CM.EMAIL_TO, ',')) as f
WHERE EMAIL_TO is not null;