Databricks DLT中用read_stream实现流表UnionByName的语法疑问
解决Databricks DLT中流表UnionByName并创建流视图的问题
核心逻辑
必须确保两个输入表都以流模式读取,合并后的DataFrame才会是流数据源,进而创建符合要求的流视图。
正确代码实现
方式1:使用dlt.create_streaming_view直接注册
# 以流模式读取两个实时表 stream_df1 = dlt.read_stream("table_1") stream_df2 = dlt.read_stream("table_2") # 按列名合并流数据,允许列缺失(根据实际场景调整) unioned_stream_df = stream_df1.unionByName(stream_df2, allowMissingColumns=True) # 创建流视图 pre_merge_union_v dlt.create_streaming_view( name="pre_merge_union_v", df=unioned_stream_df )
方式2:使用@dlt.view装饰器(推荐,更符合DLT代码风格)
@dlt.view( name="pre_merge_union_v", streaming=True # 明确标记为流视图 ) def create_pre_merge_union_view(): # 流模式读取两个表 stream_df1 = dlt.read_stream("table_1") stream_df2 = dlt.read_stream("table_2") # 合并后返回流DataFrame return stream_df1.unionByName(stream_df2, allowMissingColumns=True)
错误原因说明
- 直接读取表后union返回的是静态DataFrame,并非流数据源,不符合DLT对READ_STREAM VIEW的要求。
dlt.read_stream()的参数只能是表名/外部数据源路径,不能传入已生成的DataFrame,因此return dlt.read_stream(df_unioned)会报错。
内容的提问来源于stack exchange,提问作者ExoV1
相关产品推荐
相关产品推荐

