繁体   English   中英

AWS Redshift - 使用通配符从s3复制数据

[英]AWS Redshift - Copy data from s3 with wildcard

我正在尝试使用copy命令将数据从S3存储桶copy到Redshift。 当我在复制命令中传递确切的文件名时它工作得很好但是当我在我的from子句中使用通配符( * )时会抛出错误 - “指定的S3前缀'suiteX *'不存在;”

我的所有文件都遵循这个命名约定- SuiteX_Date_Hour.csv例如- SuiteX-20150101-1.csv

这是我的复制命令有效:

copy mytable from 's3://mybucket/suiteX_20150101_1.csv'
CREDENTIALS 'aws_access_key_id=XXXXX;aws_secret_access_key=XXXX'
delimiter ',' REGION AS 'us-east-1';

这是复制命令不起作用:

copy mytable from 's3://mybucket/suiteX*'
CREDENTIALS 'aws_access_key_id=XXXXX;aws_secret_access_key=XXXX' 
delimiter ',' REGION AS 'us-east-1';

任何想法当我从S3复制数据时如何使复制命令与通配符一起使用?

redshift COPY命令没有显式通配符语法。 您提供的对象路径被视为前缀, 任何匹配的对象都将被复制。 如果对象路径与多个文件夹匹配,则所有这些文件夹中的所有对象将被复制。

您应该能够通过以下方式让它适用于您的示例:

s3://mybucket/suiteX' CREDENTIALS 'aws_access_key_id=XXXXX;aws_secret_access_key=XXXX' delimiter ',' REGION AS 'us-east-1';

来自Amazon S3 docs的COPY的相关部分说:

FROM's3:// copy_from_s3_objectpath'

指定包含数据的Amazon S3对象的路径,例如's3://mybucket/cust.txt'。 s3:// copy_from_s3_objectpath参数可以引用具有相同键前缀的单个文件或一组对象或文件夹。 例如,名称custdata.txt是一个引用许多物理文件的键前缀:custdata.txt.1,custdata.txt.2,依此类推。 键前缀也可以引用许多文件夹。 例如,'s3:// mybucket / custfolder'指的是文件夹custfolder_1,custfolder_2等。 如果键前缀引用多个文件夹,则将加载文件夹中的所有文件。

根据Redshift文档 ,我不认为COPY命令支持s3文件源路径的通配符。 相反,您可以按如下方式指定存储桶目录。

copy data
from 's3://mybucket/data/'
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>'; 

在这种情况下, data/目录下的文件将被复制到Redshift。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM