4

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

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

有没有办法在管道中定义更复杂的查询,该管道包括连接和/或转换逻辑,这些逻辑从查询而不是存储过程中更改数据或管道。我知道您可以在数据集中指定字段,但不知道如何绕过“tablename”属性。

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

输入是本地 sql server。输出是 azure sql 数据库。

为清楚起见已更新。

4

2 回答 2

8

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

在我的一个管道中,我有一个 TableName 为“dbo.tbl_Build”的数据集,但我的 sqlReaderQuery 会查看该数据库中的几个表。这是一个严重截断的示例:

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 ...

在数据集中列出一个表名,然后在查询中使用多个表有点混乱,但它工作得很好。

于 2016-04-13T03:03:19.120 回答
0

有一种方法可以使用数据工厂将数据从本地 SQL 移动到 Azure SQL。您可以使用Copy Activity,针对您的案例检查此代码示例,特别是指向 ADF Activity 源的 GitHub 链接。基本上你需要创建 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] 也可以使用。

于 2015-09-22T21:24:17.100 回答