Salin beberapa tabel secara massal menggunakan Azure Data Factory dengan PowerShell
BERLAKU UNTUK:Azure Data Factory Azure Synapse Analytics
Tip
Cobalah Data Factory di Microsoft Fabric, solusi analitik all-in-one untuk perusahaan. Microsoft Fabric mencakup semuanya mulai dari pergerakan data hingga ilmu data, analitik real time, kecerdasan bisnis, dan pelaporan. Pelajari cara memulai uji coba baru secara gratis!
Tutorial ini menunjukkan menyalin sejumlah tabel dari Azure SQL Database ke Azure Synapse Analytics. Anda juga dapat menyebarkan pola yang sama dalam skenario salinan lainnya. Misalnya, menyalin tabel dari Microsoft SQL Server/Oracle ke Microsoft Azure SQL Database/Data Warehouse/Azure Blob, menyalin jalur yang berbeda dari Blob ke tabel Microsoft Azure SQL Database.
Pada tingkat tinggi, tutorial ini melibatkan langkah-langkah berikut:
- Membuat pabrik data.
- Buat Microsoft Azure SQL Database, Azure Synapse Analytics, dan layanan tertaut Microsoft Azure Storage Microsoft Azure Storage.
- Buat himpunan data Micorosoft Azure SQL Database dan Azure Synapse Analytics.
- Buat alur untuk mencari tabel yang akan disalin dan alur lain untuk melakukan operasi salin aktual.
- Memulai eksekusi alur.
- Pantau eksekusi alur dan aktivitas.
Tutorial ini menggunakan Azure PowerShell. Untuk mempelajari tentang menggunakan alat/SDK lain untuk membuat pabrik data, lihat Mulai Cepat.
Alur kerja end-to-end
Dalam skenario ini, kita memiliki sejumlah tabel di Microsoft Azure SQL Database yang ingin kita salin ke Azure Synapse Analytics. Berikut adalah urutan langkah logis dalam alur kerja yang terjadi di alur:
- Alur pertama mencari daftar tabel yang perlu disalin ke penyimpanan data sink. Atau, Anda dapat mempertahankan tabel metadata yang mencantumkan semua tabel yang akan disalin ke penyimpanan data sink. Kemudian, alur memicu alur lain, yang berulang di tiap tabel dalam database dan lakukan operasi salin data.
- Alur kedua melakukan salinan aktual. Dibutuhkan daftar tabel sebagai parameter. Untuk tiap tabel dalam daftar, salin tabel tertentu di Microsoft Azure SQL Database ke tabel terkait di Azure Synapse Analytics menggunakan salinan bertahap melalui penyimpanan Blob dan PolyBase untuk performa terbaik. Dalam contoh ini, alur pertama melewati daftar tabel sebagai nilai untuk parameter.
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Prasyarat
Catatan
Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.
- Azure PowerShell. Ikuti instruksi di Cara menginstal dan mengonfigurasi Azure PowerShell.
- Akun Azure Storage. Akun Microsoft Azure Storage digunakan sebagai penyimpanan blob penahapan dalam operasi salinan massal.
- Microsoft Azure SQL database. Database ini berisi data sumber.
- Azure - Synapse Analytics. Gudang data ini menyimpan data yang disalin dari Microsoft Azure SQL Database.
Mempersiapkan Azure SQL Database dan Azure Synapse Analytics
Siapkan sumber Microsoft Azure SQL Database:
Buat database dengan data sampel Adventure Works LT berikut di Microsoft Azure SQL Database dengan mengikuti artikel Membuat database di Microsoft Azure SQL. Tutorial ini menyalin semua tabel dari contoh database ini ke Azure Synapse Analytics.
Siapkan sink Azure Synapse Analytics:
Jika Anda tidak memiliki ruang kerja Azure Synapse Analytics, lihat artikel Mulai menggunakan Azure Synapse Analytics untuk langkah-langkah membuatnya.
Buat skema tabel terkait di Azure Synapse Analytics. Anda menggunakan Azure Data Factory untuk melakukan migrasi/menyalin data di langkah selanjutnya.
Layanan Azure untuk mengakses layanan SQL
Untuk Microsoft Azure SQL Database dan Azure Synapse Analytics, izinkan layanan Azure untuk mengakses server SQL. Pastikan pengaturan Izinkan akses ke layanan AzureDIAKTIFKAN untuk server Anda. Pengaturan ini memungkinkan layanan Azure Data Factory membaca data dari Microsoft Azure SQL Database Anda dan menulis data ke Azure Synapse Analytics Anda. Untuk memverifikasi dan mengaktifkan pengaturan ini, lakukan langkah berikut:
- Klik Semua layanan di sebelah kiri dan klik server SQL.
- Pilih server Anda, dan klik Firewall di bawah PENGATURAN.
- Di halaman Pengaturan firewall, klik AKTIF untuk Izinkan akses ke layanan Azure.
Membuat pabrik data
Luncurkan PowerShell. Biarkan Azure PowerShell terbuka hingga akhir tutorial ini. Jika Anda menutup dan membuka kembali, Anda perlu menjalankan perintah lagi.
Jalankan perintah berikut dan masukkan nama pengguna serta kata sandi yang Anda gunakan untuk masuk ke portal Microsoft Azure:
Connect-AzAccount
Jalankan perintah berikut untuk menampilkan semua langganan untuk akun ini:
Get-AzSubscription
Jalankan perintah berikut untuk memilih langganan yang ingin Anda gunakan. Ganti SubscriptionId dengan ID langganan Azure Anda:
Select-AzSubscription -SubscriptionId "<SubscriptionId>"
Jalankan cmdlet Set-AzDataFactoryV2 untuk membuat pabrik data. Ganti place-holder dengan nilai Anda sendiri sebelum menjalankan perintah.
$resourceGroupName = "<your resource group to create the factory>" $dataFactoryName = "<specify the name of data factory to create. It must be globally unique.>" Set-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Location "East US" -Name $dataFactoryName
Perhatikan poin berikut:
Nama pabrik data Azure harus bersifat unik secara global. Jika Anda menerima kesalahan berikut, ubah nama dan coba lagi.
The specified Data Factory name 'ADFv2QuickStartDataFactory' is already in use. Data Factory names must be globally unique.
Untuk membuat instans Data Factory, Anda harus menjadi Kontributor/Administrator langganan Azure.
Untuk daftar wilayah Azure tempat Data Factory saat ini tersedia, pilih wilayah yang menarik minat Anda pada halaman berikut, lalu perluas Analitik untuk menemukan Data Factory: Produk yang tersedia menurut wilayah. Penyimpanan data (Azure Storage, Azure SQL Database, dll.) dan komputasi (HDInsight, dll.) yang digunakan oleh pabrik data dapat berada di wilayah lain.
Membuat layanan tertaut
Dalam tutorial ini, Anda membuat tiga layanan tertaut untuk sumber, sink, dan blob penahapan masing-masing, yang mencakup koneksi ke penyimpanan data Anda:
Membuat layanan tertaut Microsoft Azure SQL Database
Buat file JSON bernama AzureSqlDatabaseLinkedService.json di folder C:\ADFv2TutorialBulkCopy dengan konten berikut: (Buat folder ADFv2TutorialBulkCopy jika belum ada.)
Penting
Ganti <servername>, <databasename>, <username>@<servername> dan <password> dengan nilai Azure SQL Database Anda sebelum menyimpan mengajukan.
{ "name": "AzureSqlDatabaseLinkedService", "properties": { "type": "AzureSqlDatabase", "typeProperties": { "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30" } } }
Di Azure PowerShell, beralih ke folder ADFv2TutorialBulkCopy.
Jalankan cmdlet Set-AzDataFactoryV2LinkedService untuk membuat layanan tertaut: AzureSqlDatabaseLinkedService.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseLinkedService" -File ".\AzureSqlDatabaseLinkedService.json"
Berikut adalah output sampel:
LinkedServiceName : AzureSqlDatabaseLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDatabaseLinkedService
Buat layanan tertaut sink Azure Synapse Analytics
Buat file JSON bernama AzureSqlDWLinkedService.json di folder C:\ADFv2TutorialBulkCopy, dengan konten berikut:
Penting
Ganti <servername>, <databasename>, <username>@<servername> dan <password> dengan nilai Azure SQL Database Anda sebelum menyimpan mengajukan.
{ "name": "AzureSqlDWLinkedService", "properties": { "type": "AzureSqlDW", "typeProperties": { "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30" } } }
Untuk membuat layanan tertaut: AzureSqlDWLinkedService, jalankan cmdlet Set-AzDataFactoryV2LinkedService.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWLinkedService" -File ".\AzureSqlDWLinkedService.json"
Berikut adalah output sampel:
LinkedServiceName : AzureSqlDWLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDWLinkedService
Membuat layanan tertaut Microsoft Azure Storage penahapan
Dalam tutorial ini, Anda menggunakan penyimpanan Azure Blob sebagai area penahapan sementara untuk mengaktifkan PolyBase untuk performa salinan yang lebih baik.
Buat file JSON bernama AzureStorageLinkedService.json di folder C:\ADFv2TutorialBulkCopy, dengan konten berikut:
Penting
Ganti <accountName> dan <accountKey> dengan nama dan kunci akun penyimpanan Azure sebelum menyimpan file.
{ "name": "AzureStorageLinkedService", "properties": { "type": "AzureStorage", "typeProperties": { "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>" } } }
Untuk membuat layanan tertaut: AzureStorageLinkedService, jalankan cmdlet Set-AzDataFactoryV2LinkedService.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -File ".\AzureStorageLinkedService.json"
Berikut adalah output sampel:
LinkedServiceName : AzureStorageLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureStorageLinkedService
Membuat himpunan data
Dalam tutorial ini, Anda membuat himpunan data sumber dan sink yang menentukan lokasi penyimpanan data:
Membuat khimpunan data untuk Microsoft Azure SQL Database sumber
Buat file JSON bernama AzureSqlDatabaseDataset.json di folder C:\ADFv2TutorialBulkCopy, dengan konten berikut. "tableName" adalah tiruan karena nanti Anda menggunakan kueri SQL dalam aktivitas salin untuk mengambil data.
{ "name": "AzureSqlDatabaseDataset", "properties": { "type": "AzureSqlTable", "linkedServiceName": { "referenceName": "AzureSqlDatabaseLinkedService", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": "dummy" } } }
Untuk membuat himpunan data: AzureSqlDatabaseDataset, jalankan cmdlet Set-AzDataFactoryV2Dataset.
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseDataset" -File ".\AzureSqlDatabaseDataset.json"
Berikut adalah output sampel:
DatasetName : AzureSqlDatabaseDataset ResourceGroupName : <resourceGroupname> DataFactoryName : <dataFactoryName> Structure : Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlTableDataset
Membuat kumpulan data untuk sink Azure Synapse Analytics
Buat file JSON bernama AzureSqlDWDataset.json di folder C:\ADFv2TutorialBulkCopy, dengan konten berikut: "tableName" diatur sebagai parameter, nantinya aktivitas salinan yang mereferensikan himpunan data ini melewati nilai aktual ke dalam himpunan data.
{ "name": "AzureSqlDWDataset", "properties": { "type": "AzureSqlDWTable", "linkedServiceName": { "referenceName": "AzureSqlDWLinkedService", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": { "value": "@{dataset().DWTableName}", "type": "Expression" } }, "parameters":{ "DWTableName":{ "type":"String" } } } }
Untuk membuat himpunan data: AzureSqlDWDataset, jalankan cmdlet Set-AzDataFactoryV2Dataset.
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWDataset" -File ".\AzureSqlDWDataset.json"
Berikut adalah output sampel:
DatasetName : AzureSqlDWDataset ResourceGroupName : <resourceGroupname> DataFactoryName : <dataFactoryName> Structure : Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDwTableDataset
Membuat alur pipa
Dalam tutorial ini, Anda membuat dua alur:
Membuat alur "IterateAndCopySQLTables"
Alur ini mengambil daftar tabel sebagai parameter. Untuk tiap tabel dalam daftar, data dari tabel di Microsoft Azure SQL Database disalin ke Azure Synapse Analytics menggunakan salinan bertahap dan PolyBase.
Buat file JSON bernama IterateAndCopySQLTables.json di folder C:\ADFv2TutorialBulkCopy, dengan konten berikut:
{ "name": "IterateAndCopySQLTables", "properties": { "activities": [ { "name": "IterateSQLTables", "type": "ForEach", "typeProperties": { "isSequential": "false", "items": { "value": "@pipeline().parameters.tableList", "type": "Expression" }, "activities": [ { "name": "CopyData", "description": "Copy data from Azure SQL Database to Azure Synapse Analytics", "type": "Copy", "inputs": [ { "referenceName": "AzureSqlDatabaseDataset", "type": "DatasetReference" } ], "outputs": [ { "referenceName": "AzureSqlDWDataset", "type": "DatasetReference", "parameters": { "DWTableName": "[@{item().TABLE_SCHEMA}].[@{item().TABLE_NAME}]" } } ], "typeProperties": { "source": { "type": "SqlSource", "sqlReaderQuery": "SELECT * FROM [@{item().TABLE_SCHEMA}].[@{item().TABLE_NAME}]" }, "sink": { "type": "SqlDWSink", "preCopyScript": "TRUNCATE TABLE [@{item().TABLE_SCHEMA}].[@{item().TABLE_NAME}]", "allowPolyBase": true }, "enableStaging": true, "stagingSettings": { "linkedServiceName": { "referenceName": "AzureStorageLinkedService", "type": "LinkedServiceReference" } } } } ] } } ], "parameters": { "tableList": { "type": "Object" } } } }
Untuk membuat alur: IterateAndCopySQLTables, Jalankan cmdlet Set-AzDataFactoryV2Pipeline.
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "IterateAndCopySQLTables" -File ".\IterateAndCopySQLTables.json"
Berikut adalah output sampel:
PipelineName : IterateAndCopySQLTables ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {IterateSQLTables} Parameters : {[tableList, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification]}
Membuat alur "GetTableListAndTriggerCopyData"
Alur ini menjalankan dua langkah:
- Mencari tabel sistem Microsoft Azure SQL Database untuk mendapatkan daftar tabel yang akan disalin.
- Memicu alur "IterateAndCopySQLTables" untuk melakukan salinan data aktual.
Buat file JSON bernama GetTableListAndTriggerCopyData.json di folder C:\ADFv2TutorialBulkCopy, dengan konten berikut:
{ "name":"GetTableListAndTriggerCopyData", "properties":{ "activities":[ { "name": "LookupTableList", "description": "Retrieve the table list from Azure SQL dataabse", "type": "Lookup", "typeProperties": { "source": { "type": "SqlSource", "sqlReaderQuery": "SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.TABLES WHERE TABLE_TYPE = 'BASE TABLE' and TABLE_SCHEMA = 'SalesLT' and TABLE_NAME <> 'ProductModel'" }, "dataset": { "referenceName": "AzureSqlDatabaseDataset", "type": "DatasetReference" }, "firstRowOnly": false } }, { "name": "TriggerCopy", "type": "ExecutePipeline", "typeProperties": { "parameters": { "tableList": { "value": "@activity('LookupTableList').output.value", "type": "Expression" } }, "pipeline": { "referenceName": "IterateAndCopySQLTables", "type": "PipelineReference" }, "waitOnCompletion": true }, "dependsOn": [ { "activity": "LookupTableList", "dependencyConditions": [ "Succeeded" ] } ] } ] } }
Untuk membuat alur: GetTableListAndTriggerCopyData, Jalankan cmdlet Set-AzDataFactoryV2Pipeline.
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "GetTableListAndTriggerCopyData" -File ".\GetTableListAndTriggerCopyData.json"
Berikut adalah output sampel:
PipelineName : GetTableListAndTriggerCopyData ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {LookupTableList, TriggerCopy} Parameters :
Memulai dan memantau alur
Mulai eksekusi alur untuk alur "GetTableListAndTriggerCopyData" utama dan tangkap ID eksekusi alur untuk pemantauan di masa depan. Di bawahnya, ini memicu eksekusi untuk alur "IterateAndCopySQLTables" seperti yang ditentukan dalam aktivitas ExecutePipeline.
$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName 'GetTableListAndTriggerCopyData'
Jalankan skrip berikut untuk terus memeriksa status eksekusi alur GetTableListAndTriggerCopyData, dan mencetak eksekusi alur akhir dan hasil eksekusi aktivitas.
while ($True) { $run = Get-AzDataFactoryV2PipelineRun -ResourceGroupName $resourceGroupName -DataFactoryName $DataFactoryName -PipelineRunId $runId if ($run) { if ($run.Status -ne 'InProgress') { Write-Host "Pipeline run finished. The status is: " $run.Status -ForegroundColor "Yellow" Write-Host "Pipeline run details:" -ForegroundColor "Yellow" $run break } Write-Host "Pipeline is running...status: InProgress" -ForegroundColor "Yellow" } Start-Sleep -Seconds 15 } $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30) Write-Host "Activity run details:" -ForegroundColor "Yellow" $result
Berikut adalah output dari eksekusi sampel:
Pipeline run details: ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> RunId : 0000000000-00000-0000-0000-000000000000 PipelineName : GetTableListAndTriggerCopyData LastUpdated : 9/18/2017 4:08:15 PM Parameters : {} RunStart : 9/18/2017 4:06:44 PM RunEnd : 9/18/2017 4:08:15 PM DurationInMs : 90637 Status : Succeeded Message : Activity run details: ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> ActivityName : LookupTableList PipelineRunId : 0000000000-00000-0000-0000-000000000000 PipelineName : GetTableListAndTriggerCopyData Input : {source, dataset, firstRowOnly} Output : {count, value, effectiveIntegrationRuntime} LinkedServiceName : ActivityRunStart : 9/18/2017 4:06:46 PM ActivityRunEnd : 9/18/2017 4:07:09 PM DurationInMs : 22995 Status : Succeeded Error : {errorCode, message, failureType, target} ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> ActivityName : TriggerCopy PipelineRunId : 0000000000-00000-0000-0000-000000000000 PipelineName : GetTableListAndTriggerCopyData Input : {pipeline, parameters, waitOnCompletion} Output : {pipelineRunId} LinkedServiceName : ActivityRunStart : 9/18/2017 4:07:11 PM ActivityRunEnd : 9/18/2017 4:08:14 PM DurationInMs : 62581 Status : Succeeded Error : {errorCode, message, failureType, target}
Anda bisa mendapatkan ID eksekusi alur "IterateAndCopySQLTables", dan memeriksa eksekusi aktivitas mendetail sebagai berikut.
Write-Host "Pipeline 'IterateAndCopySQLTables' run result:" -ForegroundColor "Yellow" ($result | Where-Object {$_.ActivityName -eq "TriggerCopy"}).Output.ToString()
Berikut adalah output dari eksekusi sampel:
{ "pipelineRunId": "7514d165-14bf-41fb-b5fb-789bea6c9e58" }
$result2 = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId <copy above run ID> -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30) $result2
Sambungkan ke sink Azure Synapse Analytics Anda dan pastikan data sudah disalin dari Microsoft Azure SQL Database dengan benar.
Konten terkait
Anda melakukan langkah-langkah berikut dalam tutorial ini:
- Membuat pabrik data.
- Buat Microsoft Azure SQL Database, Azure Synapse Analytics, dan layanan tertaut Microsoft Azure Storage Microsoft Azure Storage.
- Buat himpunan data Micorosoft Azure SQL Database dan Azure Synapse Analytics.
- Buat alur untuk mencari tabel yang akan disalin dan alur lain untuk melakukan operasi salin aktual.
- Memulai eksekusi alur.
- Pantau eksekusi alur dan aktivitas.
Lanjutkan ke tutorial berikut untuk mempelajari tentang menyalin data secara bertahap dari sumber ke tujuan: