【问题标题】:How To Check AWS Glue Schema Before ETL Processing?如何在 ETL 处理之前检查 AWS Glue 架构?
【发布时间】:2019-10-17 12:55:32
【问题描述】:

我想在使用 AWS Glue 进行 ETL 处理之前验证架构。我试图在 Glue 中做所有事情以避免使用 Airflow 或其他工具。

流程是 S3 原始数据 -> 在 Glue 中抓取 S3 数据 -> 执行架构检查 -> 使用 AWS Glue 的基本 ETL(目前是基本选择 *) -> 输出到 S3 -> 执行即席查询作为检查在使用 EC2 安装的 ETL 软件进一步处理之前。这个想法是,如果一个步骤失败了,我想发送一个通知(电子邮件或其他)失败的地方和位置。

样本数据文件:来自this link的第一个表(OrderDate, region,...)

选项 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 脚本,所以我不确定如何添加分类器。我假设在爬行发生时施加了分类器,但目前尚不清楚如何。

【问题讨论】:

    标签: amazon-web-services aws-glue


    【解决方案1】:

    选项 1:

    不,它不会失败。 Schema 将成为 struct 例如

    struct : choice
    |   |-- int
    |   |-- date 
    

    您可以使用dynamicframe.resolveChoice() 方法来解析数据类型。

    检查:

    1. https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-samples-medicaid.html
    2. https://github.com/aws-samples/aws-glue-samples/blob/master/examples/resolve_choice.md

    选项 2:

    在爬虫本身,你可以设置分类器。在爬取数据时,爬虫将使用分类器。

    如果分类器失败,爬虫可能会失败...与 ETL 脚本无关。

    【讨论】:

    • 选项 1:好的,但是如果架构错误,我想确保 ETL 被阻止。是否可以在脚本中阻止进一步处理?选项 2:好吧,刚刚看到了如何将分类器添加到爬虫本身。分类器强加于爬取,所以如果给定的schema有不正确的数据,爬取就会失败?
    • 有没有办法改变被爬取数据的数据类型?例如,上面示例数据的第一列是作为字符串而不是日期出现的,因此不会显示错误数据。
    • 选项 1:您可以编写 lambda/python shell 作业来检查并在从中检查模式后启动 ETL。如果您想在爬虫完成后立即启动 Lambda,它是正确的选择。您必须编写 cloudwatch 事件来触发 lambda。如果日期是 presto date 格式 (prestodb.github.io/docs/current/language/…) ,那么它将显示日期数据类型,否则显示字符串。爬虫没有设置日期格式的选项。
    • 对于选项 2 - 我添加了一些错误数据 - 当爬虫现在运行时,它只是更改数据类型,而不是实际显示数据是错误的。这意味着我需要改用 Lambda 和 Option 1?
    • Crawler 不是数据清理工具 :-) 所以它不会说数据不好。它只会尝试通过爬取数据来查找模式
    猜你喜欢
    • 2019-01-29
    • 2018-09-02
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2022-08-02
    相关资源
    最近更新 更多