Azure Synapse:将数据从暂存模式提升到生产模式的高效方式?

Azure Synapse: Performant way to promote data from staging schema to prod schema?

我已经使用 ADF/synapse 管道将我的事实数据从源提取到专用 sql 池中的暂存模式 table。

我现在的任务是使用代理键丰富事实数据,该代理键是通过从产品模式中已有的小维度 table 查找而来的。

为此我一直在使用 ADF/synapse 数据流,但它似乎效率低下,因为它将数据移回 ADF。我可以通过 spark notebook 做到这一点,但也似乎是一个不必要的数据移动。

所以我 认为 最好的方法是在专用 sql 池上创建一个存储过程来执行此充实。我关心的是确保这个 sql 过程以高效的方式编码(而不是逐行插入)。

有很多从无到有 (ctas) 创建 table 的 proc 示例,但我还没有找到以可扩展的方式执行 enrich/append 操作的示例。什么是好的 sql 代码实践?

我认为最好的做法是将您的小尺寸分布为 REPLICATE 并使用 CTAS 在 suitable 上创建 HASH 分布 table ] 柱子。如果你有足够的卷,另外考虑分区切换。一个简化的例子:

CREATE TABLE fact.yourBigTable
WITH
(
    CLUSTERED COLUMNSTORE INDEX,
    DISTRIBUTION = HASH( someColumn )
)
AS
SELECT ...
FROM staging. ...


CREATE TABLE dim.yourSmallTable (

    ...

)
WITH
(
    CLUSTERED INDEX ( someColumn ),
    DISTRIBUTION = REPLICATE
);

CTAS 经过优化,可以在专用 SQL 池的 MPP 基础设施上正常运行。如果您觉得 CTAS 不合适,请改用直截了当的 INSERT。专用 SQL 池现在支持 MERGE(预览版),因此也值得一看。

我同意你不要为此使用 ADF 或数据流,因为没有什么比直接在服务器上 SQL 运行 更快,我将这些东西留给你可以做的事情' t 处理 SQL,例如编排/运行 并行任务、高级转换(例如使用笔记本)等。