是否可以在 csv 中包含列名以及 Snowflake 中的 copy into 语句?
Posted
技术标签:
【中文标题】是否可以在 csv 中包含列名以及 Snowflake 中的 copy into 语句?【英文标题】:Is it possible to include column names in the csv with a copy into statement in Snowflake? 【发布时间】:2016-06-24 08:42:49 【问题描述】:例如:
COPY INTO @my_stage/my_test.csv
FROM (select * from my_table)
FILE_FORMAT = (TYPE = CSV)
OVERWRITE=TRUE SINGLE=TRUE
将生成 csv 但不包括列标题。如果无法使用 copy into 语句,是否有任何不明显的技术可以做到这一点?
提前致谢。
【问题讨论】:
【参考方案1】:我们之前已经看到过这个请求,它在我们的路线图中。如果它对您来说是高优先级,请联系 Snowflake 支持。
如果您正在寻找一种解决方法,很难想出一个真正通用的解决方法。
一种选择是添加具有明确列名的单行,但 您需要提前了解它们,如果 并非所有字段都是字符串。 另一个是转换所有记录 使用 OBJECT_CONSTRUCT(*) 并导出为 JSON,那么您将拥有 列名,但它当然只有在你可以摄取时才有用 JSON。但我希望 Snowflake 能在不久的将来添加此功能。
【讨论】:
Marcin,感谢您的回复。我正在从 python 应用程序执行此操作。我能够在Snowflake 已添加此功能。您可以简单地添加一个选项HEADER=TRUE
:
COPY INTO @my_stage/my_test.csv
FROM (select * from my_table)
FILE_FORMAT = (TYPE = CSV)
OVERWRITE=TRUE SINGLE=TRUE HEADER=TRUE
【讨论】:
已验证。但是,如果 SINGLE=FALSE 它将把标题放在每个文件中。尝试将文件连接成一个时,这是一个问题。 :( 是的。如果 Snowflake 添加一个用于将标题添加到单个文件的选项会更好。如果此选项对您来说是高优先级,请联系 Snowflake 支持。【参考方案3】:为了补充@Jiaxing 的回答,Snowflake HEADER
功能还允许您通过AS
命名列来明确定义列名:
COPY INTO @my_stage/my_test.csv
FROM (
SELECT
column1 AS "Column 1",
column2 AS "Column 2"
FROM my_table
) FILE_FORMAT = (TYPE = CSV)
【讨论】:
以上是关于是否可以在 csv 中包含列名以及 Snowflake 中的 copy into 语句?的主要内容,如果未能解决你的问题,请参考以下文章