AWS Glue Crawler为每个分区添加表?

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 住了几个级别。

确保为胶水设置日志记录,这样可以快速指出权限错误等。


per*_*lmq 5

使用为每个 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)


Ric*_*rdo 2

我也遇到了同样的问题。我将*crc*排除模式添加到 AWS Glue 爬网程序并且它起作用了。或者,如果您抓取整个目录,则添加*/*crc*.