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

时间:2020-03-26 17:33:36

标签: aws-glue aws-glue-data-catalog

我想运行胶水作业来对从s3到Postgres DB的许多csv文件进行ETL处理。每天都会将新文件写入s3源存储桶。当我为那些文件运行搜寻器以生成具有模式的表时,而不是在胶水数据目录中仅生成一个表时,我得到了很多表,这意味着搜寻器无法将这些文件的模式识别为相同的表。可能是因为有许多文件只有标题但没有内容。

因此,当我使用向导创建胶水作业时,当询问使用哪个表时,我仅从胶水数据目录(基于最大的csv文件创建)中选择了一个表。结果,在数据库中,我只有最大文件中的数据,而不是所有csv文件中的数据。我猜发生了这种情况,因为搜寻器在胶水数据目录中创建这些表时也保存了与该表相对应的文件列表,我在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

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

我在做什么错?如何使具有手动创建的架构表的胶水作业脚本读取所选s3路径中的所有文件?或者可以仅使用自动创建的众多功能之一 模式表包含所有文件(不仅是一个模式的基础)?

1 个答案:

答案 0 :(得分:1)

可能是您在启用书签的情况下运行胶水作业。最好不要使用书签,也不要在提取数据时指定转换上下文,因为您是手动而不是通过搜寻器设置所有内容。另外,如果您有分区,还应该手动添加分区定义。