无法通过google, msdn(和其他microsoft)文档或SO找到答案。
在Azure Data Factory中,您可以通过在管道中使用复制活动从数据集中获取数据。管道定义包括一个查询。我在文档中看到的所有查询都是简单的,没有连接的单表查询。在这种情况下,数据集被定义为数据库中的表,其中"TableName"="mytable"。此外,还可以从存储过程中检索数据,可能允许更复杂的sql。
是否有一种方法可以在管道中定义更复杂的查询,该查询包含连接和/或转换逻辑,可以更改来自查询的数据或来自管道的数据,而不是存储过程。我知道你可以在数据集中指定字段,但不知道如何绕过"tablename"属性。
如果有一个方法,这个方法是什么?
输入是本地SQL服务器。输出为azure SQL数据库
是的,sqlReaderQuery可以比示例中提供的复杂得多,而且它不必只使用数据集中的表名。
在我的一个管道中,我有一个表名为"dbo"的数据集。tbl_Build",但是我的sqlReaderQuery查看该数据库中的几个表。下面是一个严重截断的示例:
与BuildErrorNodes作为(select infoNode。builddid,…)作为来自dbo的messagvalue。tbl_BuildInformation2作为infoNode内部连接dbo。tbl_BuildInformationType as infoType on (infoNode. tbl_BuildInformationType)
PartitionId = infoType), BuildInfo as…在Dataset中列出单个表名,然后在查询中使用多个表,这有点令人困惑,但它工作得很好
有一种方法可以使用数据工厂将数据从本地SQL迁移到Azure SQL。您可以使用复制活动,检查此代码示例为您的情况,特别是GitHub链接到ADF活动源。基本上,您需要创建Copy Activity,它将具有TypeProperties与SqlSource和SqlSink集合,如下所示:
<!-- language: lang-json -->
"typeProperties": {
"source": {
"type": "SqlSource",
"SqlReaderQuery": "select * from [Source]"
},
"sink": {
"type": "SqlSink",
"WriteBatchSize": 1000000,
"WriteBatchTimeout": "00:05:00"
}
},
也要提到-你不仅可以从表或视图中使用select,还可以使用[table - value - functions]。