我正在使用copy into
命令将雪花中的查询结果存储到 s3 存储桶中的文件中。它按预期工作,但是当查询没有返回数据时,我仍然想将列名保存在同一个文件中,以便我可以在 UI 中显示带有列名的空行。我header=true
在命令中指定了,但是当查询没有返回结果时它不起作用。
谢谢
我正在使用copy into
命令将雪花中的查询结果存储到 s3 存储桶中的文件中。它按预期工作,但是当查询没有返回数据时,我仍然想将列名保存在同一个文件中,以便我可以在 UI 中显示带有列名的空行。我header=true
在命令中指定了,但是当查询没有返回结果时它不起作用。
谢谢
根据文档:
如果源表包含 0 行,则 COPY 操作不会卸载空数据文件;甚至没有包含表格列标题的文件。
而且似乎没有办法改变这种行为。
但是,在将表写入 S3 之前,您可以通过查询INFORMATION_SCHEMA来写入标题(作为数据) 。然后像往常一样写你的表(使用 OVERWRITE=TRUE)——如果没有写行,头文件将保留。
更新
以下是如何生成标题:
select listagg(column_name,',') within group (order by ordinal_position)
from MY_DB.information_schema.columns
where table_schema='MY_SCHEMA' and table_name='MY_TABLE';
然后,您可以将其作为数据写入 CSV 文件,如下所示:
copy into @my_stage/my_table (
select listagg(column_name,',')
within group (order by ordinal_position)
from MY_DB.information_schema.columns
where table_schema='MY_SCHEMA' and table_name='MY_TABLE';
)
file_format = (type=csv compression=none field_delimiter=none)
header=false;