Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
适用于:
Azure Data Factory
Azure Synapse Analytics
本文概述了如何在 Azure Data Factory 和 Synapse Analytics 管道中使用复制活动从/向Azure Database for PostgreSQL复制数据。 此外,如何使用Data Flow转换Azure Database for PostgreSQL中的数据。 若要了解详细信息,请阅读
重要
Azure PostgreSQL数据库第2.0版提供了增强的原生支持。 如果在解决方案中使用 Azure Database for PostgreSQL 版本 1.0,建议尽早更新Azure Database for PostgreSQL连接器。
此连接器专用于 Azure Database for PostgreSQL 服务。 若要从位于本地或云中的通用 PostgreSQL 数据库复制数据,请使用 PostgreSQL 连接器。
支持的功能
此Azure Database for PostgreSQL连接器支持以下功能:
| 支持的功能 | IR | 托管专用终结点 | 连接器支持的版本 |
|---|---|---|---|
| Copy activity (源/接收器) | (1) (2) | ✓ | 1.0 和 2.0 |
| 映射数据流(源/汇) | (1) | ✓ | 1.0 和 2.0 |
| 查找活动 | (1) (2) | ✓ | 1.0 和 2.0 |
| 脚本活动 | (1) (2) | ✓ | 2.0 |
(1) Azure集成运行时 (2) 自承载集成运行时
这三个活动适用于 Azure Database for PostgreSQL Single Server、Flexible Server 和 Azure Cosmos DB for PostgreSQL。
入门
若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:
使用用户界面创建一个连接到 Azure Database for PostgreSQL 的链接服务
使用以下步骤在 Azure 门户 UI 中创建一个关联服务,以连接到 Azure Database for PostgreSQL。
浏览到Azure Data Factory或 Synapse 工作区中的“管理”选项卡,然后选择“链接服务”,然后选择“新建”
搜索 PostgreSQL 并选择 postgreSQL 连接器的 Azure 数据库。
配置服务详细信息、测试连接并创建新的链接服务。
连接器配置详细信息
以下部分提供有关用于定义特定于Azure Database for PostgreSQL连接器的数据工厂实体的属性的详细信息。
链接服务属性
Azure Database for PostgreSQL 连接器版本2.0支持传输层安全性(TLS)1.3和多种安全套接字层(SSL)模式。 请参阅此 段落,将您的 Azure SQL Database 连接器版本从版本 1.0 升级。 有关属性详细信息,请参阅相应部分。
版本 2.0
应用版本 2.0 时,Azure Database for PostgreSQL链接服务支持以下属性:
| 属性 | 描述 | 必需 |
|---|---|---|
| 类型 | type 属性必须设置为: AzurePostgreSql。 | 是 |
| 版本 | 指定的版本。 该值为 2.0。 |
是 |
| 验证类型 | 从基本、服务主体、系统分配的托管标识或用户分配的托管标识身份验证类型中进行选择 | 是 |
| 服务器 | 指定运行Azure Database for PostgreSQL的主机名和可选端口。 | 是 |
| 移植 | Azure Database for PostgreSQL服务器的 TCP 端口。 默认值为 5432。 |
否 |
| 数据库 | 要连接的 Azure Database for PostgreSQL 数据库名称。 | 是 |
| SSL模式 | 控制是否使用 SSL,具体取决于服务器支持。 - 已禁用:SSL 已禁用。 如果服务器需要 SSL,连接将失败。 - 允许:如果服务器允许非 SSL 连接,则首选非 SSL 连接,但允许 SSL 连接。 - 首选:如果服务器允许 SSL 连接,则首选 SSL 连接,但允许不使用 SSL 的连接。 - 必需:如果服务器不支持 SSL,连接将失败。 - Verify_ca:如果服务器不支持 SSL,连接将失败。 同时验证服务器证书。 - Verify_full:如果服务器不支持 SSL,连接将失败。 还通过主机名验证服务器证书。 选项:已禁用(0) / 允许 (1) / 首选 (2) (默认) / 必需 (3) / Verify_ca (4) / Verify_full (5) |
否 |
| 连接方式 | 此属性表示用于连接到数据存储的 集成运行时 。 可以使用 Azure Integration Runtime 或自托管 Integration Runtime(如果数据存储位于专用网络中)。 如果未指定,则使用默认Azure Integration Runtime。 | 否 |
| 其他连接属性: | ||
| 架构 | 设置架构搜索路径。 | 否 |
| 池 | 是否应使用连接池。 | 否 |
| connectionTimeout 连接超时 | 等待的时间(以秒为单位),这是在尝试建立连接时,终止尝试并生成错误之前的时间。 | 否 |
| commandTimeout | 在终止尝试并生成错误之前,尝试执行命令的等待时间(以秒为单位)。 对于无穷大,设置为零。 | 否 |
| 信任服务器证书 | 是否在不验证的情况下信任服务器证书。 | 否 |
| 读缓冲区大小 | 确定读取时 Npgsql 使用的内部缓冲区大小。 如果从数据库传输大型值,则增加大小可能会提高性能。 | 否 |
| 时区 | 获取或设置会话时区。 | 否 |
| 编码 | 获取或设置用于编码/解码 PostgreSQL 字符串数据的.NET编码。 | 否 |
基本身份验证
| 属性 | 描述 | 必需 |
|---|---|---|
| 用户名 | 要连接的用户名。 如果使用 IntegratedSecurity,则不需要。 | 是 |
| 密码 | 要用于连接的密码。 如果使用 IntegratedSecurity,则不需要。 将此字段标记为 SecureString 以安全存储它。 或者,可以引用存储在 Azure Key Vault 中的机密。 | 是 |
示例:
{
"name": "AzurePostgreSqlLinkedService",
"properties": {
"type": "AzurePostgreSql",
"version": "2.0",
"typeProperties": {
"server": "<server name>",
"port": "5432",
"database": "<database name>",
"sslMode": 2,
"username": "<user name>",
"password": {
"type": "SecureString",
"value": "<password>"
}
}
}
}
示例:
在 Azure Key Vault 中存储密码
{
"name": "AzurePostgreSqlLinkedService",
"properties": {
"type": "AzurePostgreSql",
"version": "2.0",
"typeProperties": {
"server": "<server name>",
"port": "5432",
"database": "<database name>",
"sslMode": 2,
"username": "<user name>",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
}
}
}
系统分配的托管标识身份验证
数据工厂或 Synapse 工作区可以与系统分配的托管标识相关联,该标识在向Azure中的其他资源进行身份验证时表示服务。 可以将此托管标识用于Azure数据库进行 PostgreSQL 身份验证。 指定的工厂或 Synapse 工作区可以使用此标识访问数据库数据或从/向数据库复制数据。
若要使用系统分配的托管标识,请执行以下步骤:
数据工厂或 Synapse 工作区可与系统分配的托管标识相关联。 了解详细信息, 生成系统分配的托管标识
具有系统分配的托管标识的 PostgreSQL Azure 数据On。
在 Security 下的 Azure Database for PostgreSQL 资源中
为 PostgreSQL 链接服务配置Azure数据库。
示例:
{
"name": "AzurePostgreSqlLinkedService",
"type": "Microsoft.DataFactory/factories/linkedservices",
"properties": {
"annotations": [],
"type": "AzurePostgreSql",
"version": "2.0",
"typeProperties": {
"server": "<server name>",
"port": 5432,
"database": "<database name>",
"sslMode": 2,
"authenticationType": "SystemAssignedManagedIdentity"
}
}
}
注释
自承载集成运行时不支持此身份验证类型。
用户分配的托管标识身份验证
数据工厂或 Synapse 工作区可以与 User 分配的托管标识相关联,该标识在向 Azure 中的其他资源进行身份验证时表示服务。 可以将此托管标识用于Azure数据库进行 PostgreSQL 身份验证。 指定的工厂或 Synapse 工作区可以使用此标识访问数据库数据或从/向数据库复制数据。
要使用用户分配的托管身份身份验证,除了上一节中描述的通用属性外,还要指定以下属性:
| 属性 | 描述 | 必需 |
|---|---|---|
| 凭据 | 将用户分配的托管标识指定为凭据对象。 | 是 |
你也需要执行以下步骤:
请确保在 Azure 门户中创建 用户分配的托管标识资源。 若要了解详细信息,请转到“管理用户分配的托管标识”
将用户分配托管标识分配给适用于 PostgreSQL 的 Azure 数据库资源
将 用户分配的托管标识分配给 Azure Data Factory 资源
选择“设置”,然后选择“托管标识”
在 “用户分配 ”选项卡下。选择 “+ 添加 ”链接并选择用户托管标识
Azure 数据工厂资源中用户分配的托管标识配置的屏幕截图。
为 PostgreSQL 链接服务配置Azure数据库。
示例:
{
"name": "AzurePostgreSqlLinkedService",
"type": "Microsoft.DataFactory/factories/linkedservices",
"properties": {
"annotations": [],
"type": "AzurePostgreSql",
"version": "2.0",
"typeProperties": {
"server": "<server name>",
"port": 5432,
"database": "<database name>",
"sslMode": 2,
"authenticationType": "UserAssignedManagedIdentity",
"credential": {
"referenceName": "<your credential>",
"type": "CredentialReference"
}
}
}
}
服务主体身份验证
| 属性 | 描述 | 必需 |
|---|---|---|
| 用户名 | 服务主体的显示名称 | 是 |
| 租户 | Azure Database for PostgreSQL 服务器所在的租户 | 是 |
| 服务主体ID | 服务主体的应用程序 ID | 是 |
| 服务主体凭据类型 | 选择是否需要服务主体证书或服务主体密钥的身份验证方法 - ServicePrincipalCert:设置为服务主体证书。 - ServicePrincipalKey:将服务主体密钥设置为服务主体密钥身份验证。 |
是 |
| servicePrincipalKey 主要密钥 | 客户端机密值。 选择服务主体密钥时使用 | 是 |
| Azure云类型 | 选择Azure Database for PostgreSQL服务器的Azure云类型 | 是 |
| 服务主体嵌入证书 (servicePrincipalEmbeddedCert) | 服务主体证书文件 | 是 |
| 服务主体嵌入式证书密码 | 服务主体证书密码(如需要) | 否 |
示例:
服务主体密钥
{
"name": "AzurePostgreSqlLinkedService",
"type": "Microsoft.DataFactory/factories/linkedservices",
"properties": {
"annotations": [],
"type": "AzurePostgreSql",
"version": "2.0",
"typeProperties": {
"server": "<server name>",
"port": 5432,
"database": "<database name>",
"sslMode": 2,
"username": "<service principal name>",
"authenticationType": "<authentication type>",
"tenant": "<tenant>",
"servicePrincipalId": "<service principal ID>",
"azureCloudType": "<azure cloud type>",
"servicePrincipalCredentialType": "<service principal type>",
"servicePrincipalKey": "<service principal key>"
}
}
}
示例:
服务主体证书
{
"name": "AzurePostgreSqlLinkedService",
"type": "Microsoft.DataFactory/factories/linkedservices",
"properties": {
"annotations": [],
"type": "AzurePostgreSql",
"version": "2.0",
"typeProperties": {
"server": "<server name>",
"port": 5432,
"database": "<database name>",
"sslMode": 2,
"username": "<service principal name>",
"authenticationType": "<authentication type>",
"tenant": "<tenant>",
"servicePrincipalId": "<service principal ID>",
"azureCloudType": "<azure cloud type>",
"servicePrincipalCredentialType": "<service principal type>",
"servicePrincipalEmbeddedCert": "<service principal certificate>",
"servicePrincipalEmbeddedCertPassword": "<service principal embedded certificate password>"
}
}
}
注释
Microsoft Entra ID 自托管集成运行时版本 5.50 或更高版本支持使用服务主体和用户分配的托管标识进行身份验证。
版本 1.0
应用版本 1.0 时,Azure Database for PostgreSQL链接服务支持以下属性:
| 属性 | 描述 | 必需 |
|---|---|---|
| 类型 | type 属性必须设置为: AzurePostgreSql。 | 是 |
| 版本 | 指定的版本。 该值为 1.0。 |
是 |
| connectionString | 用于连接到 Azure Database for PostgreSQL 的 Npgsql 连接字符串。 还可以将密码放在Azure Key Vault中,并将 password 配置从connection string拉取出来。 有关详细信息,请参阅以下示例和在 Azure Key Vault 中存储凭据。 |
是 |
| 连接方式 | 此属性表示用于连接到数据存储的 集成运行时 。 可以使用 Azure 集成运行时或自托管集成运行时(如果数据存储位于专用网络中)。 如果未指定,则使用默认Azure Integration Runtime。 | 否 |
典型的connection string是 host=<server>.postgres.database.chinacloudapi.cn;database=<database>;port=<port>;uid=<username>;password=<password>。 以下是你可以根据具体情况设置的更多属性:
| 属性 | 描述 | 选项 | 必需 |
|---|---|---|---|
| EncryptionMethod (EM) | 驱动程序用于加密在驱动程序和数据库服务器之间发送的数据的方法。 例如: EncryptionMethod=<0/1/6>; |
0 (无加密 ) (默认) / 1 (SSL) / 6 (RequestSSL) | 否 |
| ValidateServerCertificate (VSC) | 启用 SSL 加密后,确定驱动程序是否验证数据库服务器发送的证书(加密方法=1)。 例如: ValidateServerCertificate=<0/1>; |
0 (禁用) (默认) / 1 (启用) | 否 |
示例:
{
"name": "AzurePostgreSqlLinkedService",
"properties": {
"type": "AzurePostgreSql",
"version": "1.0",
"typeProperties": {
"connectionString": "host=<server>.postgres.database.chinacloudapi.cn;database=<database>;port=<port>;uid=<username>;password=<password>"
}
}
}
示例:
将密码存储在 Azure Key Vault 中
{
"name": "AzurePostgreSqlLinkedService",
"properties": {
"type": "AzurePostgreSql",
"version": "1.0",
"typeProperties": {
"connectionString": "host=<server>.postgres.database.chinacloudapi.cn;database=<database>;port=<port>;uid=<username>;",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
}
}
}
数据集属性
有关可用于定义数据集的部分和属性的完整列表,请参阅 “数据集”。 本部分提供数据集中Azure Database for PostgreSQL支持的属性列表。
若要从Azure Database for PostgreSQL复制数据,请将数据集的 type 属性设置为 AzurePostgreSqlTable。 支持以下属性:
| 属性 | 描述 | 必需 |
|---|---|---|
| 类型 | 数据集的 type 属性必须设置为 AzurePostgreSqlTable。 | 是 |
| 架构 | 架构的名称。 | 否(如果指定了活动源中的“query”) |
| 表 | 表/视图的名称。 | 否(如果指定了活动源中的“query”) |
| 表名称 | 表格名称 支持此属性是为了向后兼容。 对于新的工作负荷,请使用 schema 和 table。 |
否(如果指定了活动源中的“query”) |
示例:
{
"name": "AzurePostgreSqlDataset",
"properties": {
"type": "AzurePostgreSqlTable",
"linkedServiceName": {
"referenceName": "<AzurePostgreSql linked service name>",
"type": "LinkedServiceReference"
},
"typeProperties": {
"schema": "<schema_name>",
"table": "<table_name>"
}
}
}
拷贝活动的属性
有关可用于定义活动的各个部分和属性的完整列表,请参阅管道和活动。 本部分提供Azure Database for PostgreSQL源支持的属性列表。
使用 Azure Database for PostgreSql 作为数据源
若要从 Azure Database for PostgreSQL 复制数据,请将复制活动中的源类型设置为 AzurePostgreSqlSource。 复制活动 源 部分支持以下属性:
| 属性 | 描述 | 必需 |
|---|---|---|
| 类型 | 复制活动源的 type 属性必须设置为 AzurePostgreSqlSource | 是 |
| 查询 | 使用自定义 SQL 查询读取数据。 例如: SELECT * FROM mytable 或 SELECT * FROM "MyTable" 。 请注意,在 PostgreSQL 中,如果未加引号,则实体名称不区分大小写。 |
否(如果指定了数据集中的 tableName 属性) |
| 查询超时值 | 终止尝试执行命令并生成错误之前的等待时间,默认值为 120 分钟。 如果为此属性设置了参数,则允许的值是时间跨度,例如“02:00:00”(120 分钟)。 有关详细信息,请参阅 CommandTimeout。 | 否 |
| 分区选项 | 指定用于从Azure SQL Database加载数据的数据分区选项。 允许值包括:None(默认值)、PhysicalPartitionsOfTable 和 DynamicRange。 启用分区选项(即,不是 None),从Azure SQL Database并发加载数据的并行度由复制活动的 parallelCopies 设置控制。 |
否 |
| 分区设置 | 指定数据分区的设置组。 当分区选项不是 None 时适用。 |
否 |
在 partitionSettings 下: |
||
| partitionNames (分区名称) | 需要复制的物理分区的列表。 当分区选项是 PhysicalPartitionsOfTable 时适用。 如果使用查询来检索源数据,请在 WHERE 子句中挂接 ?AdfTabularPartitionName。 有关示例,请参阅 Azure 数据库适用于 PostgreSQL 部分中的 并行副本。 |
否 |
| partitionColumnName (分区列名称) | 以整数类型、日期类型或日期/时间类型(、int、smallint、bigint、date、timestamp without time zone 或 timestamp with time zone)指定源列的名称,范围分区将使用它进行并行复制time without time zone。 如果未指定,系统会自动检测表的主键并将其用作分区列。当分区选项是 DynamicRange 时适用。 如果使用查询来检索源数据,请在 WHERE 子句中挂接 ?AdfRangePartitionColumnName 。 有关示例,请参阅 Azure Database for PostgreSQL 节中的 并行复制。 |
否 |
| partitionUpperBound 分区上限 | 要复制数据的源分区列的最大值。 当分区选项是 DynamicRange 时适用。 如果使用查询来检索源数据,请在 WHERE 子句中挂接 ?AdfRangePartitionUpbound。 有关示例,请参阅 Azure Database for PostgreSQL 章节中的并行副本 部分。 |
否 |
| partitionLowerBound 分区下限 | 要复制数据的源分区列的最小值。 当分区选项是 DynamicRange 时适用。 如果使用查询来检索源数据,请在 WHERE 子句中挂接 ?AdfRangePartitionLowbound。 有关示例,请参阅 Azure Database for PostgreSQL 节中的 并行复制。 |
否 |
示例:
"activities":[
{
"name": "CopyFromAzurePostgreSql",
"type": "Copy",
"inputs": [
{
"referenceName": "<AzurePostgreSql input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "AzurePostgreSqlSource",
"query": "<custom query e.g. SELECT * FROM mytable>",
"queryTimeout": "00:10:00"
},
"sink": {
"type": "<sink type>"
}
}
}
]
Azure Database for PostgreSQL 作为目标端
若要将数据复制到 Azure Database for PostgreSQL,请将复制活动中的接收器类型设置为 SqlSink。 复制活动 接收槽 部分中支持的属性如下:
| 属性 | 描述 | 必需 | 连接器支持版本 |
|---|---|---|---|
| 类型 | 复制活动接收器的类型属性必须设置为 AzurePostgreSQLSink。 | 是 | 版本 1.0 和版本 2.0 |
| preCopyScript | 在每次运行中将数据写入Azure Database for PostgreSQL之前,请为复制活动指定要执行的 SQL 查询。 可以使用此属性清除预加载的数据。 | 否 | 版本 1.0 和版本 2.0 |
| writeMethod | 用于将数据写入Azure Database for PostgreSQL的方法。 允许的值为: CopyCommand (默认值,性能更高)、 BulkInsert 和 Upsert (仅限版本 2.0)。 |
否 | 版本 1.0 和版本 2.0 |
| upsertSettings | 指定写入行为的参数组。 当 WriteBehavior 选项为 Upsert 时应用。 |
否 | 版本 2.0 |
在 upsertSettings 下: |
|||
| 密钥 | 指定唯一行识别所需的列名称。 可以使用单个键或一系列密钥。 键必须是主键或唯一列。 如果未指定,则使用主键。 | 否 | 版本 2.0 |
| writeBatchSize | 每批处理加载到 Azure Database for PostgreSQL 的行数。 允许的值是表示行数的整数。 |
否(默认值为 1000000) | 版本 1.0 和版本 2.0 |
| writeBatchTimeout | 超时之前等待批插入操作完成时的等待时间。 允许的值为 Timespan 字符串。 示例为 00:30:00(30 分钟)。 |
否(默认值为 00:30:00) | 版本 1.0 和版本 2.0 |
示例 1:复制命令
"activities":[
{
"name": "CopyToAzureDatabaseForPostgreSQL",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Azure PostgreSQL output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "AzurePostgreSqlSink",
"preCopyScript": "<custom SQL script>",
"writeMethod": "CopyCommand",
"writeBatchSize": 1000000
}
}
}
]
示例 2:更新或插入数据
"activities":[
{
"name": "CopyToAzureDatabaseForPostgreSQL",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Azure PostgreSQL output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "AzurePostgreSQLSink",
"writeMethod": "Upsert",
"upsertSettings": {
"keys": [
"<column name>"
]
},
}
}
}
]
更新插入数据
Copy activity 原生支持 upsert 操作。 为了执行 upsert 操作,用户应提供作为主键或唯一列的键列。 如果用户不提供键列,则使用接收器表中的主键列。 复制活动将在接收器表中更新非键列,其中键列值与源表中的列匹配;否则,它将插入新数据。
从Azure Database for PostgreSQL并行复制
复制活动中的Azure Database for PostgreSQL连接器提供内置的数据分区来并行复制数据。 可以在复制活动的 源 选项卡上找到数据分区选项。
启用分区复制时,复制活动针对Azure Database for PostgreSQL源运行并行查询,按分区加载数据。 可以通过复制活动中的 parallelCopies 参数来控制并行度。 例如,如果将 parallelCopies 设置为 4,则服务会根据指定的分区选项和设置同时生成并运行四个查询,并且每个查询从 Azure Database for PostgreSQL 检索一部分数据。
当您从 Azure Database for PostgreSQL 加载大量数据时,建议您使用数据分区以启用并行复制。 下面是适用于不同方案的建议配置。 将数据复制到基于文件的数据存储时,建议以多个文件的形式写入文件夹(仅指定文件夹名称),在这种情况下,性能优于写入单个文件。
| 场景 | 建议的设置 |
|---|---|
| 从包含物理分区的大型表进行完整加载。 |
分区选项:表的物理分区。 在执行期间,该服务将自动检测物理分区并按分区复制数据。 |
| 从不包含物理分区但包含用于数据分区的整数列的大型表进行完整加载。 |
分区选项:动态范围分区。 分区列:指定用于对数据进行分区的列。 如果未指定,将使用主键列。 |
| 使用自定义查询加载包含物理分区的大量数据。 |
分区选项:表的物理分区。 查询: SELECT * FROM ?AdfTabularPartitionName WHERE <your_additional_where_clause>.分区名称:指定要从中复制数据的一个或多个分区名称。 如果未指定,服务会自动检测在 PostgreSQL 数据集中指定的表的物理分区。 在执行期间,服务会将 ?AdfTabularPartitionName 替换为实际的分区名称,并将其发送到Azure Database for PostgreSQL。 |
| 使用自定义查询从不包含物理分区但包含用于数据分区的整数列的表加载大量数据。 |
分区选项:动态范围分区。 查询: SELECT * FROM ?AdfTabularPartitionName WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>.分区列:指定用于对数据进行分区的列。 你可以针对具有整数或日期、日期/时间数据类型的列进行分区。 分区上限和分区下限:指定是否要对分区列进行筛选,以便仅检索介于下限和上限之间的数据。 在执行期间,服务会将 ?AdfRangePartitionColumnName、?AdfRangePartitionUpbound 和 ?AdfRangePartitionLowbound 替换为每个分区的实际列名称和值范围,并发送到Azure Database for PostgreSQL。 例如,如果将分区列“ID”设置为 1,上限设置为 80,并行复制设置为 4,则服务将按四个分区检索数据。 其 ID 分别介于 [1, 20]、[21, 40]、[41, 60] 和 [61, 80] 之间。 |
使用分区选项加载数据的最佳做法:
- 选择独特的列作为分区列(如主键或唯一键),以避免数据倾斜。
- 如果表具有内置分区,请使用名为“表的物理分区”分区选项来提升性能。
- 如果使用Azure Integration Runtime复制数据,则可以设置更大的“Data Integration Units (DIU)”(>4)以利用更多的计算资源。 检查此处适用的方案。
- “复制并行度”控制分区号,设置此数字过大有时会损害性能。 建议将此数字设置为 (DIU 或自承载 IR 节点数) * (2 到 4)。
示例:从包含物理分区的大型表进行完整加载
"source": {
"type": "AzurePostgreSqlSource",
"partitionOption": "PhysicalPartitionsOfTable"
}
示例:使用动态范围分区进行查询
"source": {
"type": "AzurePostgreSqlSource",
"query": "SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>",
"partitionOption": "DynamicRange",
"partitionSettings": {
"partitionColumnName": "<partition_column_name>",
"partitionUpperBound": "<upper_value_of_partition_column (optional) to decide the partition stride, not as data filter>",
"partitionLowerBound": "<lower_value_of_partition_column (optional) to decide the partition stride, not as data filter>"
}
}
映射数据流属性
在映射数据流中转换数据时,可以从Azure Database for PostgreSQL读取和写入表。 有关详细信息,请参阅映射数据流中的源转换和汇流转换。 可以选择使用Azure Database for PostgreSQL数据集或内联数据集作为源和接收器类型。
注释
目前,映射数据流中Azure Database for PostgreSQL连接器的 V1 和 V2 版本仅支持基本身份验证。
源转换
下表列出了Azure Database for PostgreSQL源支持的属性。 你可以在“源选项”选项卡中编辑这些属性。
| 名称 | 描述 | 必需 | 允许的值 | 数据流脚本属性 |
|---|---|---|---|---|
| 表 | 如果你选择“表”作为输入,则数据流会从数据集中指定的表提取所有数据。 | 否 | - |
(仅适用于内联数据集) 表名称 |
| 查询 | 如果你选择“查询”作为输入,请指定一个用来从源提取数据的 SQL 查询,这将替代在数据集中指定的任何表。 使用查询是一个好方法,它可以减少用于测试或查找的行数。 不支持 Order By 子句,但可以设置完整的 SELECT FROM 语句。 还可以使用用户定义的表函数。 select * from udfGetData() 是 SQL 中的 UDF,返回可在数据流中使用的表。 查询示例: select * from mytable where customerId > 1000 and customerId < 2000 或 select * from "MyTable"。 请注意,在 PostgreSQL 中,如果未加引号,则实体名称不区分大小写。 |
否 | 字符串 | 查询 |
| 架构名称 | 如果选择“存储过程”作为输入,请指定存储过程的架构名称,或选择“刷新”以请求服务发现架构名称。 | 否 | 字符串 | 模式名称 |
| 存储过程 | 如果选择“存储过程”作为输入,请指定要从源表读取数据的存储过程的名称,或选择“刷新”以请求服务发现过程名称。 | 是(如果选择“存储过程”作为输入) | 字符串 | 过程名称 |
| 过程参数 | 如果选择“存储过程”作为输入,请按过程中设置的顺序为存储过程指定任何输入参数,或者选择“导入”以使用窗体 @paraName 导入所有过程参数。 |
否 | 数组 | 输入 |
| 批大小 | 指定批大小,以将大型数据分成多个批。 | 否 | 整数 | 批处理大小 |
| 隔离级别 | 选择下列隔离级别之一: - 读取已提交的内容 - 读取未提交的内容(默认) - 可重复的读取 - 可序列化 - 无(忽略隔离级别) |
否 | READ_COMMITTED(读取已提交) READ_UNCOMMITTED(读未提交) 可重复读 可序列化 无 |
隔离级别 |
Azure Database for PostgreSQL源脚本示例
将Azure Database for PostgreSQL用作源类型时,关联的数据流脚本为:
source(allowSchemaDrift: true,
validateSchema: false,
isolationLevel: 'READ_UNCOMMITTED',
query: 'select * from mytable',
format: 'query') ~> AzurePostgreSQLSource
接收器转换
下表列出了Azure Database for PostgreSQL接收器支持的属性。 可以在“Sink 选项”选项卡中编辑这些属性。
| 名称 | 描述 | 必需 | 允许的值 | 数据流脚本属性 |
|---|---|---|---|---|
| 更新方法 | 指定数据库目标上允许哪些操作。 默认设置为仅允许插入。 若要更新、插入或删除行,需要进行更改行转换来将要执行这些操作的行进行标记。 |
是 |
true 或 false |
可删除的 insertable updateable 可更新插入的 |
| 键列 | 对于更新、插入和删除操作,必须设置键列以确定要修改的行。 作为键选取的列名称将用作后续更新、更新插入和删除的一部分。 因此,你必须选取存在于接收器映射中的列。 |
否 | 数组 | 密钥 |
| 跳过写入键列 | 如果你不希望将值写入到键列,请选择“跳过写入键列”。 | 否 |
true 或 false |
skipKeyWrites |
| 表操作 | 确定是否在写入之前重新创建或删除目标表中的所有行。 - 注意:不会对表执行任何操作。 - 重新创建:删除并重新创建表。 动态创建新表时是必需的。 - 截断:删除目标表中的所有行。 |
否 |
true 或 false |
重新创造 截断 |
| 批大小 | 指定每批中写入的行数。 较大的批大小可提高压缩比并改进内存优化,但在缓存数据时可能会导致内存不足异常。 | 否 | 整数 | 批处理大小 |
| 选择用户 DB 架构 | 默认情况下,将在接收器架构下创建临时表作为暂存方式。 或者可以取消选中 “使用接收器架构 ”选项,而是指定一个架构名称,在该架构名称下,数据工厂会创建一个临时表来加载上游数据,并在完成后自动清理它们。 请确保已在数据库中创建表权限,并更改对架构的权限。 | 否 | 字符串 | 临时架构名称 |
| 预处理和后处理 SQL 脚本 | 指定在将数据写入接收器数据库之前(预处理)和之后(后处理)会执行的多行 SQL 脚本。 | 否 | 字符串 | preSQLs postSQLs |
提示
- 将包含多个命令的单批脚本拆分为多个批处理。
- 只有返回简单更新计数的数据定义语言 (Data Definition Language, DDL) 和数据操作语言 (Data Manipulation Language, DML) 语句可作为批处理的一部分运行。 在执行批量操作中了解详情
启用增量提取:使用此选项告知 ADF 仅处理自上次执行管道以来已更改的行。
增量日期列:使用增量提取功能时,必须选择要用作源表中水印的日期/时间或数字列。
从头开始读取:使用增量提取设置此选项会指示 ADF 在首次执行启用增量提取的管道时读取所有行。
Azure Database for PostgreSQL汇聚脚本示例
将Azure Database for PostgreSQL用作接收器类型时,关联的数据流脚本为:
IncomingStream sink(allowSchemaDrift: true,
validateSchema: false,
deletable:false,
insertable:true,
updateable:true,
upsertable:true,
keys:['keyColumn'],
format: 'table',
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> AzurePostgreSqlSink
脚本活动
重要
脚本活动仅在版本 2.0 连接器中受支持。
重要
不支持使用输出参数的多查询语句。 建议将任何输出查询拆分为相同或不同脚本活动中的单独脚本块。
不支持使用位置参数的多查询语句。 建议将任何位置查询拆分为相同或不同脚本活动中的单独脚本块。
有关脚本活动的详细信息,请参阅 脚本活动。
查找活动属性
有关属性的详细信息,请参阅查找活动。
升级 Azure Database for PostgreSQL 连接器
在“编辑链接服务”页中,在“版本”下选择 2.0,并通过引用链接服务属性版本 2.0 配置链接服务。
相关内容
有关复制活动支持作为源和接收器的数据存储的列表,请参阅受支持的数据存储。