9

我正在使用 AWS Glue 创建元数据表。

AWS Glue Crawler 数据存储路径:s3://bucket-name/

S3中的桶结构就像

├── bucket-name        
│   ├── pt=2011-10-11-01     
│   │   ├── file1                    
|   |   ├── file2                                        
│   ├── pt=2011-10-11-02               
│   │   ├── file1          
│   ├── pt=2011-10-10-01           
│   │   ├── file1           
│   ├── pt=2011-10-11-10              
│   │   ├── file1  

                       

为此 aws 爬虫创建 4 个表。

我的问题是为什么 aws 胶水爬虫没有检测到分区?

4

5 回答 5

7

要强制 Glue 将多个架构合并在一起,请确保在创建爬虫时选中此选项 - 为每个 S3 路径创建一个架构。

已启用此设置的爬虫创建步骤的屏幕截图

这是一个详细的解释 - 直接引用,来自 AWS 文档(参考

默认情况下,当爬虫为存储在 Amazon S3 中的数据定义表时,它会同时考虑数据兼容性和架构相似性。考虑的数据兼容性因素包括数据是否具有相同的格式(例如,JSON)、相同的压缩类型(例如,GZIP)、Amazon S3 路径的结构以及其他数据属性。架构相似度衡量不同 Amazon S3 对象的架构相似程度。

如果可能,您可以配置爬网程序以将 CompatibleSchemas 组合到公共表定义中。使用此选项,爬虫仍会考虑数据兼容性,但在评估指定包含路径中的 Amazon S3 对象时会忽略特定架构的相似性。

如果您在控制台上配置爬网程序,要组合模式,请选择爬网程序选项为每个 S3 路径创建单个模式。

于 2019-05-04T19:34:11.687 回答
3

需要爬取一个父文件夹下所有分区,否则爬虫会将每个分区当作单独的表。例如,这样创建

s3://bucket/table/part=1
s3://bucket/table/part=2
s3://bucket/table/part=3

然后爬取 s3://bucket/table/

于 2018-05-23T03:00:13.007 回答
1

为了让 AWS Glue 避免创建无关表,我需要做两件事。这是用 boto3 1.17.46 测试的。

首先,确保一个 S3 对象结构,例如:

s3://mybucket/myprefix/mytable1/<nested_partition>/<name>.xyz
s3://mybucket/myprefix/mytable2/<nested_partition>/<name>.xyz
s3://mybucket/myprefix/mytable3/<nested_partition>/<name>.xyz

其次,如果使用 boto3,请使用参数创建爬虫:

targets = [{"Path": f"s3://mybucket/myprefix/mytable{i}/"} for i in (1, 2, 3)]
config = {"Version": 1.0, "Grouping": {"TableGroupingPolicy": "CombineCompatibleSchemas"}}

boto3.client("glue").create_crawler(Targets={"S3Targets": targets}, Configuration=json.dumps(config))
  • 根据Targets,每个表的路径都作为列表提供给爬虫。
  • 根据Configuration,每个提供的路径下的所有文件都应该合并到一个模式中。

如果使用 boto3 以外的其他东西,则类似地提供上述参数应该很简单。

于 2021-04-20T19:51:34.200 回答
1

答案是:

Aws 粘合爬虫在合并模式之前,首先找到模式的相似性索引。如果相似度指数超过 70%,则合并,否则创建一个新表。

于 2018-01-10T12:42:30.760 回答
0

尝试使用表路径,如s3://bucket-name/<table_name>/pt=<date_time>/file. 如果之后 Crawler 将每个分区视为单独的表,请尝试手动创建表并重新运行 Crawler 以带来分区。

于 2018-02-27T10:11:55.333 回答