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 /
我有许多 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 /