查询内部阶段 Snowflake

Posted

技术标签:

【中文标题】查询内部阶段 Snowflake【英文标题】:Query internal stage Snowflake 【发布时间】:2021-06-28 15:03:32 【问题描述】:

按照文档中的步骤,我在 Snowflake 中创建了一个阶段和文件格式,然后使用 PUT 暂存了一个 csv 文件

USE IA;
CREATE OR REPLACE STAGE csv_format_2;
CREATE OR REPLACE FILE FORMAT csvcol26 type='csv' field_delimiter='|';
PUT file://H:\\CSV_SWF_file_format_stage.csv @IA.public.csv_format_2

当我尝试查询暂存对象时

SELECT a.$1 FROM @csv_format_2 (FORMAT=>'csvcol26', PATTERN=>'CSV_SWF_file_format_stage.csv.gz') a

我得到: SQL 错误 [2] [0A000]: 不支持的功能“表”。

关于这个错误的任何想法?

【问题讨论】:

【参考方案1】:

第一个参数应该是FILE_FORMAT 而不是FORMAT

SELECT a.$1 
FROM @csv_format_2 (FILE_FORMAT=>'csvcol26',PATTERN=>'CSV_SWF_file_format_stage.csv.gz') a;

相关:Querying Data in Staged Files

使用具有以下语法的 SELECT 语句查询暂存数据文件:

SELECT [<alias>.]$<file_col_num>[.<element>] [ , [<alias>.]$<file_col_num>[.<element>] , ...  ]
FROM  <internal_location> | <external_location> 
 [ ( FILE_FORMAT => '<namespace>.<named_file_format>', PATTERN => '<regex_pattern>' ) ]
 [ <alias> ]

【讨论】:

抛出 TABLE 消息的原因是文件格式参数在 SELECT 上的 TABLE OPERATOR 内。由于参数名称未被识别为合法运算符,因此您会得到这个可能令人困惑的响应。

以上是关于查询内部阶段 Snowflake的主要内容,如果未能解决你的问题,请参考以下文章

数据推送到 Snowflake 阶段时触发 Snowflake 任务

使用 Airflow PUT 命令将 S3 文件移动到 Snowflake 阶段

通过 JDBC 与 COPY_INTO + GET 批量卸载雪花数据

无法使用 Talend 上传到 Snowflake 阶段,NoSuchMethodError

我们可以使用雪花中的存储过程将文件从文件位置加载到命名内部阶段吗?

Snowflake JavaScript程序如何从不在阶段的对象中更新字段?