将雪花从S3复制到表格中

时间:2020-10-05 16:07:57

标签: 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;

它返回一行: 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;

这应该可以解决问题。

2 个答案:

答案 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命令将它们相对于舞台的位置明确列出。