1

我正在使用copy into命令将雪花中的查询结果存储到 s3 存储桶中的文件中。它按预期工作,但是当查询没有返回数据时,我仍然想将列名保存在同一个文件中,以便我可以在 UI 中显示带有列名的空行。我header=true在命令中指定了,但是当查询没有返回结果时它不起作用。

谢谢

4

1 回答 1

1

根据文档

如果源表包含 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;
于 2020-04-04T02:23:50.720 回答