Memindahkan data dari MySQL menggunakan Azure Data Factory
Catatan
Artikel ini berlaku untuk versi 1 dari Azure Data Factory. Jika Anda menggunakan versi layanan Azure Data Factory saat ini, lihat Konektor MySQL di V2.
Artikel ini menjelaskan cara menggunakan Aktivitas Penyalinan di Azure Data Factory untuk memindahkan data dari database MySQL lokal. Hai ini dibuat pada artikel Aktivitas Perpindahan Data, yang menyajikan gambaran umum tentang perpindahan data menggunakan aktivitas penyalinan.
Anda dapat menyalin data dari penyimpanan data MySQL lokal ke penyimpanan data sink yang didukung. Untuk daftar penyimpanan data yang didukung sebagai sink oleh aktivitas penyalinan, lihat tabel Penyimpanan data yang didukung. Pabrik data saat ini hanya mendukung pemindahan data dari penyimpanan data MySQL ke penyimpanan data lain, tetapi tidak untuk memindahkan data dari penyimpanan data lain ke penyimpanan data MySQL.
Prasyarat
Layanan Azure Data Factory mendukung koneksi ke sumber MySQL lokal menggunakan Gateway Manajemen Data. Lihat artikel memindahkan data antara lokasi lokal dan cloud untuk mempelajari tentang Gateway Manajemen Data dan untuk instruksi langkah demi langkah tentang cara menyiapkan gateway.
Gateway diperlukan meskipun database MySQL dihosting di Azure IaaS komputer virtual (VM). Anda dapat memasang gateway pada komputer virtual yang sama dengan penyimpanan data atau pada komputer virtual lain selama gateway bisa tersambung ke database.
Catatan
Lihat Memecahkan masalah gateway untuk tips tentang pemecahan masalah terkait koneksi/gateway.
Versi dan penginstalan yang didukung
Agar Gateway Manajemen Data tersambung ke Database MySQL, Anda perlu memasang MySQL Connector/NET untuk Microsoft Windows (versi antara 6.6.5 dan 6.10.7) pada sistem yang sama dengan Gateway Manajemen Data. Driver 32 bit ini kompatibel dengan Gateway Manajemen Data 64 bit. MySQL versi 5.1 dan yang lebih baru didukung.
Tip
Jika Anda mengalami kesalahan pada "Kegagalan Autentikasi karena pihak jarak jauh telah menutup aliran transportasi.", pertimbangkan untuk meningkatkan Konektor MySQL/NET ke versi yang lebih tinggi.
Memulai
Anda dapat membuat alur dengan aktivitas salin yang memindahkan data dari penyimpanan data Cassandra lokal dengan menggunakan alat/API yang berbeda.
- Cara termudah untuk membuat alur adalah dengan menggunakan Wizard Salin. Lihat Tutorial: Membuat alur menggunakan Wizard Salin untuk panduan singkat tentang membuat alur menggunakan Wizard Salin data.
- Anda juga dapat menggunakan alat berikut untuk membuat pipeline: Visual Studio, Azure PowerShell, template Azure Resource Manager, .NET API, dan REST API. Lihat Tutorial aktivitas penyalinan untuk instruksi langkah demi langkah guna membuat alur dengan aktivitas penyalinan.
Baik Anda menggunakan alat atau API, Anda melakukan langkah-langkah berikut untuk membuat alur yang memindahkan data dari penyimpanan data sumber ke penyimpanan data sink:
- Buat layanan tertaut untuk menautkan penyimpanan data input dan output ke pabrik data Anda.
- Buat kumpulan data untuk mewakili data input dan output untuk operasi salin.
- Buat jalur dengan aktivitas salinan yang mengambil set data sebagai input dan set data sebagai output.
Saat Anda menggunakan wizard, definisi JSON untuk entitas Data Factory ini (layanan tertaut, himpunan data, dan alur) secara otomatis dibuat untuk Anda. Saat Anda menggunakan alat/API (kecuali .NET API), Anda menentukan entitas Data Factory ini dengan menggunakan format JSON. Untuk sampel dengan definisi JSON untuk entitas Azure Data Factory yang digunakan untuk menyalin data dari penyimpanan data MySQL lokal, lihat di bagian contoh JSON: Menyalin data dari MySQL ke Azure Blob dari artikel ini.
Bagian berikut memberikan detail tentang properti JSON yang digunakan untuk menentukan entitas Azure Data Factory khusus untuk penyimpanan data MySQL:
Properti layanan tertaut
Tabel berikut ini menyediakan deskripsi untuk elemen JSON khusus untuk layanan tertaut MySQL.
| Properti | Deskripsi | Diperlukan |
|---|---|---|
| jenis | Jenis Properti harus diatur ke: OnPremisesMySql | Ya |
| server | Nama server MySQL. | Ya |
| database | Nama server MySQL. | Ya |
| schema | Nama skema dalam database. | Tidak |
| authenticationType | Jenis autentikasi yang digunakan untuk menyambungkan ke database MySQL. Nilai yang mungkin adalah: Basic. |
Ya |
| userName | Tentukan nama pengguna untuk menyambungkan ke database MySQL. | Ya |
| kata sandi | Tentukan kata sandi untuk akun pengguna yang Anda tentukan untuk nama pengguna. | Ya |
| gatewayName | Nama gateway yang harus digunakan layanan Azure Data Factory untuk menyambungkan ke database MySQL lokal. | Ya |
Properti himpunan data
Untuk daftar lengkap bagian properti & yang tersedia untuk menentukan himpunan data, lihat artikel Membuat himpunan data. Bagian-bagian seperti struktur, ketersediaan, dan kebijakan himpunan data JSON mirip untuk semua jenis himpunan data (Azure SQL, blob Azure, tabel Azure, dll.).
Bagian typeProperties berbeda untuk setiap jenis himpunan data dan menyediakan informasi tentang lokasi data di penyimpanan data. Bagian typeProperties untuk jenis himpunan data RelationalTable (yang menyertakan himpunan data MySQL) memiliki properti berikut
| Properti | Deskripsi | Diperlukan |
|---|---|---|
| tableName | Nama tabel dalam instance MySQL Database yang dirujuk oleh layanan tertaut. | Tidak (jika kueriRelationalSource ditentukan) |
Properti aktivitas penyalinan
Untuk daftar lengkap bagian & properti yang tersedia untuk menentukan aktivitas, lihat artikel Membuat Alur. Properti seperti nama, deskripsi, tabel input dan output, dan kebijakan tersedia untuk semua jenis aktivitas.
Sedangkan properti yang tersedia di bagian typeProperties aktivitas bervariasi menurut setiap jenis aktivitas. Untuk aktivitas Penyalinan, mereka bervariasi bergantung pada jenis sumber dan sink.
Ketika sumber dalam aktivitas penyalinan adalah jenis RelationalSource (yang mencakup MySQL), properti berikut tersedia di bagian typeProperties:
| Properti | Deskripsi | Nilai yang diizinkan | Diperlukan |
|---|---|---|---|
| kueri | Gunakan kueri kustom untuk membaca data. | String kueri SQL. Misalnya: pilih * dari MyTable. | Tidak (jika tableName dari himpunan data ditentukan) |
Contoh JSON: Menyalin data dari MySQL ke Azure Blob
Contoh berikut ini menyediakan sampel definisi JSON yang bisa Anda gunakan untuk membuat alur dengan menggunakan Visual Studio atau Azure PowerShell. Contoh ini menunjukkan cara menyalin data dari database MySQL lokal ke Azure Blob Storage. Namun, data dapat disalin ke salah satu sink yang disebutkan di sini menggunakan Aktivitas Penyalinan di Azure Data Factory.
Penting
Sampel ini menyediakan cuplikan JSON. Hal ini tidak termasuk instruksi langkah demi langkah untuk membuat pabrik data. Lihat artikelmemindahkan data antara lokasi lokal dan artikel cloud untuk instruksi langkah demi langkah.
Sampel memiliki entitas Data Factory berikut:
- Sebuah layanan tertaut dari jenis OnPremisesMySql.
- Layanan tertaut dari jenis AzureStorage.
- Sebuah input himpunan data jenis RelationalTable.
- Sebuah output himpunan data jenis AzureBlob.
- Alur dengan Aktivitas Penyalinan yang menggunakan RelationalSource dan BlobSink.
Sampel menyalin data dari hasil kueri dalam database MySQL ke blob setiap jam. Properti JSON yang digunakan dalam sampel ini dijelaskan dalam bagian yang mengikuti sampel.
Sebagai langkah pertama, siapkan data management gateway. Instruksinya berada di artikel memindahkan data antara lokasi lokal dan cloud.
Layanan tertaut MySQL:
{
"name": "OnPremMySqlLinkedService",
"properties": {
"type": "OnPremisesMySql",
"typeProperties": {
"server": "<server name>",
"database": "<database name>",
"schema": "<schema name>",
"authenticationType": "<authentication type>",
"userName": "<user name>",
"password": "<password>",
"gatewayName": "<gateway>"
}
}
}
Layanan tertaut Azure Storage:
{
"name": "AzureStorageLinkedService",
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
}
}
}
Himpunan data input MySQL:
Sampel mengasumsikan Anda telah membuat tabel "MyTable" di MySQL dan berisi kolom yang disebut "timestampcolumn" untuk data rangkaian waktu.
Pengaturan "eksternal": "true" menginformasikan layanan Azure Data Factory bahwa himpunan data berada di luar pabrik data dan tidak diproduksi oleh aktivitas di pabrik data.
{
"name": "MySqlDataSet",
"properties": {
"published": false,
"type": "RelationalTable",
"linkedServiceName": "OnPremMySqlLinkedService",
"typeProperties": {},
"availability": {
"frequency": "Hour",
"interval": 1
},
"external": true,
"policy": {
"externalData": {
"retryInterval": "00:01:00",
"retryTimeout": "00:10:00",
"maximumRetry": 3
}
}
}
}
Himpunan data output Azure Blob:
Data ditulis ke blob baru setiap jam (frekuensi: jam, interval: 1). Jalur folder untuk blob dievaluasi secara dinamis berdasarkan waktu mulai irisan yang sedang diproses. Jalur folder menggunakan bagian tahun, bulan, hari, dan jam dari waktu mulai.
{
"name": "AzureBlobMySqlDataSet",
"properties": {
"type": "AzureBlob",
"linkedServiceName": "AzureStorageLinkedService",
"typeProperties": {
"folderPath": "mycontainer/mysql/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
"format": {
"type": "TextFormat",
"rowDelimiter": "\n",
"columnDelimiter": "\t"
},
"partitionedBy": [
{
"name": "Year",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "yyyy"
}
},
{
"name": "Month",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "MM"
}
},
{
"name": "Day",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "dd"
}
},
{
"name": "Hour",
"value": {
"type": "DateTime",
"date": "SliceStart",
"format": "HH"
}
}
]
},
"availability": {
"frequency": "Hour",
"interval": 1
}
}
}
Alur dengan aktivitas Penyalinan:
Alur berisi Aktivitas Penyalinan yang dikonfigurasi untuk menggunakan himpunan data input dan output dan dijadwalkan untuk berjalan setiap jam. Dalam definisi alur JSON, jenis sumber diatur ke RelationalSource dan jenis sink diatur ke BlobSink. Kueri SQL yang ditentukan untuk properti kueri memilih data dalam satu jam terakhir untuk disalin.
{
"name": "CopyMySqlToBlob",
"properties": {
"description": "pipeline for copy activity",
"activities": [
{
"type": "Copy",
"typeProperties": {
"source": {
"type": "RelationalSource",
"query": "$$Text.Format('select * from MyTable where timestamp >= \\'{0:yyyy-MM-ddTHH:mm:ss}\\' AND timestamp < \\'{1:yyyy-MM-ddTHH:mm:ss}\\'', WindowStart, WindowEnd)"
},
"sink": {
"type": "BlobSink",
"writeBatchSize": 0,
"writeBatchTimeout": "00:00:00"
}
},
"inputs": [
{
"name": "MySqlDataSet"
}
],
"outputs": [
{
"name": "AzureBlobMySqlDataSet"
}
],
"policy": {
"timeout": "01:00:00",
"concurrency": 1
},
"scheduler": {
"frequency": "Hour",
"interval": 1
},
"name": "MySqlToBlob"
}
],
"start": "2014-06-01T18:00:00Z",
"end": "2014-06-01T19:00:00Z"
}
}
Mengetik pemetaan untuk MySQL
Seperti disebutkan dalam artikel aktivitas pergerakan data, Aktivitas Penyalinan melakukan konversi jenis otomatis dari jenis sumber ke jenis sink dengan pendekatan dua langkah berikut:
- Konversi dari jenis sumber asli menjadi jenis .NET
- Mengonversi dari jenis .NET ke jenis sink asli
Saat memindahkan data ke MySQL, pemetaan berikut digunakan dari jenis MySQL ke jenis .NET.
| Jenis Database MySQL | Jenis .NET Framework |
|---|---|
| bigint unsigned | Decimal |
| bigint | Int64 |
| bit | Decimal |
| blob | Byte[] |
| bool | Boolean |
| char | String |
| Tanggal | Datetime |
| datetime | Datetime |
| decimal | Decimal |
| double precision | Double |
| double | Double |
| enum | String |
| float | Single |
| bilangan bulat tidak bertanda | Int64 |
| int | Int32 |
| bilangan bulat tidak bertanda | Int64 |
| integer | Int32 |
| long varbinary | Byte[] |
| long varchar | String |
| longblob | Byte[] |
| longtext | String |
| mediumblob | Byte[] |
| mediumint unsigned | Int64 |
| mediumint | Int32 |
| mediumtext | String |
| numeric | Decimal |
| real | Double |
| set | String |
| smallint unsigned | Int32 |
| smallint | Int16 |
| teks | String |
| waktu | TimeSpan |
| timestamp | Datetime |
| tinyblob | Byte[] |
| tinyint unsigned | Int16 |
| tinyint | Int16 |
| tinytext | String |
| varchar | String |
| tahun | Int |
Memetakan sumber untuk kolom sink
Untuk mempelajari tentang pemetaan kolom dari himpunan data sumber ke kolom dalam himpunan data sink, lihat Memetakan kolom himpunan data di Azure Data Factory.
Bacaan berulang dari sumber relasional
Saat menyalin data dari penyimpanan data relasional, ingatlah pengulangan untuk menghindari hasil yang tidak diinginkan. Di Azure Data Factory, Anda dapat menjalankan ulang irisan secara manual. Anda juga dapat mengonfigurasi kebijakan coba lagi untuk himpunan data sehingga irisan diulang saat kegagalan terjadi. Saat irisan diulang dengan cara apa pun, Anda perlu memastikan bahwa data yang sama dibaca tidak peduli berapa kali irisan dijalankan. Lihat Bacaan yang dapat diulang dari sumber relasional.
Kinerja dan Penyetelan
Lihat Performa Aktivitas Penyalinan & Panduan Pengaturan untuk mempelajari tentang faktor utama yang memengaruhi performa perpindahan data (Aktivitas Penyalinan) di Azure Data Factory dan berbagai cara untuk mengoptimalkannya.