Snowflake cloud data platform 雪花从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; 它返回一行:

我正在尝试将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_公文包.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文件。我想告诉它只使用一个文件。