首页 > 解决方案 > Snowflake:以多种分隔符格式导出数据

问题描述

要求:

需要将文件导出为以下格式,其中性别、年龄和兴趣是列,之后的值:是该列的数据。这可以在使用雪花时实现吗,如果没有,是否可以使用 Python 导出数据

User1234^gender:male;age:18-24;interest:fishing
User2345^gender:female
User3456^age:35-44
User4567^gender:male;interest:fishing,boating

编辑 1:@demircioglu 给出的解决方案

它显示为 NULL 值而不是其他列值

EMPLOYEES 表数据下方

在此处输入图像描述

当我在查询下方运行时

SELECT 'EMP_ID'||EMP_ID||'^'||'FIRST_NAME'||':'||FIRST_NAME||';'||'LAST_NAME'||':'||LAST_NAME FROM tempdw.EMPLOYEES  ;

在此处输入图像描述

标签: snowflake-cloud-data-platform

解决方案


使用所需格式创建 SQL 并将其写入文件

COPY INTO @~/stage_data
FROM 
(
SELECT 'User'||User||'^'||'gender'||':'||gender||';'||'age'||':'||age||';'||'interest'||':'||interest FROM table
)
file_format = (TYPE=CSV compression='gzip')

此处的文件格式并不重要,因为由于您的分隔符要求,每一行都将被视为一个字段

编辑: 如果你有一个 NULL 值CONCAT,函数(用别名)返回 NULL。||为了消除 NULL,您可以使用NVL2函数

所以你的 SQL 会有一系列的NVL2s

NVL2 检查第一个参数,如果不是 NULL 返回第一个表达式,如果是 NULL 返回第二个表达式

所以对于用户列

'User'||User||'^'会变成

NVL2(User,'User','')||NVL2(User,User,'')||NVL2(User,'^','')

PS 我留给你创建其余的 SQL,因为 Stackoverflow 的功能是帮助找到解决方案,而不是勺子提供解决方案。


推荐阅读