我正在开发Databricks管道,用Python编写DLT。我想了解如何控制管道创建DLT的顺序。
当前为,管道试图按照写入顺序创建每个DLT,如果某些数据不可用,则会导致错误。让我澄清:
@dlt.table
def table1():
return spark.sql("SELECT a,b,c FROM table_A")
@dlt.table
def table2():
return spark.sql("SELECT x,y,z FROM table_B")
@dlt.table
def table3():
res1 = dlt.read("table1")
res2 = dlt.read("table2")
if "a" in res1.schema.names and "x" in res2.schema.names:
return ...
elif "a" in res1.schema.names
return ...
elif "x" in res2.schema.names
return ...
else return ...我希望管道只创建table3,在创建DLTs、table1或/和table2之前先检查来自其他源的数据是否可用。
这有可能吗?还是我误解了管道应该如何工作?您可以假设数据在某个时候会出现,但是有可能还没有加载到数据库中。
发布于 2022-08-04 12:58:01
当DLT启动管道时,它会计算每个函数,从而创建依赖关系图。然后根据检测到的依赖顺序执行该图。这种执行不依赖于实际数据的存在--它只取决于输入数据的存在,等等。
因此,在您的示例中,table3依赖于table1和table2,因此它们将首先执行(但需要有table_A和table_B),然后执行table3 (如果使用批处理或流管道,这与流管道中的所有节点可以同时执行一样)。
https://stackoverflow.com/questions/73210826
复制相似问题