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

適用於:Azure Data Factory Azure Synapse Analytics

提示

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

本文章概述如何使用 Azure Data Factory 或 Synapse Analytics 管道中的「複製活動」,在適用於 MySQL 的 Azure 資料庫中來回複製資料,以及如何使用資料流程在適用於 MySQL 的 Azure 資料庫中轉換資料。 若要深入了解,請閱讀 Azure Data FactorySynapse Analytics 的介紹文章。

此連接器專用於

若要從位於內部部署或雲端的一般 MySQL 資料庫複製資料,請使用 MySQL 連接器

必要條件

本快速入門需要下列資源和設定作為起點:

  • 適用於 MySQL 單一伺服器或 MySQL 彈性伺服器的現有 Azure 資料庫,具有公用存取或私人端點。
  • 在 MySQL 伺服器的網路頁面中,啟用 [允許從 Azure 內的任何 Azure 服務到此伺服器的公用存取]。 如此您便能使用 Data Factory Studio。

支援的功能

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

支援的功能 IR 受控私人端點
複製活動 (來源/接收) ① ②
對應資料流 (來源/接收)
查閱活動 ① ②

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

開始使用

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

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

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

  1. 前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 MySQL 並選取適用於 MySQL 的 Azure 資料庫連接器。

    Select the Azure Database for MySQL connector.

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

    Configure a linked service to Azure Database for MySQL.

連接器設定詳細資料

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

連結服務屬性

以下是針對適用於 MySQL 的 Azure 資料庫已連結服務支援的屬性:

屬性 描述 必要
type type 屬性必須設為:AzureMySql Yes
connectionString 指定連線到適用於 MySQL 的 Azure 資料庫執行個體所需的資訊。
您也可以將密碼放在 Azure Key Vault 中,並從連接字串中提取 password 組態。 請參閱下列範例和在 Azure Key Vault 中儲存認證一文中的更多詳細資料。
Yes
connectVia 用於連線到資料存放區的 Integration Runtime。 您可以使用 Azure Integration Runtime 或「自我裝載 Integration Runtime」(如果您的資料存放區位於私人網路中)。 如果未指定,就會使用預設的 Azure Integration Runtime。 No

一般的連接字串為 Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;PWD=<password>。 您可以根據您的案例設定更多屬性:

屬性 說明 選項。 必要
SSLMode 此選項指定驅動程式在連線到 MySQL 時,是否使用 TLS 加密和驗證。 例如 SSLMode=<0/1/2/3/4> DISABLED (0) / PREFERRED (1) (預設) / REQUIRED (2) / VERIFY_CA (3) / VERIFY_IDENTITY (4) No
UseSystemTrustStore 此選項指定是否使用來自系統信任存放區或來自指定 PEM 檔案的 CA 憑證。 例如 UseSystemTrustStore=<0/1>; 啟用 (1) / 停用 (0) (預設) No

範例:

{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;PWD=<password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

範例:在 Azure Key Vault 中儲存密碼

{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

資料集屬性

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

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

屬性 描述 必要
type 資料集的 type 屬性必須設定為:AzureMySqlTable Yes
tableName MySQL 資料庫中的資料表名稱。 否 (如果已指定活動來源中的「查詢」)

範例

{
    "name": "AzureMySQLDataset",
    "properties": {
        "type": "AzureMySqlTable",
        "linkedServiceName": {
            "referenceName": "<Azure MySQL linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "<table name>"
        }
    }
}

複製活動屬性

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

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

若要從適用於 MySQL 的 Azure 資料庫複製資料,複製活動 source 區段中支援下列屬性:

屬性 描述 必要
type 複製活動來源的 type 屬性必須設定為:AzureMyTableSource Yes
query 使用自訂 SQL 查詢來讀取資料。 例如: "SELECT * FROM MyTable" 否 (如果已指定資料集中的 "tableName")
queryCommandTimeout 查詢要求逾時之前的等待時間。預設值為 120 分鐘 (02:00:00) No

範例:

"activities":[
    {
        "name": "CopyFromAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Azure MySQL input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureMySqlSource",
                "query": "<custom query e.g. SELECT * FROM MyTable>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

適用於 MySQL 的 Azure 資料庫做為接收器

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

屬性 描述 必要
type 複製活動接收的 type 屬性必須設定為:AzureMySqlSink Yes
preCopyScript 指定一個供「複製活動」在每次執行時將資料寫入到適用於 MySQL 的 Azure DB 前執行的 SQL 查詢。 您可以使用此屬性來清除預先載入的資料。 No
writeBatchSize 緩衝區大小達到 writeBatchSize 時,會將資料插入適用於 MySQL 的 Azure DB 資料表中。
允許的值是代表資料列數目的整數。
否 (預設值為 10000)
writeBatchTimeout 在逾時前等待批次插入作業完成的時間。
允許的值為時間範圍。 範例是 00:30:00 (30 分鐘)。
否 (預設值為 00:00:30)

範例:

"activities":[
    {
        "name": "CopyToAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure MySQL output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureMySqlSink",
                "preCopyScript": "<custom SQL script>",
                "writeBatchSize": 100000
            }
        }
    }
]

對應資料流程屬性

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

來源轉換

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

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

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

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

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

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

接收轉換

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

名稱 描述 必要 允許的值 資料流程指令碼屬性
更新方法 指定您的資料庫目的地所允許的作業。 預設僅允許插入。
若要更新、upsert 或刪除資料列,必須使用 [變更資料列轉換] 來標記這些動作的資料列。
Yes truefalse deletable
insertable
updateable
upsertable
索引鍵資料行 對於更新、更新插入和刪除,必須設定索引鍵資料行以決定要變更哪一個資料列。
您挑選作為索引鍵的資料行名稱,將會在後續更新、更新插入、刪除時使用。 因此,您必須挑選存在於接收器對應中的資料行。
No 陣列 金鑰
略過寫入索引鍵資料行 如果您不想將值寫入索引鍵資料行,請選取 [跳過寫入索引鍵資料行]。 No truefalse skipKeyWrites
資料表動作 決定在寫入之前,是否要重新建立或移除目的地資料表中的所有資料列。
- :不會對資料表執行任何動作。
- 重新建立:將會捨棄並重新建立資料表。 如果要動態建立新的資料表,則為必要。
- 截斷:將會移除目標資料表中的所有資料列。
No truefalse recreate
truncate
批次大小 指定要在每個批次中寫入的資料列數目。 較大的批次大小會改善壓縮和記憶體優化,但會導致在快取資料時發生記憶體例外狀況的風險。 No 整數 batchSize
前置和後置 SQL 指令碼 指定將在寫入至您的接收器資料庫之前 (前置處理) 和之後 (後置處理) 將執行的多行 SQL 指令碼。 No String preSQLs
postSQLs

提示

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

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

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

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

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

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

查閱活動屬性

若要了解屬性的詳細資料,請參閱查閱活動

適用於 MySQL 的 Azure 資料庫的資料類型對應

從適用於 MySQL 的 Azure 資料庫複製資料時,會使用下列對應從 MySQL 資料類型對應到服務內部使用的過渡期資料類型。 請參閱結構描述和資料類型對應,以了解複製活動如何將來源結構描述和資料類型對應至接收器。

適用於 MySQL 的 Azure 資料庫的資料類型 過渡期服務資料類型
bigint Int64
bigint unsigned Decimal
bit Boolean
bit(M), M>1 Byte[]
blob Byte[]
bool Int16
char String
date Datetime
datetime Datetime
decimal Decimal, String
double Double
double precision Double
enum String
float Single
int Int32
int unsigned Int64
integer Int32
integer unsigned Int64
long varbinary Byte[]
long varchar String
longblob Byte[]
longtext String
mediumblob Byte[]
mediumint Int32
mediumint unsigned Int64
mediumtext String
numeric Decimal
real Double
set String
smallint Int16
smallint unsigned Int32
text String
time TimeSpan
timestamp Datetime
tinyblob Byte[]
tinyint Int16
tinyint unsigned Int16
tinytext String
varchar String
year Int32

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