如何在 Snowflake 中选择一个 csv 行的变量列作为多列?

Posted

技术标签:

【中文标题】如何在 Snowflake 中选择一个 csv 行的变量列作为多列?【英文标题】:How to select variant column with one csv row as multiple columns in Snowflake? 【发布时间】:2021-01-28 13:08:54 【问题描述】:

我在雪花中有一个表 TABVAR,其中有列 Var_Col,它是 VARIANT 类型。我从一些csv加载每一行,所以值就像'val1;val2;val3'。

我知道我可以直接从 csv 将其作为列查询,但我必须以其他方式进行。

问题是如何查询 Var_Col 以获得类似的东西:

select firstValFromVar_Col, secondValFromVar_Col, thirdValFromVar_Col
from  TABVAR

我的意思是上面的查询和结果是这样的:

Col1 Col2 Col3
val1 val2 val3

从 TABVAR 中选择 * 的输出:

Var_Col
val1;val2;val3

【问题讨论】:

变体列通常用于半结构化数据(键值对),如果您从 CSV 加载,为什么不使用带有 ; 分隔符的结构化格式?您现在无法从 VARIANT 列请求特定值,因为您没有它的键。 您能否向我们展示执行SELECT * FROM TABVAR 以了解当前架构的结果? @FelipeHoffa 输出已添加到问题中。 @Sergiu 感谢您的 [实际上] 回答。没有答案为什么 csv 是变体,我必须从已经完成的事情中获取信息。看来剩下的就是用子字符串取值 【参考方案1】:

可以这样做:

select   split_part("Var_Col", ';',  1)
, split_part("Var_Col", ';',  2)
, split_part("Var_Col", ';',  3)
from "TABVAR"

【讨论】:

以上是关于如何在 Snowflake 中选择一个 csv 行的变量列作为多列?的主要内容,如果未能解决你的问题,请参考以下文章

当 csv 文件在字符串中有逗号时,Snowflake 数据库中的复制命令失败

如何从 Mysql 数据库中获取数据到 Snowflake

将 CSV 文件从 S3 加载到 Snowflake 时出现 SQL 编译错误

是否可以在 csv 中包含列名以及 Snowflake 中的 copy into 语句?

查询内部阶段 Snowflake

我们如何在 Snowflake 中使用子查询,从 (select....) 中选择列失败