使用手动创建的表运行时,AwS 粘合作业读取 0 个文件

lug*_*er1 3 aws-glue aws-glue-data-catalog

我想运行粘合作业来对从 s3 到 Postgres DB 的许多 csv 文件执行 ETL 过程。每天都有新文件写入 s3 源存储桶。当我为这些文件运行爬网程序以生成具有架构的表时,我得到的不仅仅是胶水数据目录中的一张表,这意味着爬网程序无法将这些文件的架构识别为相同的。可能是因为有很多文件只有标题而没有内容。

因此,当我使用向导创建粘合作业时,当被询问要使用哪个表时,我仅从粘合数据目录(基于最大的 csv 文件创建)中选择一个表。因此,在数据库中,我仅拥有来自最大文件的数据,而不是来自所有 csv 文件的数据。我想这是因为爬虫在glue数据目录中创建这些表时,还保存了与该表相对应的文件列表,我在s3上找到了这些文件:/aws-glue-temporary-000xxxxx-us-east-2 /admin/partitionlisting/script_name/xxxxx/ 对于每个粘合作业,都有datasource0.input-files.json文件,其内容如下{"path":"s3://bucket1/customer/dt=2020-02-03/","files":["s3://bucket1/customer/dt=2020-02-03/file1.csv"]}]

当我检查当我尝试在胶水数据目录中手动创建架构表并将其分配给胶水作业脚本时,希望处理 s3 路径中的所有文件,它不会读取任何文件,并且在日志中我看到

- Skipping Partition {}
 as no new files detected @ s3://bucket1/customer/ / or path does not exist
Run Code Online (Sandbox Code Playgroud)

当我检查相应的 datasource0.input-files.json 时,它没有任何文件:[{"path":"s3://bucket1/customer/","files":[]}]

我究竟做错了什么?如何使用手动创建的模式表使粘合作业脚本读取所选 s3 路径中的所有文件?或者是否可以仅使用包含所有文件的许多自动创建的模式表之一(而不仅仅是基于一个模式)?

Eme*_*son 5

您可能正在运行启用了书签的粘合作业。考虑到您是手动设置所有内容而不是通过爬网程序,您最好不要使用书签,并且在提取数据时也不要指定转换上下文。此外,如果您有分区,您还应该手动添加分区定义。