如何在 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 数据库中的复制命令失败
将 CSV 文件从 S3 加载到 Snowflake 时出现 SQL 编译错误