如何以小写的列名以拼花格式从Snowflake卸载数据?

时间:2020-06-30 18:44:36

标签: snowflake-cloud-data-platform snowflake-schema

我必须以小写的列名称将木片格式的Snowflake数据卸载到外部s3位置。默认情况下,它是大写的,有没有办法做到?

更新: 以下是创建视图的命令:

create view test_view as select 'col1','col2' from target_table;

以下是复制命令:

CREATE OR REPLACE FILE FORMAT dev."table_name" TYPE = 'parquet'
NULL_IF = ('NULL', 'null') COMPRESSION=SNAPPY;

COPY INTO @STAGING.DEV_EXTERNAL_STAGE/20200626/data/20200626/
FROM dev.table_name file_format = dev."table_name"
OVERWRITE=TRUE HEADER = TRUE;

2 个答案:

答案 0 :(得分:1)

不确定这是否可以按您希望的方式工作,但是如果您在表上创建视图,则在导出时使用引号强制使用小写的列名,则可以从该视图中导出,而不是从表中导出应该保留在镶木地板文件中。但是,不确定是否还会在其中输入报价。

您的create view语句只是对字符串进行硬编码,而不用小写名称创建列。应该是这样的:

create view test_view as select col1 as "col1", col2 as "col2" from target_table;

我也看不到使用显式小写名称创建file_format的任何好处。我用了这个:

CREATE OR REPLACE FILE FORMAT parquet_fmt TYPE = 'parquet'
NULL_IF = ('NULL', 'null') COMPRESSION=SNAPPY;

,然后在COPY INTO语句中引用了不同的文件格式,它创建的文件没有问题。我不确定该文件中的列名如何表示,但请尝试一下。

答案 1 :(得分:0)

在我的用例中,仅对带引号的列名使用select即可。因此,也许如下所示用FROM dev.table_name替换FROM (SELECT col1 as "col1", col2 AS col2 FROM coldev.table_name)可能有用吗?

CREATE OR REPLACE FILE FORMAT dev."table_name" TYPE = 'parquet'
NULL_IF = ('NULL', 'null') COMPRESSION=SNAPPY;

COPY INTO @STAGING.DEV_EXTERNAL_STAGE/20200626/data/20200626/

FROM (
SELECT col1 as "col1", col2 AS col2 FROM coldev.table_name
)

file_format = dev."table_name"
OVERWRITE=TRUE HEADER = TRUE;