共用方式為


使用 Azure Data Factory 或 Synapse Analytics 在適用於 PostgreSQL 的 Azure 資料庫中複製和轉換資料

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用

本文概述如何在 Azure Data Factory 和 Synapse Analytics 管線中使用「複製活動」,從適用於 PostgreSQL 的 Azure 資料庫複製數據。 此外,如何使用數據流來轉換適用於 PostgreSQL 的 Azure 資料庫中的數據。 若要深入了解,請閱讀 Azure Data FactorySynapse Analytics 的介紹文章。

這很重要

適用於 PostgreSQL 的 Azure 資料庫 2.0 版提供改良的原生適用於 PostgreSQL 的 Azure 資料庫支援。 如果您在解決方案中使用適用於PostgreSQL的 Azure 資料庫 1.0 版,建議您儘早 升級適用於 PostgreSQL 的 Azure 資料庫連接器

此連接器是專用於適用於 PostgreSQL 的 Azure 資料庫服務。 若要從位於內部部署或雲端的一般 PostgreSQL 資料庫複製資料,請使用 PostgreSQL 連接器 (部分機器翻譯)。

支援的功能

下列功能支援此適用於 PostgreSQL 的 Azure 資料庫連接器:

支援的功能 紅外線 受控私人端點
複製活動 (來源/接收) (1) (2)
對應資料流 (來源/接收) (1)
查閱活動 (1) (2)

① Azure 整合執行階段 ② 自我裝載整合執行階段

這三項活動適用於 PostgreSQL 的 Azure 資料庫 單一伺服器彈性伺服器,以及 適用於 PostgreSQL 的 Azure Cosmos DB

這很重要

適用於 PostgreSQL 的 Azure 資料庫單一伺服器將於 2025 年 3 月 28 日淘汰。 依該日期移轉至彈性伺服器。 如需移轉指引,請參閱 這篇文章常見問題

開始使用

若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立連結到適用於 PostgreSQL 的 Azure 資料庫的服務

使用下列步驟,在 Azure 入口網站 UI 建立連結到適用於 PostgreSQL 的 Azure 資料庫的服務。

  1. 瀏覽至 Azure Data Factory 或 Synapse 工作區中的 [管理] 索引標籤,並選取 [連結服務],然後選取 [新增]:

  2. 搜尋 PostgreSQL,然後選取適用於 PostgreSQL 的 Azure 資料庫連接器。

    選取適用於 PostgreSQL 的 Azure 資料庫連接器。

  3. 設定服務詳細資料,測試連線,然後建立新的連結服務。

    設定適用於 PostgreSQL 的 Azure 資料庫連結服務。

連接器設定詳細資料

下列各節提供屬性的相關詳細資料,這些屬性是用來定義適用於 PostgreSQL 的 Azure 資料庫連接器專屬的 Data Factory 實體。

連結服務屬性

適用於 PostgreSQL 的 Azure 資料庫連接器 2.0 版支援傳輸層安全性 (TLS) 1.3 和多個安全套接字層 (SSL) 模式。 請參閱 本節, 從 1.0 版升級您的 Azure SQL Database 連接器版本。 如需屬性詳細資料,請參閱對應的章節。

2.0 版

當您套用 2.0 版時,適用於 PostgreSQL 的 Azure 資料庫連結服務支援下列屬性:

屬性 描述 必要
類型 類型屬性必須設為:AzurePostgreSql 是的
版本 您指定的版本。 該值為 2.0 是的
驗證類型 從基本、服務主體、系統指派的受控識別或使用者指派的受控識別驗證類型選取 是的
伺服器 指定適用於 PostgreSQL 的 Azure 資料庫執行所在的主機名和選擇性埠。 是的
連接埠 Azure 資料庫 PostgreSQL 伺服器的 TCP 連接埠。 預設值是 5432
資料庫 連接到的 Azure PostgreSQL 資料庫的名稱。 是的
SSL 模式 (sslMode) 根據伺服器支援,控制是否使用 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 所使用的內部緩衝區大小。 如果從資料庫傳輸大型值,增加可能會改善效能。
時區 取得或設定會話時區。
編碼 用於取得或設定 .NET 編碼,以編碼或解碼 PostgreSQL 字串資料。

基本身份驗證

屬性 描述 必要
用戶名 要連線的使用者名稱。 如果使用 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 中的其他資源進行驗證時,代表服務。 您可以針對適用於 PostgreSQL 驗證的 Azure 資料庫使用此受控識別。 指定的處理站或 Synapse 工作區可以使用此身分識別從您的資料庫存取資料,或來回複製您資料庫中的資料。

若要使用系統指派的受控識別,請遵循下列步驟:

  1. 數據處理站或 Synapse 工作區可以與系統指派的受控識別相關聯。 深入了解, 建立系統指派的受控身分

  2. 具有系統指派受控識別 On 的 PostgreSQL Azure 數據。

    適用於PostgreSQL伺服器的 Azure 資料庫中系統指派受控識別設定的螢幕快照。

  3. 在您的 Azure Database for PostgreSQL 資源的安全性

    1. 選取 驗證

    2. 僅選取 Microsoft Entra 驗證PostgreSQL 和 Microsoft Entra 驗證 做為驗證方法。

    3. 選取 [+ 新增 Microsoft Entra 系統管理員]

    4. 將 Azure Data Factory 資源的系統指派受控識別新增為其中一個 Microsoft Entra Administrators

      在 Azure 資料庫(適用於 PostgreSQL)的設定中,新增系統分配的受管理身分的螢幕截圖。

  4. 設定 Azure 的 PostgreSQL 資料庫連結服務。

範例:

{
    "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 工作區可以與 使用者指派的受控識別 相關聯,以在向 Azure 中的其他資源進行驗證時,代表服務。 您可以針對適用於 PostgreSQL 驗證的 Azure 資料庫使用此受控識別。 指定的處理站或 Synapse 工作區可以使用此身分識別從您的資料庫存取資料,或來回複製您資料庫中的資料。

若要使用使用者指派的受控識別驗證,除了上一節所述的一般屬性外,請指定下列屬性:

屬性 描述 必要
資格證明 將使用者指派的受控身分識別指定為認證物件。 是的

您也需要遵循下列步驟:

  1. 請務必在 Azure 入口網站上建立 使用者指派的受控識別 資源。 若要深入瞭解,請移至 管理使用者指派的受控識別

  2. 使用者指定的受控身份 指派給用於 PostgreSQL 的 Azure 資料庫資源

    1. 在適用於 PostgreSQL 的 Azure 資料庫伺服器資源中,於 [安全性] 底下

    2. 選取 驗證

    3. 確認 Authentication 方法是否 只Microsoft Entra 驗證PostgreSQL 和 Microsoft Entra 驗證

    4. 選取 [+ 新增 Microsoft Entra 管理員] 連結,然後選取您指派的管理身分識別

      適用於 PostgreSQL 伺服器的 Azure 資料庫中使用者指派受控識別設定的螢幕快照。

  3. 使用者指派的受控識別 分配給 Azure Data Factory 資源

    1. 選取 [設定 ],然後選取 [受控識別]

    2. 使用者指派索引標籤下,選擇+ 新增連結,然後選擇您的使用者管理識別。

      Azure Data Factory 資源中使用者指派受控識別設定的螢幕快照。

  4. 設定 Azure 的 PostgreSQL 資料庫連結服務。

範例:

{
    "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"
            }
        }
    }
}

服務主體帳戶驗證

屬性 描述 必要
用戶名 服務主體的顯示名稱 是的
租戶 PostgreSQL 的 Azure 資料庫伺服器所在的租戶 是的
服務主體識別碼 服務主體的應用程式識別碼 是的
服務主體憑證類型 (servicePrincipalCredentialType) 選取服務主體憑證或服務主體金鑰是否為所需的驗證方法
- ServicePrincipalCert:設定為服務主體憑證的服務主體憑證。
- ServicePrincipalKey:設為用於服務主體密鑰驗證的服務主體密鑰。
是的
服務主體金鑰 用戶端秘密值。 選取服務主體金鑰時使用 是的
Azure 雲端類型 選取適用於 PostgreSQL 的 Azure 資料庫伺服器的 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,
            "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>"
        }
    }
}

1.0 版

當您套用 1.0 版時,適用於 PostgreSQL 的 Azure 資料庫連結服務支援下列屬性:

屬性 描述 必要
類型 類型屬性必須設為:AzurePostgreSql 是的
版本 您指定的版本。 該值為 1.0 是的
Connection String (連接字串) 用於連接到 PostgreSQL 的 Azure 資料庫的 Npgsql 連接字串。
您也可以將密碼放在 Azure Key Vault 中,並從連接字串中提取 password 設定。 請參閱下列範例和在 Azure Key Vault 中儲存認證 (部分機器翻譯),以獲得更多詳細資料。
是的
連接方式 此屬性代表用來連線到資料存放區的整合執行階段。 您可以使用 Azure Integration Runtime 或「自我裝載 Integration Runtime」(如果您的資料存放區位於私人網路中)。 如果未指定,就會使用預設的 Azure Integration Runtime。

一般的連接字串為 host=<server>.postgres.database.azure.com;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.azure.com;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.azure.com;database=<database>;port=<port>;uid=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        }
    }
}

資料集屬性

如需定義資料集的區段和屬性完整清單,請參閱資料集。 本節提供適用於 PostgreSQL 的 Azure 資料庫資料集的支援屬性清單。

若要從適用於 PostgreSQL 的 Azure 資料庫複製資料,將資料集的類型屬性設定為 AzurePostgreSqlTable。 以下是支援的屬性:

屬性 描述 必要
類型 數據集的 type 屬性必須設定為 AzurePostgreSqlTable 是的
架構 架構的名稱。 否 (如果已指定活動來源中的「查詢」)
表格 資料表/檢視的名稱。 否 (如果已指定活動來源中的「查詢」)
資料表名稱 數據表的名稱。 支援此屬性是基於回溯相容性。 對於新的工作負載,請使用 schematable 否 (如果已指定活動來源中的「查詢」)

範例:

{
    "name": "AzurePostgreSqlDataset",
    "properties": {
        "type": "AzurePostgreSqlTable",
        "linkedServiceName": {
            "referenceName": "<AzurePostgreSql linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "schema": "<schema_name>",
            "table": "<table_name>"
        }
    }
}

複製活動屬性

如需可用來定義活動的區段和屬性完整清單,請參閱管線和活動。 本節提供適用於 PostgreSQL 的 Azure 資料庫來源所支援的屬性清單。

以適用於 PostgreSQL 的 Azure 資料庫作為來源

若要從適用於 PostgreSQL 的 Azure 資料庫複製資料,將複製活動中的來源類型設定為 AzurePostgreSqlSource。 複製活動的 source 區段支援下列屬性:

屬性 描述 必要
類型 複製活動來源的類型屬性必須設為 AzurePostgreSqlSource 是的
查詢 使用自訂 SQL 查詢來讀取資料。 例如:SELECT * FROM mytableSELECT * FROM "MyTable"。 請注意,在 PostgreSQL 中,如果未加上引號,實體名稱會被視為不區分大小寫。 否 (如果已指定資料集的 tableName 屬性)
queryTimeout 終止嘗試執行命令並產生錯誤之前的等候時間,預設值為120分鐘。 如果為此屬性設定參數,允許的值是時間範圍,例如 “02:00:00” (120 分鐘)。 如需詳細資訊,請參閱 CommandTimeout
分區選項 指定用來從 Azure SQL Database 載入資料的資料分割選項。
允許的值為:None (預設值)、PhysicalPartitionsOfTableDynamicRange
啟用分割區選項後 (即不是 None),從 Azure SQL Database 並行載入資料的平行處理程度,會由複製活動的 parallelCopies 設定所控制。
分割設定 指定資料分割的設定群組。
當分割選項不是 None 時套用。
partitionSettings 之下:
分區名稱 需要複製的實體分割區清單。
當分割選項是 PhysicalPartitionsOfTable 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?AdfTabularPartitionName。 如需範例,請參閱平行複製適用於 PostgreSQL 的 Azure 資料庫一節。
分區欄位名稱 整數類型或日期/日期時間類型 (intsmallintbigintdatetimestamp without time zonetimestamp with time zonetime without time zone) 指定來源資料行的名稱,供平行複製的範圍分割使用。 如果未指定,則會自動偵測資料表的主索引鍵作為分割資料行。
當分割選項是 DynamicRange 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?AdfRangePartitionColumnName 。 如需範例,請參閱平行複製適用於 PostgreSQL 的 Azure 資料庫一節。
分區上限 要拷貝資料的數據分區欄位最大值。
當分割選項是 DynamicRange 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?AdfRangePartitionUpbound。 如需範例,請參閱平行複製適用於 PostgreSQL 的 Azure 資料庫一節。
partitionLowerBound 要複製資料時所需的分割欄最小值。
當分割選項是 DynamicRange 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?AdfRangePartitionLowbound。 如需範例,請參閱平行複製適用於 PostgreSQL 的 Azure 資料庫一節。

範例:

"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>"
            }
        }
    }
]

以適用於 PostgreSQL 的 Azure 資料庫作為接收器

若要將資料複製到適用於 PostgreSQL 的 Azure 資料庫,複製活動 sink 區段中支援下列屬性:

屬性 描述 必要
類型 複製活動接收的 type 屬性必須設定為 AzurePostgreSqlSink 是的
preCopyScript 每次執行中,在將資料寫入到適用於 PostgreSQL 的 Azure DB 之前,先指定一個供「複製活動」執行的 SQL 查詢。 您可以使用此屬性來清除預先載入的資料。
writeMethod 用來將資料寫入適用於 PostgreSQL 的 Azure 資料庫的方法。
允許的值為:CopyCommand (預設,其效能較佳)、BulkInsert
批次寫入大小 (writeBatchSize) 每個批次載入適用於 PostgreSQL 的 Azure 資料庫的資料列數目。
允許的值為代表資料列數目的整數。
否 (預設為 1,000,000)
寫入批處理超時 在逾時前等待批次插入作業完成的時間。
允許的值為:時間範圍字串。 範例是 00:30:00 (30 分鐘)。
否 (預設為 00:30:00)

範例:

"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
            }
        }
    }
]

從適用於 PostgreSQL 的 Azure 資料庫平行複製資料

在複製活動中,適用於 PostgreSQL 的 Azure 資料庫連接器提供內建的資料分割,以平行複製資料。 您可以在複製活動的 [來源] 索引標籤上找到資料分割選項。

分割選項的螢幕擷取畫面

當您啟用分割複本時,複製活動會平行查詢適用於 PostgreSQL 的 Azure 資料庫來源,以依分割區來載入資料。 平行程度由複製活動的 parallelCopies 設定所控制。 例如,如果您將 parallelCopies 設定為四,服務會根據您指定的分割區選項和設定,同時產生並執行四個查詢,而每個查詢會從適用於 PostgreSQL 的 Azure 資料庫資料庫取擷取一部分資料。

建議您啟用與數據分割的平行複製,特別是當您從適用於 PostgreSQL 的 Azure 資料庫載入大量數據時。 以下針對各種情節的建議設定。 將數據複製到檔案型數據存放區時,建議將資料夾寫入為多個檔案(僅指定資料夾名稱),在此情況下效能優於寫入單一檔案。

案例 建議的設定
使用實體分割區從大型資料表完整載入。 分割選項:資料表的實體分割區。

在執行期間,服務會自動偵測實體分割區,並依分割區複製資料。
從大型資料表完整載入,不含實體分割區,同時在資料分割時包含整數資料行。 分割選項:動態範圍分割。
分割資料行:指定用來分割資料的資料行。 如果未指定,則會使用主索引鍵資料行。
使用自訂查詢載入大量資料,包含實體分割區。 分割選項:資料表的實體分割區。
查詢SELECT * FROM ?AdfTabularPartitionName WHERE <your_additional_where_clause>
數據分割名稱:指定要從中複製數據的一或多個分割區名稱。 如果未指定,服務會自動偵測您在 PostgreSQL 資料集中指定的資料表上的實體分割區。

在執行期間,服務會以實際的分割區名稱取代 ?AdfTabularPartitionName,並傳送至適用於 PostgreSQL 的 Azure 資料庫。
使用自訂查詢載入大量資料,不含實體分割區,同時包含整數資料行用於資料分割。 分割選項:動態範圍分割。
查詢SELECT * FROM ?AdfTabularPartitionName WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>
分割資料行:指定用來分割資料的資料行。 您可以按照整數或日期/日期時間資料類型的資料行來分割。
分割上限分割下限:指定您是否想要篩選分割資料行,只取出下限範圍和上限範圍之間的資料。

在執行期間,服務會將 ?AdfRangePartitionColumnName?AdfRangePartitionUpbound?AdfRangePartitionLowbound 取代為每個分割區的實際資料行名稱和值範圍,並傳送至適用於 PostgreSQL 的 Azure 資料庫。
例如,如果您的分割區數據行 「ID」 設定為下限為 1,上限設定為 80,且平行複製設定為 4,則服務會依四個分割區擷取數據。 識別碼的範圍分別為 [1,20]、[21, 40]、[41, 60] 和 [61, 80]。

使用分割區選項載入資料的最佳做法:

  1. 選擇獨特的資料行作為分割資料行 (例如主索引鍵或唯一索引鍵) 以避免資料扭曲。
  2. 如果資料表有內建分割區,請使用分割選項「資料表的實體分割區」,以獲得更佳的效能。
  3. 如果您使用 Azure Integration Runtime 來複製資料,您可以設定較大的「資料整合單位 (DIU)」(>4) 來利用更多運算資源。 檢查該處適用的案例。
  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>"
    }
}

對應資料流程屬性

在對應資料流程中轉換資料時,您可以從適用於 PostgreSQL 的 Azure DB 分析讀取和寫入資料表。 如需詳細資訊,請參閱對應資料流程中的來源轉換接收轉換。 您可以選擇使用適用於 PostgreSQL 的 Azure 資料庫資料集或內嵌資料集做為來源和接收器類型。

來源轉換

下表列出適用於 PostgreSQL 的 Azure 資料庫來源所支援的屬性。 您可以在 [來源選項] 索引標籤中編輯這些屬性。

名稱 描述 必要 允許的值 資料流程指令碼屬性
如果您選取 [資料表] 作為輸入,資料流程會從資料集中指定的資料表擷取所有資料。 - (僅限內嵌資料集)
資料表名稱
查詢 如果您選取 [查詢] 作為輸入,請指定要從來源擷取資料的 SQL 查詢,這會覆寫您在資料集中指定的任何資料表。 使用查詢也是減少測試或查閱資料行的絕佳方式。

不支援 Order By 子句,但您可以設定完整的 SELECT FROM 語句。 您也可使用使用者定義的資料表函數。 select * from udfGetData() 是 SQL 中的 UDF,您可以在資料流程中用於傳回資料表。
查詢範例:select * from mytable where customerId > 1000 and customerId < 2000select * from "MyTable"。 請注意,在 PostgreSQL 中,如果未加上引號,實體名稱會被視為不區分大小寫。
繩子 查詢
結構描述名稱 如果您選取 [預存程序] 作為輸入,請指定預存程序的結構描述名稱,或選取 [重新整理] 以要求服務探索結構描述名稱。 繩子 架構名稱
預存程序 如果您選取 [預存程序] 作為輸入,請指定要從來源資料表讀取資料的預存程序名稱,或選取 [重新整理] 以要求服務探索程序名稱。 是 (如果您選取 [預存程序] 作為輸入) 繩子 程序名稱
程序參數 如果您選取 [預存程序] 作為輸入,請指定儲存程序的輸入參數 (依照程序中設定的順序),或選取 [匯入] 以使用表單 @paraName 來匯入所有程序參數。 陣列 輸入
批次大小 指定批次大小,以將大量資料分成多個批次。 整數 批次大小
隔離等級 選擇下列其中一個隔離等級:
- 讀取認可
- 讀取未認可 (預設值)
- 可重複讀取
- 可序列化
- 無 (忽略隔離等級)
READ_COMMITTED
READ_UNCOMMITTED
重複讀取 (REPEATABLE_READ)
可序列
沒有
隔離級別

適用於 PostgreSQL 的 Azure 資料庫來源指令碼範例

您使用適用於 PostgreSQL 的 Azure 資料庫做為來源類型時,相關聯的資料流程指令碼為:

source(allowSchemaDrift: true,
    validateSchema: false,
    isolationLevel: 'READ_UNCOMMITTED',
    query: 'select * from mytable',
    format: 'query') ~> AzurePostgreSQLSource

接收轉換

下表列出適用於 PostgreSQL 的 Azure 資料庫接收器所支援的屬性。 您可以在 [接收器選項] 索引標籤中編輯這些屬性。

名稱 描述 必要 允許的值 資料流程指令碼屬性
更新方法 指定您的資料庫目的地所允許的作業。 預設僅允許插入。
若要更新、upsert 或刪除資料列,必須使用 [變更資料列轉換] 來標記這些動作的資料列。
是的 truefalse 可刪除
insertable
updateable
可更新或插入的
索引鍵資料行 針對新增、更新與刪除,必須設定主鍵欄,以判斷要改變的資料列。
您選擇作為索引鍵的欄位名稱將作為後續更新、合併和刪除操作的一部分使用。 因此,您必須挑選存在於接收器對應中的資料行。
陣列 金鑰
略過寫入索引鍵資料行 如果您不想將值寫入索引鍵資料行,請選取 [跳過寫入索引鍵資料行]。 truefalse skipKeyWrites
資料表動作 決定在寫入之前,是否要重新建立或移除目的地數據表中的所有數據列。
- :不會對數據表執行任何動作。
- 重新建立:數據表會被刪除並重新建立。 如果要動態建立新的資料表,則為必要。
- 截斷:移除目標數據表中的所有數據列。
truefalse 重新創造
截短
批次大小 指定要在每個批次中寫入的資料列數目。 較大的批次大小會改善壓縮和記憶體優化,但會導致在快取資料時發生記憶體例外狀況的風險。 整數 批次大小
選取使用者資料庫結構描述 根據預設,臨時表會在承接結構下建立為中繼。 或者,您可以取消核取使用目的端架構選項,並改為指定架構名稱,以便讓 Data Factory 建立暫存表來載入上游數據,並在完成時自動清理。 請確定您的資料庫中具有建立資料表的權限,以及改變結構描述的權限。 繩子 stagingSchemaName
前置和後置 SQL 指令碼 指定多行 SQL 腳本,在數據寫入至目的資料庫之前(前置處理)和之後(後續處理)執行。 繩子 preSQLs
postSQLs

提示

  1. 將單一批次腳本與多個命令分割成多個批次。
  2. 只有傳回簡單更新計數的資料定義語言 (DDL) 和資料操作語言 (DML) 陳述式可以當作批次的一部份來執行。 若要深入了解,請參閱執行批次作業
  • 啟用累加擷取:使用此選項告訴ADF只處理自上次執行管線後變更的數據列。

  • 累加資料行:使用累加擷取功能時,您必須選擇想要在來源資料表中用作浮水印的日期/時間或數值資料行。

  • 從頭開始讀取:使用累加擷取設定此選項會指示ADF在第一次執行管線時讀取所有數據列,並開啟累加擷取。

適用於 PostgreSQL 的 Azure 資料庫接收器指令碼範例

您使用適用於 PostgreSQL 的 Azure 資料庫做為接收器類型時,相關聯的資料流程指令碼為:

IncomingStream sink(allowSchemaDrift: true,
    validateSchema: false,
    deletable:false,
    insertable:true,
    updateable:true,
    upsertable:true,
    keys:['keyColumn'],
    format: 'table',
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> AzurePostgreSqlSink

查閱活動屬性

如需屬性的詳細資訊,請參閱查閱活動

升級適用於 PostgreSQL 的 Azure 資料庫連接器

[編輯鏈接服務] 頁面中,選取 [版本] 底下的 [2.0],並參考 [鏈接的服務屬性 2.0] 來設定連結服務。

如需複製活動支援作為來源和接收器的資料存放區清單,請參閱支援的資料存放區