DynamoDB Glue Catalog表的数据检索是如何工作的?

0

【以下的问题经过翻译处理】 我已经配置了一个Glue目录表并创建了一个爬虫来索引DynamoDB表,想要使用这个Glue目录表来查询Glue作业中的DDB表(使用"glueContext.create_dynamic_frame_from_catalog()"函数)。

我的问题是,在这种情况下,对DDB表执行了哪些操作来填充DynamicFrame结果,以便我可以在Glue作业中访问/查询它?是否执行了“SCAN”操作来检索所有数据以填充动态帧,或者在定义任何过滤条件后,对DDB表进行“QUERY”操作来惰性地填充DynamicFrame?

作为后续问题,如果我需要在Glue作业中使用DDB表来执行特定主键的查找,最推荐/最具成本效益的方法是什么?我应该像现在这样使用Glue目录表,还是应该直接使用Boto3查询DDB表?

我的Glue作业正在使用PySpark。

profile picture
专家
已提问 2 年前57 查看次数
1 回答
0

【以下的回答经过翻译处理】 当您使用Glue Crawler爬取表时,Glue会扫描表格并读取前1MB(称为数据采样)来推断架构。如果您有一个架构与表格不同的表格,则应禁用数据采样并让爬虫扫描整个表格。

在使用glueContext.create_dynamic_frame_from_catalog()读取表格时,根据dynamodb.splits定义进行并行的完整表格扫描,并读取到数据框架中。这会消耗表格的容量,如果您的表格用于其他应用程序,则可以将Glue从[0-1.5] dynamodb.throughput.read.percent的扫描速率限制,以使其不会消耗所有可用的容量。任何过滤标准必须在完整的数据读取之后执行。

https://docs.aws.amazon.com/zh_cn/glue/latest/dg/aws-glue-programming-etl-connect.html

您现在还可以选择在不消耗容量的情况下读取数据,其中Glue首先使用DynamoDBExportTableToPointInTime将表格导出到S3。 DynamoDB表必须启用PITR。对目录的任何后续读取都将过时,直到您进行导出。这对于一次性任务或不经常发生的任务非常有用。

dyf = glue_context.create_dynamic_frame.from_options(
    connection_type="dynamodb",
    connection_options={
        "dynamodb.export": "ddb",
        "dynamodb.tableArn": "<test_source>",
        "dynamodb.s3.bucket": "<bucket name>",
        "dynamodb.s3.prefix": "<bucket prefix>",
        "dynamodb.s3.bucketOwner": "<account_id>",
    }
)

profile picture
专家
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则