Databricks - 读取流 - Delta Live Tables

Databricks - Read Streams - Delta Live Tables

我有许多 tables(在模式上有不同程度的差异,但有一组共同的字段)我想联合并以增量方式从青铜 -> 加载。因此,目标是使用 DLT 从多个 table 变为单个 table。

示例:

X_Events
Y_Events
.... N_Events 

To: All_Events

我正在使用 for 循环遍历所有数据库 -> tables,然后执行 readStream,然后执行 UnionByName

但是,如果我需要在下一个 运行 中处理额外的 table 动态添加/修改,我会收到检查点错误。

There are [8] sources in the checkpoint offsets and now there are 
[6] sources requested by the query. Cannot continue.

有没有办法动态解决这个问题?

我应该构建自己的增量逻辑吗?有没有更好的方法来实现这个?

这是一个documented limitation of Spark Structured Streaming:

Changes in the number or type (i.e. different source) of input sources: This is not allowed.

但是根据您的描述,我发现您可能不需要使用 UnionByName - 您可以只使用 N 个独立的流来写入相同的 table。如果您只是附加到 table,concurrent appends won't lead to a write conflicts(每个流都是独立的!):

bronze 1  \
bronze 2   \
bronze 3    >--> append to a Silver table
.......... /
bronze N  /

如果您需要合并到目标 table 或其中的一些其他更改,您仍然可以遵循相同的方法,通过附加到中间 table,然后有一个流,merging/updating 目标 table:

bronze 1  \
bronze 2   \
bronze 3    >--> append to an intermediate table --> merge into Silver
.......... /
bronze N  /