AWS Glue Crawler配置实现S3全量CSV文件单独创建Athena表问题
方案1:实现每个csv对应生成独立Athena表
- 调整Crawler的包含路径,不要指定到
s3://test_bucket/test_folder1/test_folder2/层级,而是把每个存放单个CSV的子目录单独添加为包含路径:s3://test_bucket/test_folder1/test_folder2/output/file_1/ s3://test_bucket/test_folder1/test_folder2/output/file_2/ s3://test_bucket/test_folder1/test_folder2/output/intermediate_files/file_11/ s3://test_bucket/test_folder1/test_folder2/output/intermediate_files/file_12/ s3://test_bucket/test_folder1/test_folder2/output/intermediate_files/file_21/ s3://test_bucket/test_folder1/test_folder2/output/intermediate_files/file_22/ - 如果后续会新增子目录,不想手动维护路径,可做以下配置调整:
- 把当前Crawler的
Create a single schema for each S3 path参数改为true,添加排除规则**/intermediate_files/ - 新建独立Crawler,包含路径设置为
s3://test_bucket/test_folder1/test_folder2/output/intermediate_files/,把Table level参数设置为1(表示从当前包含路径往下数1级的目录作为表的根路径,刚好对应每个file_xx的目录层级)
- 把当前Crawler的
- 运行修改后的Crawler前,先删除数据目录中已经生成的
intermediate_files分区表,避免旧结构干扰。
方案2:修复intermediate_files分区表的列缺失问题
列缺失的核心原因是Glue Crawler默认会以扫描到的第一个文件的schema作为整表基准,后续分区文件如果有新增字段会被直接忽略,可按以下步骤调整:
- 把Crawler配置中
Inherit schema from table选项改为Do not inherit schema from table,避免旧表schema强制覆盖新分区的字段定义 - 把
Schema updates in the data store策略调整为Add new columns only,允许Crawler扫描到新字段时追加到表结构末尾,不会直接覆盖整表结构 - 检查你使用的
csv_classifier配置,确认已经正确开启了Extract header from first line选项,避免Crawler误将数据行识别为表头导致字段解析错误 - 也可以先在Glue数据目录手动创建
intermediate_files表的完整schema,再运行Crawler,此时Crawler只会同步新增分区,不会修改你预先定义的表结构,从根源避免列缺失问题。
内容的提问来源于stack exchange,提问作者Shubhanshu Singh
相关产品推荐
相关产品推荐

