【问题标题】:create aws glue crawler with multiple s3 paths创建具有多个 s3 路径的 aws 胶水爬虫
【发布时间】:2021-01-09 02:43:21
【问题描述】:

我想按照以下文档使用 boto3 API 创建 aws 胶水爬虫。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.create_crawler

这里我需要传递将近 100 条 s3 路径,我想以编程方式创建它。

response = client.create_crawler(
    Name='string',
    Role='string',
    DatabaseName='string',
    Description='string',
    Targets={
        'S3Targets': [
            {
                'Path': 'string',
                'Exclusions': [
                    'string',
                ],
                'ConnectionName': 'string'
            },
        ],

这里我需要一次从 s3 传递 100 条路径到 API 调用,有没有更好的方法以编程方式而不是手动将所有 s3 路径添加到 API 调用?

【问题讨论】:

  • 这些 S3 路径是否遵循某种模式?您打算在哪里维护 s3 路径列表?
  • 是的,我有一个类似下面的模式 s3://Bucketname/data/test/abc.parquet s3://Bucketname/data/testone/def.parquet 我们如何传递所有路径一次?任何想法 ?感谢您的回复
  • 传递完整路径对爬虫来说不是一个好主意。 s3://Bucketname/data 下的所有这些文件是否具有相同的架构?创建表后,您将使用什么来从这些表中读取数据?

标签: amazon-s3 boto3 aws-glue


【解决方案1】:

正如 Prabbakar 所提到的,将对象完整前缀传递给爬虫并不是最佳实践。考虑添加整个路径并使用排除项。如果这是唯一的方法,您可以从 Targets 对象的列表中展开前缀

s3_paths = [
    "s3://Bucketname/data/test1/",
    "s3://Bucketname/data/testone",
    "s3://Bucketname/data/testrandompath",
     ...
]
response = client.create_crawler(
    Name='string',
    Role='string',
    DatabaseName='string',
    Description='string',
    Targets={
        'S3Targets': [
            {
                'Path': s3_path,
                'Exclusions': [],
                'ConnectionName': 'string'
            }
            for s3_path in s3_paths
        ]
     }
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 2020-11-29
    • 2019-10-31
    • 2020-07-20
    • 2019-07-12
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    相关资源
    最近更新 更多