请问DataWorks中这个数据血缘为什么不能关联任务的血缘关系呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在DataWorks中,数据血缘无法关联某些任务的血缘关系,主要是由于以下原因和限制导致的。以下是详细分析和解释:
并非所有任务类型都支持生成血缘关系。例如: - EMR相关任务:
- EMR on ACK类型的Spark集群及EMR Serverless Spark集群不支持查看血缘关系。 - EMR Presto节点的任务也不支持查看血缘关系。 - DataLake或自定义集群若未配置EMR-HOOK,则无法在DataWorks中展示血缘关系。
Shell节点任务:
Shell节点任务的数据地图没有产出信息,且血缘关系仅支持Hive表的解析。如果您的Shell任务操作的是非Hive表(如Spark代码),则可能无法生成血缘关系。
实时同步任务:
DataWorks仅支持为周期调度节点产出的表设置依赖。因此,实时同步任务产出的表数据无法基于血缘关系设置依赖。
DataWorks的血缘关系是基于调度作业、数据同步等真实数据流转情况解析得出的,而临时查询等手动操作产生的血缘关系暂不支持。这意味着,如果您通过手动执行SQL或其他方式操作数据,这些操作不会被记录到血缘关系中。
血缘关系的生成需要依赖于周期调度任务的运行结果。如果任务未纳入周期调度,或者任务未成功运行,则血缘关系无法生成。例如: - 表和字段血缘是通过解析调度作业等真实数据的流转情况得出的,该操作为离线统计,存在T+1的延迟。 - 开发环境中的任务不会真正纳入血缘统计,只有生产环境中成功运行的任务才会被解析并展示血缘关系。
对于视图(View)的血缘解析,DataWorks会尝试解析视图的生成语句。然而,这种解析可能会失败,且目前无法保证解析的成功率。因此,视图的血缘关系可能无法完整展示。
部分SQL处理命令不支持生成血缘关系。例如: - 对于AnalyticDB for MySQL类型的表,部分SQL命令无法生成血缘关系信息。 - 如果SQL命令中包含*(通配符),则可能导致血缘关系无法正常生成。例如,以下SQL命令不支持展示血缘关系:
INSERT OVERWRITE TABLE XXXX SELECT * FROM YYYY WHERE ***;
而以下SQL命令可以正常展示血缘关系:
INSERT INTO test SELECT id, name FROM test1 WHERE name='test';
如果通过PyODPS节点执行SQL,可能会出现血缘关系无法正常生成的情况。此时,您需要在任务代码中手动设置DataWorks调度运行的相关参数(如SKYNET_参数)来解决此问题。例如:
import os
# 获取DataWorks调度运行时参数
skynet_hints = {}
for k, v in os.environ.items():
if k.startswith('SKYNET_'):
skynet_hints[k] = v
# 提交任务时设置hints参数
o.execute_sql('INSERT OVERWRITE TABLE XXXX SELECT * FROM YYYY WHERE ***', hints=skynet_hints)
根据上述分析,DataWorks中数据血缘无法关联任务血缘关系的原因主要包括任务类型限制、手动操作限制、调度依赖要求、视图解析不确定性、SQL命令限制以及版本权限限制等。为确保血缘关系能够正确生成,您可以采取以下措施: 1. 确保任务已纳入周期调度,并在生产环境中成功运行。 2. 避免使用不支持血缘解析的任务类型(如EMR on ACK、Presto节点等)。 3. 在PyODPS任务中手动设置调度参数以生成血缘关系。 4. 使用支持血缘解析的SQL命令,并避免使用通配符*。 5. 升级至DataWorks标准版或更高版本以解锁血缘功能。
希望以上解答能帮助您更好地理解DataWorks中数据血缘的限制及其解决方案!
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。