cha*_*ney 8 amazon-web-services parquet aws-glue
我在这种形式的S3存储桶中有几千个文件:
??? bucket
? ??? somedata
? ? ??? year=2016
? ? ??? year=2017
? ? ? ??? month=11
? ? | ? ??? sometype-2017-11-01.parquet
? | | | ??? sometype-2017-11-02.parquet
? | | | ??? ...
? ? ? ??? month=12
? ? | ? ??? sometype-2017-12-01.parquet
? | | | ??? sometype-2017-12-02.parquet
? | | | ??? ...
? ? ??? year=2018
? ? ? ??? month=01
? ? | ? ??? sometype-2018-01-01.parquet
? | | | ??? sometype-2018-01-02.parquet
? | | | ??? ...
? ??? moredata
? ? ??? year=2017
? ? ? ??? month=11
? ? | ? ??? moretype-2017-11-01.parquet
? | | | ??? moretype-2017-11-02.parquet
? | | | ??? ...
? ? ??? year=...
Run Code Online (Sandbox Code Playgroud)
等等
预期行为:AWS Glue Crawler为每个数据,更多数据等创建一个表.它根据子项的路径名为每个表创建分区.
实际行为:AWS Glue Crawler执行上述行为,但ALSO为数据的每个分区创建一个单独的表,导致数百个无关表(以及每个数据添加的更多无关表+新爬网).
我认为没有地方可以设置或以其他方式防止这种情况发生...有没有人有关于防止这些不必要的表被创建的最佳方法的建议?
小智 6
添加到排除项
**_SUCCESS**crc为我工作(请参阅 aws 页面胶水/add-crawler)。双星匹配所有文件夹(即分区)深度的文件。我有一个 _SUCCESS 住了几个级别。
确保为胶水设置日志记录,这样可以快速指出权限错误等。
使用为每个 Amazon S3 包含路径创建单一架构选项来避免 AWS Glue 爬网程序添加所有这些额外的表。
我遇到了这个问题,最终得到了大约 7k 个表,因此编写了以下脚本来删除它们。它需要jq。
#!/bin/sh
aws glue get-tables --region <YOUR AWS REGION> --database-name <YOUR AWS GLUE DATABASE> | jq '.TableList[] | .Name' | grep <A PATTERN THAT MATCHES YOUR TABLENAMEs> > /tmp/table-names.json
cd /tmp
mkdir table-names
cd table-names
split -l 50 ../table-names.json
for f in `ls`; cat $f | tr '\r\n' ' ' | xargs aws glue batch-delete-table --region <YOUR AWS REGION> --database-name <YOUR AWS GLUE DATABASE> --tables-to-delete;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3870 次 |
| 最近记录: |