我正在尝试创建 AWS Glue ETL 作业,它将数据从存储在 S3 中的镶木地板文件加载到 Redshift 表中。Parquet 文件是使用带有“简单”文件模式选项的 pandas 写入到 S3 bucked 中的多个文件夹中的。布局如下所示:
s3://bucket/parquet_table/01/file_1.parquet
s3://bucket/parquet_table/01/file_2.parquet
s3://bucket/parquet_table/01/file_3.parquet
s3://bucket/parquet_table/01/file_1.parquet
s3://bucket/parquet_table/02/file_2.parquet
s3://bucket/parquet_table/02/file_3.parquet
我可以使用 AWS Glue Crawler 在 AWS Glue 目录中创建一个表,并且可以从 Athena 查询该表,但是当我尝试创建将同一个表复制到 Redshift 的 ETL 作业时它不起作用。
如果我抓取单个文件或抓取一个文件夹中的多个文件,它会起作用,只要涉及多个文件夹,就会出现上述错误
AnalysisException: u'Unable to infer schema for Parquet. It must be specified manually.;'
如果我使用“hive”而不是“简单”模式,则会出现类似问题。然后我们有多个文件夹以及抛出的空镶木地板文件
java.io.IOException: Could not read footer: java.lang.RuntimeException: xxx is not a Parquet file (too small)
在使用 AWS Glue(ETL 和数据目录)时,是否有一些关于如何读取 Parquet 文件并将它们构建在 S3 中的建议?