从查询填充 Azure 数据工厂数据集

Populate Azure Data Factory dataset from query

无法通过 google、msdn(和其他微软)文档或 SO 找到答案。

在 Azure 数据工厂中,您可以通过在管道中使用副本 activity 从数据集中获取数据。管道定义包括一个查询。我在文档中看到的所有查询都是简单的、没有连接的单个 table 查询。在这种情况下,数据集在数据库中定义为 table,其中 "TableName"= "mytable"。此外,可以从存储过程中检索数据,大概允许更复杂的 sql.

有没有一种方法可以在管道中定义更复杂的查询,其中包括连接 and/or 转换逻辑,该逻辑改变来自查询而不是存储过程的数据或管道。我知道您可以在数据集中指定字段,但不知道如何绕过 "tablename" 属性.

如果有办法,那个方法会是什么?

输入是本地 sql 服务器。输出是天蓝色的 sql 数据库。

为清楚起见已更新。

有一种方法可以使用数据工厂将数据从本地 SQL 移动到 Azure SQL。 您可以使用 Copy Activity, check this code sample for your case specifically GitHub link to the ADF Activity source。 基本上你需要创建 Copy Activity 它将具有 TypePropertiesSqlSourceSqlSink 集看起来像这样:

 <!-- language: lang-json -->
"typeProperties": {
      "source": {
        "type": "SqlSource",
        "SqlReaderQuery": "select * from [Source]"
      },
      "sink": {
        "type": "SqlSink",
        "WriteBatchSize": 1000000,
        "WriteBatchTimeout": "00:05:00"
      }
    },

另请注意 - 您不仅可以使用表或视图中的选择,而且 [Table-Valued-Functions] 也可以使用。

是的,sqlReaderQuery 可能比示例中提供的复杂得多,而且它不必仅使用数据集中的 Table 名称。

在我的一个管道中,我有一个名为 Table 名称 "dbo.tbl_Build" 的数据集,但我的 sqlReaderQuery 查看该数据库中的几个 table。这是一个严重截断的示例:

with BuildErrorNodes as (select infoNode.BuildId, ...) as MessageValue from dbo.tbl_BuildInformation2 as infoNode inner join dbo.tbl_BuildInformationType as infoType on (infoNode.PartitionId = infoType), BuildInfo as ...

在数据集中列出单个 table 名称,然后在查询中使用多个 table,这有点令人困惑,但它工作得很好。