无法通过google,msdn(和其他微软)文档或SO来找到答案。
在Azure Data Factory中,您可以使用管道中的复制活动从数据集中获取数据。管道定义包括查询。我在文档中看到的所有查询都是简单的单表查询,没有连接。在这种情况下,数据集被定义为数据库中具有“TableName”=“mytable”的表。另外,可以从存储过程中检索数据,可能允许更复杂的sql。
是否有办法在管道中定义更复杂的查询,该管道包含连接和/或转换逻辑,这些逻辑可以改变查询中的数据或来自查询而不是存储过程的管道。我知道您可以在数据集中指定字段,但不知道如何绕过“tablename”属性。
如果有办法,该方法会是什么?
输入是本地sql server。输出是azure sql数据库。
为了清晰起见而更新。
答案 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"
}
},
另外请注意 - 您不仅可以使用表格或视图中的选择,还可以使用[表值函数]。