Amazon web services 如何使用lambda将csv文件中的特定列复制到红移表中

Amazon web services 如何使用lambda将csv文件中的特定列复制到红移表中,amazon-web-services,amazon-s3,aws-lambda,amazon-redshift,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Redshift,我正在尝试加载S3数据,它是.csv格式的,S3 Bucket有许多文件,每个文件都有不同的列数和列顺序,当尝试使用copy命令时,数据存储在错误的列中 例如: 文件1 文件2 期望输出: a_sales | client_id | event_name | event_timestamp 2039 | ccc1 | app_used | 2020-08-27 3123 | aaa2 | app_uninstalle

我正在尝试加载S3数据,它是.csv格式的,S3 Bucket有许多文件,每个文件都有不同的列数和列顺序,当尝试使用copy命令时,数据存储在错误的列中

例如: 文件1

文件2

期望输出:

a_sales | client_id |    event_name      | event_timestamp   
  2039  |   ccc1    |     app_used       |   2020-08-27
  3123  |   aaa2    |  app_uninstalled   |   2020-03-15
        |   aaa1    |    app_launch      |   2020-08-21
        |   bbb2    |   first_launch     |   2020-10-11
我已经尝试了下面的SQL脚本,它基本上运行成功,但没有给出所需的输出。有人能帮我解决这个问题吗

COPY public.sample_table
FROM 's3://mybucket/file*' 
iam_role 'arn:aws:iam::99999999999:role/RedShiftRole' 
FILLRECORD DELIMITER ',' IGNOREHEADER 1; 

因此,“复制”命令不会根据CSV文件标题行中的文本将数据与列对齐。您需要指定要从CSV文件中填充的表的哪些列,顺序与CSV文件中指定的数据相同

见:


由于两种类型的文件具有不同的列顺序(和列),因此需要为每种类型提供不同的列列表。

您可以将数据从S3存储桶复制到相应的结构映射暂存表中。 然后,您可以将数据从这两个具有不同列的表移动到一个组合表中,也可以创建一个视图,将数据从这些临时表读取到一个统一的结构中

a_sales | client_id |    event_name      | event_timestamp   
  2039  |   ccc1    |     app_used       |   2020-08-27
  3123  |   aaa2    |  app_uninstalled   |   2020-03-15
        |   aaa1    |    app_launch      |   2020-08-21
        |   bbb2    |   first_launch     |   2020-10-11
COPY public.sample_table
FROM 's3://mybucket/file*' 
iam_role 'arn:aws:iam::99999999999:role/RedShiftRole' 
FILLRECORD DELIMITER ',' IGNOREHEADER 1;