有条件地将数据从一个 SQL 实例同步到另一实例

Abh*_*eet 5 azure azure-data-factory azure-sql-database databricks azure-synapse

我一直在尝试有条件/选择性地将Azure 上的 SQL 表中的数百万条记录同步到 Azure 中的另一个 SQL 数据库。

有没有办法将 Azure 数据同步或复制配置为不同步表的所有记录,而是仅同步 where 子句中指定的几行?

或者有没有办法将 SQL View 生成的数据同步到另一个数据库表中?

PS 我做了研究,默认情况下它在 Azure 门户中不可用。所以期待专家对此的意见。感谢您尝试提供帮助!

Neb*_*tic 2

在 Azure 中同步 SQL 数据库的常见方法是激活复制。这将使数据库保持同步,以实现高可用性或冗余。对于您的用例,这不是一个选项,因为您只想同步特定行。

这里推荐使用的工具是 Azure 数据工厂,它具有内置的复制活动。这允许您将数据从源复制到接收器。在您的情况下,源和接收器都是 SQL 数据库。要开始复制活动,请按照教程中的说明进行操作。您还应该利用滚动窗口触发器以特定的时间间隔运行管道。

下面您将找到一个非常简单的复制活动示例,以供您了解。该sqlReaderQuery属性为您提供了很大的灵活性,因为它使您能够选择要同步的特定数据。要增量同步数据,您必须利用数据集中的现有字段,例如LastUpdated. 这样您就可以有条件地加载上次管道运行后创建的数据。

"activities":[
    {
        "name": "CopyFromSQLServer",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SQL Server input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlSource",
                "sqlReaderQuery": "SELECT * FROM Customers WHERE LastUpdated BETWEEN @{pipeline().parameters.LastModified_From} AND @{pipeline().parameters.LastModified_To}"
            },
            "sink": {
                "type": "SqlSink"
            }
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

这个想法基于这个azure 教程,该教程使用 LastModifiedDate 在两个存储容器之间复制 blob 文件。在GitHub 存储库中,您将找到 terraform 实现。