【问题标题】:Azure Synapse ingest pipeline with ForEach activity on multiple database tables (MySQL)在多个数据库表 (MySQL) 上具有 ForEach 活动的 Azure Synapse 摄取管道
【发布时间】:2022-10-25 09:45:13
【问题描述】:

我正在尝试使用 ForEach 活动在 Azure Synapse 上的管道中增量摄取几个表。

我已将变量定义为字符串数组。每个字符串对应于我要在 ForEach 中查询并从中复制数据的表的名称。

我的基本问题是如何在复制活动源的 SELECT 查询中作为表名传递,@item 在 ForEach 中迭代。

*我与 MySQL 数据库的连接是通过 ODBC 建立的。

【问题讨论】:

  • 你有在源设置中使用查询选项吗?
  • 是的,我使用过它,但我尝试了以下但没有工作: SET @t = 'table_name' SET @q = CONCAT('SELECT * FROM ',@t);从@q准备st;执行 st; DEALLOCATE PREPARE st;
  • 为什么要在查询中为 table_name 设置变量?它不是来自每个项目吗
  • 每个项目都来自我创建的变量数组,它们是字符串。我曾考虑添加一个查找活动,然后添加一个过滤器活动来获取我想要的特定表。但是,如果我可以设置我想要摄取的表的名称,为什么要动态设置呢?
  • 能否再说明一下要求?是否只想使用过滤器活动复制特定表?

标签: mysql sql azure-synapse data-ingestion


【解决方案1】:

在 for-each 活动中的复制活动中,不要将查询作为select * from @item() 提供,而是提供select * from {@item()}

我试图在我的环境中重现这一点。以下是步骤。

  • 一个名为的变量列表被创建,两个样本表名 T3、T4 被指定为默认值。

  • 在每个活动项目中,给出@variables('list')

  • 在每个活动内部,都添加了查找活动和复制活动。

  • 在复制活动中,查询为 select * from @{item()} where datet > '@{activity('Lookup1').output.firstRow. datet}

  • for-each 中的所有活动都已成功执行。

【讨论】:

    【解决方案2】:

    假设您有两个名为 dimcustomer、dimpersondetail 的表。

    1. 您可以将这两个值放在一个数组类型的变量中 2.您可以在源查询中使用命令@concat('select * from ',item())。 请参阅随附的屏幕截图。

    【讨论】:

    • 非常感谢您的回复,似乎有效,但我还有一个问题。正如我上面所说,我增量加载每个表的数据。如果我想在以下位置添加:@concat('SELECT * FROM ',item(),' WHERE Datetime > ',活动('Lookup_watermark_value').output.firstRow.WatermarkValue,';') 如何在不弄乱 item() 的情况下将活动输出作为字符串传递(我尝试了 string() 函数但没有用)。
    • 您可以遵循 aswin 给出的方法,因为您的要求是增量负载。在里面查找你
    猜你喜欢
    • 2022-08-24
    • 2022-07-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2021-12-23
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多