bigdata - 使 Glue 在作业后删除源数据
问题描述
AWS Glue 非常适合将数据从原始形式转换为您需要的任何格式,并保持源和目标数据集同步。
但是,我有一个场景,数据从不受信任的外部来源落在“登陆区域”存储桶中,第一个 ETL 步骤需要是数据验证步骤,它只允许有效数据传递到数据湖,而无效数据被移至隔离桶进行人工检查。
无效数据包括:
- 错误的文件格式/编码
- 无法解析的内容
- 不匹配的模式
- 甚至对数据本身进行一些完整性检查
“着陆区”存储桶不是数据湖的一部分,它只是传入数据的临时死角,因此我需要验证作业从该存储桶中删除文件,一旦它将文件移动到湖和/或隔离桶。
这可以用胶水吗?如果数据从源存储桶中删除,Glue 最终不会在后续更新中将其删除到下游吗?
我是否需要其他工具(例如 StreamSets、NiFi 或带有 AWS Batch 的 Step Functions)来执行此验证步骤,并且仅在数据进入湖中后才使用 Glue?
(我知道我可以在存储桶本身上设置生命周期规则以在一定时间后删除数据,比如 24 小时,但理论上这可以在 Glue 处理数据之前删除数据,例如在 Glue 作业出现问题的情况下)
解决方案
请参阅文档中的purge_s3_path:
glueContext.purge_s3_path(s3_path, options={}, transformation_ctx="")
以递归方式从指定的 Amazon S3 路径中删除文件。
另外,请确保您AWSGlueServiceRole
有s3:DeleteObject
权限
推荐阅读
- android - 活动的 onCreate 方法始终使用启动模式“singleTask”调用
- java - 如何用包含所有.java文件的目录替换tomcat lib目录中的jar?
- python - 如何将 getattr() 与动态对象一起使用?
- azure - 在 azure blobs 中保存 spark ML 模型
- ios - 以编程方式禁用 ios 11+ 应用程序卸载?
- java - 我正在使用光标浏览我的内部文件夹,但文件夹是空的?
- c# - Sql 异常没有显示在消息框中
- python - 提取具有可选结束模式的字符串
- maven - 如何仅计算多模块 maven 项目的 Jacoco 代码覆盖率?
- mysql - MySQL和PHP:搜索可能有前导零的字符串