use*_*210 3 amazon-s3 amazon-web-services amazon-redshift
我正在尝试使用copy命令将数据从S3存储桶复制到Redshift .当我在复制命令中传递确切的文件名时它工作得很好但是当我*在我的from子句中使用wildcard()时它会抛出一个错误 - "指定的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';
Run Code Online (Sandbox Code Playgroud)
这是复制命令不起作用:
copy mytable from 's3://mybucket/suiteX*'
CREDENTIALS 'aws_access_key_id=XXXXX;aws_secret_access_key=XXXX'
delimiter ',' REGION AS 'us-east-1';
Run Code Online (Sandbox Code Playgroud)
任何想法当我从S3复制数据时如何使复制命令与通配符一起使用?
redshift COPY命令没有显式通配符语法.您提供的对象路径被视为前缀,任何匹配的对象都将被复制.如果对象路径与多个文件夹匹配,则所有这些文件夹中的所有对象都将被复制.
您应该能够通过以下方式让它适用于您的示例:
s3://mybucket/suiteX' CREDENTIALS 'aws_access_key_id=XXXXX;aws_secret_access_key=XXXX' delimiter ',' REGION AS 'us-east-1';
Run Code Online (Sandbox Code Playgroud)
来自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>';
Run Code Online (Sandbox Code Playgroud)
在这种情况下,目录下的文件data/将被复制到Redshift。