AWS S3:如何在 COPY 命令的 S3 目录中插入动态文件名

我在 Redshift 有一份工作,负责每月从 S3 中提取 6 个文件。文件名遵循标准命名约定“file_label_MonthNameYYYY_Batch01.CSV”。我想修改下面的 COPY 命令来动态更改 S3 目录中的文件命名,这样我就不必硬编码月份名称和 YYYY 以及批号。批号范围为 1-6。

目前,这是我所拥有的效率不高的:

COPY tbl_name ( column_name1,column_name2,column_name3 )
FROM 'S3://bucket_name/folder_name/Static_File_Label_July2021_Batch01.CSV'
CREDENTIALS 'aws_access_key_id = xxx;aws_secret_access_key = xxxxx'
removequotes
EMPTYAsnULL 
BLANKSAsnULL 
DATEFORMAT 'MM/DD/YYYY'
delimiter ','
IGNOREHEADER 1;

COPY tbl_name ( column_name1,column_name3 )
FROM 'S3://bucket_name/folder_name/Static_File_Label_July2021_Batch02.CSV'
CREDENTIALS 'aws_access_key_id = xxx;aws_secret_access_key = xxxxx'
removequotes
EMPTYAsnULL 
BLANKSAsnULL 
DATEFORMAT 'MM/DD/YYYY'
delimiter ','
IGNOREHEADER 1;

下个月动态文件名将更改为August2021_Batch01 & August2021_Batch02,依此类推。有没有办法做到这一点?提前致谢。

i569546235 回答:AWS S3:如何在 COPY 命令的 S3 目录中插入动态文件名

对此有很多方法。哪一种最适合您的情况取决于您的情况。您的流程中需要一个层来控制每个月的 SQL 配置。以下是一些可以考虑的方法:

  1. 使用清单文件 - 此文件将包含 S3 对象名称以 加载。您的处理/文件准备可以更新此文件
  2. 使用文件所在的固定加载文件夹进行 COPY,然后 复制后将这些文件移动到永久存储位置。
  3. 使用您工作台中的变量来设置月份值并替换它 在将 SQL 发布到 Redshift 时。
  4. 编写一些代码(Lambda?)来发出您要查找的 SQL
  5. 上次我检查过,您可以将对象名称保留不完整和所有 匹配的对象将被加载。去掉批号和 后缀并加载所有文件并更改一个文本。

最好使用 COPY 命令(并行使用更多节点)加载多个文件,选项 1、2 和 5 可以执行此操作。

,

指定要加载的文件的 FROM 位置时,您可以指定部分文件名

以下是来自 COPY examples - Amazon Redshift 的示例:

以下示例从 Amazon EMR 集群中的 lzop 压缩文件中加载包含制表符分隔数据的 SALES 表。 COPY 加载 myoutput/ 文件夹中以 part- 开头的每个文件。

copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '\t' lzop;

因此,您可以指定:

FROM 'S3://bucket_name/folder_name/Static_File_Label_July2021_*'

您只需要更改月和年标识符。具有该前缀的所有文件将被一次性加载。

本文链接:https://www.f2er.com/12737.html

大家都在问