我正在尝试将S3中的ASCII文件简单导入到雪花表中。 ASCCI文件中的列数与表中的列数相同。我昨天在Snowflake的一个内部舞台上使它工作,但是从S3进行此工作似乎无效。这是我所做的:
create or replace stage irdb_demo url='s3://irdbgenericdemodata'
credentials=(aws_key_id='???' aws_secret_key='???');
list @irdb_demo;
它返回一行: 1个 s3://irdbgenericdemodata/PAM_PORTFOLIOS.CSV
我可以输入: 从@irdb_demo t中选择t。$ 1,t。$ 2,t。$ 3,t。$ 4;
,它返回我期望的26行,例如:
PAM 100 “ GIC” “ Mod Scn Act / Act” 等
我给它命令:
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_generic.information_schema.load_history中选择*
今天没有结果。
我在做什么错的命令:
copy into Portfolios
from @irdb_demo pattern='PAM_Portfolios.csv'
file_format=mycsvformat;
2020年12月12日更新。
雪花支持人员说语法应为:
从@irdb_demo pattern ='复制到投资组合中。 PAM_Portfolios.csv。'file_format = mycsvformat;
这应该可以解决问题。
答案 0 :(得分:0)
要仅加载特定文件,您需要使用FILES选项而不是模式。
示例:
copy into load1 from @load1/
files=('test1.csv', 'test2.csv');
参考:copy_into
答案 1 :(得分:0)
当您在copy into语句中使用pattern
时,它会尝试对整个文件前缀进行匹配,而不仅是相对于您在阶段中指定的目录的前缀。因此,对于您的示例,下面的方法将起作用,因为该模式与irdbgenericdemodata/PAM_Portfolios.csv
匹配,而不仅仅是/PAM_Portfolios.csv
:
copy into Portfolios
from @irdb_demo pattern='.*PAM_Portfolios.csv'
file_format=mycsvformat;
我不会真正推荐这种方法,因为如果存储桶中有很多文件,则与每个文件匹配可能要花费相当长的时间。相反,您可以执行以下操作:
copy into Portfolios
from @irdb_demo/PAM_Portfolios.csv
file_format=mycsvformat;
或者,如Abhi所述,您可以使用files
命令将它们相对于舞台的位置明确列出。