Snowflake cloud data platform 雪花从S3复制到表中
我正在尝试将S3中的ASCII文件简单导入雪花表。ASCCI文件中的列数与表中的列数相同。我昨天在Snowflake中使用了一个内部后台实现了这一点,但是从S3中实现它似乎不起作用。以下是我所做的:Snowflake cloud data platform 雪花从S3复制到表中,snowflake-cloud-data-platform,snowflake-task,Snowflake Cloud Data Platform,Snowflake Task,我正在尝试将S3中的ASCII文件简单导入雪花表。ASCCI文件中的列数与表中的列数相同。我昨天在Snowflake中使用了一个内部后台实现了这一点,但是从S3中实现它似乎不起作用。以下是我所做的: create or replace stage irdb_demo url='s3://irdbgenericdemodata' credentials=(aws_key_id='???' aws_secret_key='???'); list @irdb_demo; 它返回一行:
create or replace stage irdb_demo url='s3://irdbgenericdemodata'
credentials=(aws_key_id='???' aws_secret_key='???');
list @irdb_demo;
它返回一行:
1.
s3://irdbgenericdemodata/PAM_公文包.CSV
我可以输入:
从@irdb_demo t中选择t.$1、t.$2、t.$3、t.$4
它返回我期望的26行,例如:
帕姆
100
“GIC”
“国防部Scn法案/法案”
等等
我命令它:
create or replace file format mycsvformat
type = 'CSV'
field_delimiter = ','
skip_header = 1
FIELD_OPTIONALLY_ENCLOSED_BY = '"';
copy into Portfolios
from @irdb_demo pattern='PAM_Portfolios.csv'
file_format=mycsvformat;
结果是:
复制已执行,已处理0个文件
当我打字时:
select * from irdb_generic.prod.portfolios;
结果中没有行
如果我键入:
从irdb\u generic.information\u schema.load\u history中选择*
我今天没有收到任何结果
我在命令上犯了什么错误:
copy into Portfolios
from @irdb_demo pattern='PAM_Portfolios.csv'
file_format=mycsvformat;
2020年12月10日更新
Snowflake support表示语法应该是:
从@irdb_demo pattern='.PAM_portfolions.csv.复制到公文包中。'file_format=mycsvformat
这应该可以解决问题。要仅加载特定文件,您需要使用文件选项而不是模式 例如:
copy into load1 from @load1/
files=('test1.csv', 'test2.csv');
引用:当您在copy into语句中使用
模式时,它会尝试对整个文件前缀进行匹配,而不仅仅是与您在后台指定的目录相关的前缀。因此,对于您的示例,以下内容将起作用,因为模式与irdbgenericdemdata/PAM_portfolions.csv
匹配,而不仅仅是/PAM_portfolions.csv
:
复制到公文包中
从@irdb_demo pattern='.*PAM_公文包.csv'
文件格式=mycsvformat;
我并不真正推荐这种方法,因为如果您的存储桶中有许多文件,那么可能需要相当长的时间来匹配每个文件。相反,您可以这样做:
复制到公文包中
来自@irdb_demo/PAM_公文包.csv
文件格式=mycsvformat;
或者,正如Abhi所提到的,您可以使用文件
命令相对于后台位置显式列出这些文件。我可以使用此命令实现这一点:从@irdb\u demo file\u format=mycsvformat复制到irdb\u generic.prod.portfolions;因为S3存储桶中只有一个ascii文件。我想告诉它只使用一个文件。