使用 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 Factory 和 Synapse Analytics 的介紹文章。
此連接器專用於
若要從位於內部部署或雲端的一般 MySQL 資料庫複製資料,請使用 MySQL 連接器。
必要條件
本快速入門需要下列資源和設定作為起點:
- 適用於 MySQL 單一伺服器或 MySQL 彈性伺服器的現有 Azure 資料庫,具有公用存取或私人端點。
- 在 MySQL 伺服器的網路頁面中,啟用 [允許從 Azure 內的任何 Azure 服務到此伺服器的公用存取]。 如此您便能使用 Data Factory Studio。
支援的功能
下列功能支援此適用於 MySQL 的 Azure 資料庫連接器:
支援的功能 | IR | 受控私人端點 |
---|---|---|
複製活動 (來源/接收) | 4.9 | |
對應資料流 (來源/接收) | 5 | |
查閱活動 | 4.9 |
① Azure 整合執行階段 ② 自我裝載整合執行階段
開始使用
若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:
使用 UI 建立對於適用於 MySQL 的 Azure 資料庫建立連結服務
使用下列步驟,在 Azure 入口網站 UI 中對於適用於 MySQL 的 Azure 資料庫建立連結服務。
前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:
搜尋 MySQL 並選取適用於 MySQL 的 Azure 資料庫連接器。
設定服務詳細資料,測試連線,然後建立新的連結服務。
連接器設定詳細資料
下列各節提供屬性的相關詳細資料,這些屬性是用來定義適用於 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 < 2000 或 select * 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 | true 或 false |
deletable insertable updateable upsertable |
索引鍵資料行 | 對於更新、更新插入和刪除,必須設定索引鍵資料行以決定要變更哪一個資料列。 您挑選作為索引鍵的資料行名稱,將會在後續更新、更新插入、刪除時使用。 因此,您必須挑選存在於接收器對應中的資料行。 |
No | 陣列 | 金鑰 |
略過寫入索引鍵資料行 | 如果您不想將值寫入索引鍵資料行,請選取 [跳過寫入索引鍵資料行]。 | No | true 或 false |
skipKeyWrites |
資料表動作 | 決定在寫入之前,是否要重新建立或移除目的地資料表中的所有資料列。 - 無:不會對資料表執行任何動作。 - 重新建立:將會捨棄並重新建立資料表。 如果要動態建立新的資料表,則為必要。 - 截斷:將會移除目標資料表中的所有資料列。 |
No | true 或 false |
recreate truncate |
批次大小 | 指定要在每個批次中寫入的資料列數目。 較大的批次大小會改善壓縮和記憶體優化,但會導致在快取資料時發生記憶體例外狀況的風險。 | No | 整數 | batchSize |
前置和後置 SQL 指令碼 | 指定將在寫入至您的接收器資料庫之前 (前置處理) 和之後 (後置處理) 將執行的多行 SQL 指令碼。 | No | String | preSQLs postSQLs |
提示
- 建議將含有多個命令的單一批次指令碼分成多個批次。
- 只有傳回簡單更新計數的資料定義語言 (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 |
相關內容
如需複製活動支援作為來源和接收器的資料存放區清單,請參閱支援的資料存放區。