我想在使用 AWS Glue 进行 ETL 处理之前验证架构。我试图在 Glue 中做所有事情以避免使用 Airflow 或其他工具。
流程是 S3 原始数据 -> 在 Glue 中爬取 S3 数据 -> 执行模式检查 -> 使用 AWS Glue 的基本 ETL(目前是基本选择 *) -> 输出到 S3 -> 执行临时查询作为检查在使用 EC2 安装的 ETL 软件进一步处理之前。我的想法是,如果一个步骤失败,我想发送一份通知(电子邮件或其他方式),说明失败的原因和位置。
示例数据文件:来自 this link 的第一个表(OrderDate、地区、...)
选项 1:AWS Glue ETL 脚本执行脚本中字段的映射。如果字段类型无效(例如日期列中有一个 int),脚本会“失败”并停止吗?我没有在脚本中看到仅在处理之前验证架构的方法。
PySpark 中的示例脚本行:
applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [("orderdate", "string", "orderdate", "date"), ("region", "string", "region", "string"), ("rep", "string", "rep", "string"), ("item", "string", "item", "string"), ("units", "long", "units", "int"), ("unitcost", "double", "unitcost", "double"), ("total", "double", "total", "double")], transformation_ctx = "applymapping1")
选项 2:我正在阅读 Glue Classifiers。我建立了一个测试 CSV 分类器。我不确定如何将它应用于我的实际爬网数据,因为没有选项可以将它们链接在一起。如果分类器失败,ETL 脚本还会运行吗?
样本分类器:Sample Classifier
工作流需要触发器,触发器需要 ETL 脚本,所以我不确定如何添加分类器。我假设分类器是在抓取发生时强加的,但不清楚如何。
最佳答案
选项 1:
不,它不会失败。架构将成为结构,例如
struct : choice
| |-- int
| |-- date
您可以使用dynamicframe.resolveChoice()
方法来解析数据类型。
检查:
- https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-samples-medicaid.html
- https://github.com/aws-samples/aws-glue-samples/blob/master/examples/resolve_choice.md
选项 2:
在爬虫本身,你可以设置分类器。在爬取数据时,爬虫将使用分类器。
如果分类器失败,爬虫可能会失败...与 ETL 脚本无关。
关于amazon-web-services - 如何在 ETL 处理之前检查 AWS Glue Schema?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58433200/