Datafactory - 将列的子部分从一个数据库 table 动态复制到另一个数据库

Datafactory - dynamically copy subsection of columns from one database table to another

我在本地 SQL 服务器上有一个数据库,需要定期将数据从 80 个不同的 table 复制到 Azure SQL 数据库。对于每个 table,我需要 select 来自和映射的列是不同的 - 例如,TableA - 我需要第 1,2 和 5 列。对于 TableB,我只需要第 1 列。 table s在source和target中的命名相同,只是列名不同

我可以创建多个复制数据管道和 select 源数据集和目标数据集并映射到目标 table 结构,但对于最终相同的内容来说这似乎需要大量工作过程重复。

到目前为止,我已经创建了一个元 table,其中列出了所有 table 和列映射信息。此 table 包含以下数据: SourceSchema、SourceTableName、SourceColumnName、TargetSchema、TargetTableName、TargetColumnName。

对于每个 table,数据保存在此 table 中以将源 table 映射到目标 table。

然后我创建了一个查找,其中 select 每个 table 来自映射 table。然后它执行 for each 循环并执行另一个查找以获取 foreach 迭代中 table 的源和目标列数据。

根据这些信息,我能够在 foreach 循环中创建的复制数据 activity 中映射源 table 和接收器 table,但我没有确定我如何动态映射列,或者动态地 select 仅从每个来源 table 需要的列。 我从列查找中得到“activity('LookupColumns').output”,但如果有人可以建议我如何使用它然后将源列映射到目标列以进行复制,我将不胜感激activity。谢谢

对于您的情况,您可以使用映射设置中的表达式。

它需要你提供一个表达式,它的数据应该是这样的:{"type":"TabularTranslator","mappings":[{"source":{"name":"Id"},"sink":{"name":"CustomerID"}},{"source":{"name":"Name"},"sink":{"name":"LastName"}},{"source":{"name":"LastModifiedDate"},"sink":{"name":"ModifiedDate"}}]}

因此您需要在您的元 table 中添加一个名为 Translator 的列,它的值应该像上面的 JSON 数据。然后用这个表达式做映射:@item().Translator

参考:https://docs.microsoft.com/en-us/azure/data-factory/copy-activity-schema-and-type-mapping#parameterize-mapping