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

时间:2015-09-15 23:26:28

标签: azure azure-sql-database azure-data-factory cortana-intelligence

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

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

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

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

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

为了清晰起见而更新。

2 个答案:

答案 0 :(得分:6)

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

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

将BuildErrorNodes作为(选择infoNode.BuildId,...)作为来自dbo.tbl_BuildInformation2的MessageValue作为infoNode内部联接dbo.tbl_BuildInformationType作为infoType on(infoNode.PartitionId = infoType),BuildInfo as ...

在数据集中列出单个表名有点令人困惑,然后在查询中使用多个表,但它的工作正常。

答案 1 :(得分:0)

有一种方法可以使用Data Factory将数据从内部部署SQL迁移到Azure SQL。 您可以使用Copy Activity,特别针对您的案例GitHub link to the ADF Activity source查看此代码示例。 基本上您需要创建复制活动,其中 TypeProperties SqlSource SqlSink 集合如下所示:

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

另外请注意 - 您不仅可以使用表格或视图中的选择,还可以使用[表值函数]。