AWS Glue 不会检测分区,并在目录中创建 1000+ 个表



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

AWS Glue 爬网程序数据存储路径: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 胶水爬虫无法检测到分区?

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

启用此设置的爬网程序创建步骤的屏幕截图

以下是详细说明 - 直接引用,来自 AWS 文档(参考)

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

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

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

需要爬网一个父文件夹,其下有所有分区,否则爬网程序会将每个分区视为一个单独的表。 所以例子,这样创建

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

然后抓取 S3://bucket/table/

答案是:

在合并架构之前,先找到架构的相似性索引。如果相似性指数超过 70%,则合并,否则创建一个新表。

我需要做两件事来获取 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 以外的其他东西,则应该直接提供上述参数。

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

相关内容

  • 没有找到相关文章

最新更新