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:

  1. Buat layanan tertaut untuk menautkan penyimpanan data input dan output ke pabrik data Anda.
  2. Buat kumpulan data untuk mewakili data input dan output untuk operasi salin.
  3. 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:

  1. Sebuah layanan tertaut dari jenis OnPremisesMySql.
  2. Layanan tertaut dari jenis AzureStorage.
  3. Sebuah input himpunan data jenis RelationalTable.
  4. Sebuah output himpunan data jenis AzureBlob.
  5. 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:

  1. Konversi dari jenis sumber asli menjadi jenis .NET
  2. 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.