繁体   English   中英

Azure 数据工厂中的 80 个 Postgres 数据库复制到

[英]80 Postgres databases in Azure Data Factory to copy into

我正在使用 Azure 数据工厂,我使用 SQLServer 作为源,使用 Postgres 作为目标。 目标是通过转换从 SQLServer 复制 30 个表到 Postgres 中的 30 个表。 困难的部分是我有 80 个数据库,它们的布局完全相同,但数据不同。 每个客户一个数据库,因此 80 个客户每个都有自己的数据库。

链接服务不允许 Postgres 的参数。 我每个源和目标都有一个数据集,使用模式和表名参数。 每个表有一个管道,其中包含 SQLServer 源和 Postgres 目标。 我可以参数化链接服务中的 SQLServer 源,但不能参数化 Postgres 问题是如何在不添加 80 个目标链接服务和 80 个目标数据集的情况下将 80 个源数据库复制到 80 个目标数据库? 另外,我必须为每个目标数据库重复所有 30 个管道。

顺便说一句,我只熟悉用户界面,但是任何其他可以完成这项工作的东西都是可以接受的。 任何帮助,将不胜感激。

有一种简单的方法可以实现这一点。 本质上,您需要有一个链接服务,它从 KeyVault 中读取连接字符串。 然后,您可以将源和目标参数化为 keyvault 秘密名称,只需更改秘密名称即可在数据源之间轻松切换。 这依赖于包含在单个连接字符串中的所有连接相关信息。

我将为 Postgresql 提供一个简单的概述,但同样的逻辑适用于作为源的 MSSQL 服务器。

  1. Azure Key Vault实施Linked Service
  2. Add a Linked Service for Azure Postgresql that uses Key Vault to store access url in format: Server=your_server_name.postgres.database.azure.com;Database=your_database_name;Port=5432;UID=your_user_name;Password=your_password;SSL Mode=Require;Keepalive=600; (建议使用服务器名称作为秘密名称)
  3. 在管道中传递这个参数,它本质上是正确的秘密名称(您还可以实现一个循环,该循环将立即接受 x 元素的数组,并一次将 n 个元素解析到单独的管道中)

KeyVault 的链接服务定义:

{
    "name": "your_keyvault_name",
    "properties": {
        "description": "KeyVault",
        "annotations": [],
        "type": "AzureKeyVault",
        "typeProperties": {
            "baseUrl": "https://your_keyvault_name.vault.azure.net/"
        }
    }
}

Postgresql 的链接服务定义:

{   "name": "generic_postgres_service".
    "properties": {
        "type": "AzurePostgreSql",
        "parameters": {
            "pg_database": {
                "type": "string",
                "defaultValue": "your_database_name"
            }
        },
        "annotations": [],
        "typeProperties": {
            "connectionString": {
                "type": "AzureKeyVaultSecret",
                "store": {
                    "referenceName": "KeyVaultName",
                    "type": "LinkedServiceReference"
                },
                "secretName": "@linkedService().secret_name_for_server"
            }
        },
        "connectVia": {
            "referenceName": "AutoResolveIntegrationRuntime",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Postgresql 的数据集定义:

{
    "name": "your_postgresql_dataset",
    "properties": {
        "linkedServiceName": {
            "referenceName": "generic_postgres_service",
            "type": "LinkedServiceReference",
            "parameters": {
                "secret_name_for_server": {
                    "value": "@dataset().secret_name_for_server",
                    "type": "Expression"
                }
            }
        },
        "parameters": {
            "secret_name_for_server": {
                "type": "string"
            }
        },
        "annotations": [],
        "type": "AzurePostgreSqlTable",
        "schema": [],
        "typeProperties": {
            "schema": {
                "value": "@dataset().schema_name",
                "type": "Expression"
            },
            "table": {
                "value": "@dataset().table_name",
                "type": "Expression"
            }
        }
    }
}

Postgresql 的管道定义:

{
    "name": "your_postgres_pipeline",
    "properties": {
        "activities": [
            {
                "name": "Copy_Activity_1",
                "type": "Copy",
                "dependsOn": [],
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                ...
                ... i skipped definition
                ...
                "inputs": [
                    {
                        "referenceName": "your_postgresql_dataset",
                        "type": "DatasetReference",
                        "parameters": {
                            "secret_name_for_server": "secret_name"
                        }
                    }
                ]
            }
        ],
        "annotations": []
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM