我必须以小写的列名称将木片格式的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;
答案 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;