首页 > 解决方案 > 使用 ADF 将多个表从雪花加载到雪花

问题描述

我在雪花中有源表,在雪花中有目标表。

我需要使用 ADF 将数据从源加载到目标。

要求:我需要使用单个管道为所有表加载数据。

例如:假设我在源中有 40 个表并将总共 40 个表数据加载到目标表。我需要创建一个管道来一次加载所有表。

1

谁能帮助我实现这一目标?

谢谢,P。

标签: snowflake-cloud-data-platformazure-data-factory

解决方案


这是一个相当广泛的问题。所以把这一切都当作一般的想法,而不是具体的建议。

随时提出更具体的问题,我将尝试对此进行更新/扩展。

  • ADF 作为编排/监控过程很有用,但在 Snowflake 中管理数据的实际复制和操作可能会很棘手。我的高级建议是在雪花存储过程中编写逻辑和加载代码

    • 那么您可以通过简单地调用这些存储过程来使用 ADF 进行编排。您将获得使用 ADF 所擅长的好处,并让 Snowflake 完成繁重的工作,而这正是它所擅长的。
    • 希望您能够参数化过程,以便您可以拥有一个(或几个)过程,该过程采用表名并动态计算列名等来运行加载过程。
  • 实施的各种注释。

    • ADF 确实有一个原生的 Snowflake 连接器。它是相当新的,所以很多在线帖子会告诉您如何设置自定义 ODBC 连接器。你不需要这样做。使用本机连接器和自动解析集成,它应该适合您。
    • 您可以在 ADF 查找活动中编写查询以输出表列表以及任何需要的参数(如主键、按列排序、要调用的过程名称等),然后将该列表输入 ADF foreach 循环。
    • foreach 循环有一点限制,因为有些东西不能嵌套在循环中(比如条件)。如果您需要额外的功能,您可以让 foreach 循环调用子 ADF 管道(传递这些参数)并让子管道管理您的表处理逻辑。
    • Snowflake 有很好的选项来基于表名查询元数据。请参阅INFORMATION_SCHEMA。在这和一小部分javascript逻辑之间,生成动态查询(例如,使用特定于提供的表名的列名)并不算太糟糕。
    • 如果您确实想使用 ADF 的复制活动,我认为您需要设置一个中间 Azure 存储帐户连接。我相信这是因为它在引擎盖下使用了 COPY INTO ,这需要使用外部存储。
    • ADF 没有很多好的选择来避免一次运行一个管道多次。要么小心确保你的代码可以处理这样的边缘情况,要么你的调度/超时不允许管道运行时间过长的情况。
  • 额外说明:

    • 我不知道您与 ADF 的关系如何,但如果没有更多上下文,我可能会建议您快速了解一下这个用例的 DBT。对于雪花到雪花处理/转换的特定场景,它是一个很好的工具。自从将我们的一些项目从 ADF 转移到 DBT 后,我的团队感到非常高兴。(非赞助:P)

推荐阅读