Memindahkan data dari PostgreSQL menggunakan Azure Data Factory

Catatan

Artikel ini berlaku untuk versi 1 dari Data Factory. Jika Anda menggunakan versi layanan Azure Data Factory saat ini, lihat Konektor PostgreSQL di V2.

Artikel ini menjelaskan cara menggunakan Aktivitas Salin di Azure Data Factory untuk memindahkan data dari database PostgreSQL lokal. Ini dibangun pada artikel Aktivitas Pergerakan Data, yang menyajikan ikhtisar umum pergerakan data dengan aktivitas salin.

Anda dapat menyalin data dari penyimpanan data PostgreSQL lokal ke penyimpanan data sink yang didukung. Untuk daftar penyimpanan data yang didukung sebagai sumber atau sink oleh aktivitas salin, lihat penyimpanan data yang didukung. Data Factory saat ini mendukung pemindahan data dari database PostgreSQL ke penyimpanan data lain, tetapi tidak untuk memindahkan data dari penyimpanan data lain ke database PostgreSQL.

Prasyarat

Layanan Data Factory mendukung koneksi ke sumber PostgreSQL lokal menggunakan Data Management Gateway. Lihat artikel memindahkan data antara lokasi lokal dan cloud untuk mempelajari tentang Data Management Gateway dan untuk instruksi langkah demi langkah tentang cara menyiapkan gateway.

Gateway diperlukan meskipun database PostgreSQL dihosting di Azure IaaS VM. Anda bisa menginstal gateway pada IaaS VM yang sama dengan penyimpanan data atau di VM lain selama gateway bisa tersambung ke database.

Catatan

Lihat Memecahkan masalah gateway untuk tips tentang pemecahan masalah terkait koneksi/gateway.

Versi dan instalasi yang didukung

Agar Data Management Gateway tersambung ke Database PostgreSQL, instal penyedia data Ngpsql untuk PostgreSQL dengan versi antara 2.0.12 dan 3.1.9 pada sistem yang sama dengan Data Management Gateway. Didukung PostgreSQL versi 7.4 ke atas.

Memulai

Anda dapat membuat jalur dengan aktivitas salin yang memindahkan data dari penyimpanan data PostgreSQL lokal dengan menggunakan alat/API yang berbeda.

  • Cara termudah untuk membuat jalur adalah dengan menggunakan Wizard Salin. Lihat Tutorial: Membuat saluran menggunakan Panduan Salin untuk panduan singkat tentang membuat jalur menggunakan panduan Salin data.
  • Anda juga bisa menggunakan alat berikut untuk membuat alur:
    • Visual Studio

    • Azure PowerShell

    • Templat Azure Resource Manager

    • .NET API

    • REST API

      Lihat Menyalin tutorial aktivitas untuk instruksi langkah demi langkah untuk membuat saluran dengan aktivitas salin.

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 Data Factory yang digunakan untuk menyalin data dari penyimpanan data PostgreSQL lokal, lihat contoh JSON: Menyalin data dari PostgreSQL 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 PostgreSQL:

Properti layanan tertaut

Tabel berikut memberikan deskripsi untuk elemen JSON khusus untuk layanan tertaut PostgreSQL.

Properti Deskripsi Diperlukan
jenis Properti jenis harus diatur ke: OnPremisesPostgreSql Ya
server Nama server PostgreSQL. Ya
database Nama server PostgreSQL. Ya
schema Nama skema dalam database. Nama skema peka huruf besar/kecil. Tidak
authenticationType Jenis autentikasi yang digunakan untuk menyambungkan ke database PostgreSQL. Nilai yang mungkin adalah: Anonim, Dasar, dan Windows. Ya
username Tentukan nama pengguna jika Anda menggunakan autentikasi Basic atau Windows. Tidak
kata sandi Tentukan kata sandi untuk akun pengguna yang Anda tentukan untuk nama pengguna. Tidak
gatewayName Nama gateway yang harus digunakan layanan Azure Data Factory untuk menyambungkan ke database PostgreSQL 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 set data JSON mirip untuk semua jenis set data.

Bagian typeProperties berbeda untuk setiap jenis set data dan menyediakan informasi tentang lokasi data di penyimpanan data. Bagian typeProperties untuk kumpulan data jenis RelationalTable (yang menyertakan set data PostgreSQL) memiliki properti berikut:

Properti Deskripsi Diperlukan
tableName Nama tabel dalam instance Database PostgreSQL yang dirujuk oleh layanan tertaut. TableName peka huruf besar/kecil. 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 Salin, ia bervariasi tergantung pada jenis sumber dan jalur.

Ketika sumber berdasarkan jenis RelationalSource (yang mencakup PostgreSQL), properti berikut ini tersedia di bagian typeProperties:

Properti Deskripsi Nilai yang diizinkan Diperlukan
kueri Gunakan kueri kustom untuk membaca data. String kueri SQL. Misalnya: "query": "select * from \"MySchema\".\"MyTable\"". Tidak (jika tableName dari himpunan data ditentukan)

Catatan

Nama skema dan tabel peka huruf besar/kecil. Sertakan di "" (tanda kutip ganda) dalam kueri.

Contoh:

"query": "select * from \"MySchema\".\"MyTable\""

Contoh JSON: Menyalin data dari PostgreSQL ke Azure Blob

Contoh berikut ini menyediakan contoh definisi JSON yang bisa Anda gunakan untuk membuat alur dengan menggunakan Visual Studio atau Azure PowerShell. Anda akan ditunjukkan cara menyalin data dari database PostgreSQL ke Penyimpanan Blob Azure. Namun, data dapat disalin dari salah satu sumber ke salah satu jalur yang dinyatakan di sini menggunakan Aktivitas Salin 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 menentukan entitas Data Factory berikut:

  1. Layanan tertaut jenis OnPremisesPostgreSql.
  2. Layanan tertaut jenis AzureStorage.
  3. Sebuah input himpunan data jenis RelationalTable.
  4. Sebuah output himpunan data jenis AzureBlob.
  5. Alur dengan Aktivitas Salin yang menggunakan SqlDWSource dan BlobSink.

Sampel menyalin data dari hasil kueri dalam database PostgreSQL ke blob setiap jam. Properti JSON yang digunakan dalam sampel ini dijelaskan dalam beberapa bagian setelah sampel.

Sebagai langkah pertama, siapkan data management gateway. Instruksinya berada di artikel memindahkan data antara lokasi lokal dan cloud.

Layanan tertaut PostgreSQL:

{
    "name": "OnPremPostgreSqlLinkedService",
    "properties": {
        "type": "OnPremisesPostgreSql",
        "typeProperties": {
            "server": "<server>",
            "database": "<database>",
            "schema": "<schema>",
            "authenticationType": "<authentication type>",
            "username": "<username>",
            "password": "<password>",
            "gatewayName": "<gatewayName>"
        }
    }
}

Layanan tertaut di Azure Blob Storage:

{
    "name": "AzureStorageLinkedService",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<AccountName>;AccountKey=<AccountKey>"
        }
    }
}

Set data input PostgreSQL:

Sampel mengasumsikan Anda telah membuat tabel "MyTable" di PostgreSQL dan berisi kolom yang disebut "timestamp" untuk data rangkaian waktu.

Pengaturan "external": true menginformasikan layanan Data Factory bahwa set data berada di luar Data Factory dan tidak diproduksi oleh aktivitas di Data Factory.

{
    "name": "PostgreSqlDataSet",
    "properties": {
        "type": "RelationalTable",
        "linkedServiceName": "OnPremPostgreSqlLinkedService",
        "typeProperties": {},
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true,
        "policy": {
            "externalData": {
                "retryInterval": "00:01:00",
                "retryTimeout": "00:10:00",
                "maximumRetry": 3
            }
        }
    }
}

Set 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 yang sedang diproses. Jalur folder menggunakan bagian tahun, bulan, hari, dan jam dari waktu mulai.

{
    "name": "AzureBlobPostgreSqlDataSet",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/postgresql/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 Salin:

Alur berisi Aktivitas Salin yang dikonfigurasi untuk menggunakan himpunan data input dan output dan dijadwalkan untuk berjalan setiap jam. Dalam definisi alur JSON, jenis sumber diatur ke SqlSource dan jenis sink diatur ke BlobSink. Kueri SQL yang ditentukan untuk properti kueri memilih data dari tabel public.usstates dalam database PostgreSQL.

{
    "name": "CopyPostgreSqlToBlob",
    "properties": {
        "description": "pipeline for copy activity",
        "activities": [
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "RelationalSource",
                        "query": "select * from \"public\".\"usstates\""
                    },
                    "sink": {
                        "type": "BlobSink"
                    }
                },
                "inputs": [
                    {
                        "name": "PostgreSqlDataSet"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureBlobPostgreSqlDataSet"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00",
                    "concurrency": 1
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "PostgreSqlToBlob"
            }
        ],
        "start": "2014-06-01T18:00:00Z",
        "end": "2014-06-01T19:00:00Z"
    }
}

Pemetaan jenis untuk PostgreSQL

Seperti disebutkan dalam artikel aktivitas pergerakan data, Aktivitas Salin melakukan konversi jenis otomatis dari jenis sumber ke jenis jalur dengan pendekatan 2 langkah berikut:

  1. Konversi dari jenis sumber asli menjadi jenis .NET
  2. Konversi dari jenis .NET ke jenis jalur asli

Saat memindahkan data ke PostgreSQL, pemetaan berikut digunakan dari jenis PostgreSQL ke jenis .NET.

Jenis Database PostgreSQL Alias PostgresSQL Jenis .NET Framework
abstime Datetime
bigint int8 Int64
bigserial serial8 Int64
bit [(n)] Byte[], String
bit varying [ (n) ] varbit Byte[], String
boolean bool Boolean
box Byte[], String
bytea Byte[], String
character [(n)] char [(n)] String
character varying [(n)] varchar [(n)] String
cid String
cidr String
circle Byte[], String
date Datetime
daterange String
double precision float8 Dobel
inet Byte[], String
intarry String
int4range String
int8range String
bilangan bulat int, int4 Int32
interval [fields] [(p)] Rentang waktu
json String
jsonb Byte[]
line Byte[], String
lseg Byte[], String
macaddr Byte[], String
money Desimal
numeric [(p, s)] decimal [(p, s)] Desimal
numrange String
oid Int32
jalur Byte[], String
pg_lsn Int64
point Byte[], String
polygon Byte[], String
real float4 Tunggal
smallint int2 Int16
smallserial serial2 Int16
serial serial4 Int32
teks String

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.