Menyalin dan mengubah data di Snowflake V2 menggunakan Azure Data Factory atau Azure Synapse Analytics
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!
Artikel ini menguraikan cara menggunakan aktivitas Salin di Azure Data Factory dan Azure alur Synapse untuk menyalin data dari dan ke Snowflake, dan menggunakan Aliran Data untuk mengubah data di Snowflake. Untuk informasi selengkapnya, lihat artikel pengantar untuk Data Factory atau Azure Synapse Analytics.
Penting
Konektor Snowflake V2 menyediakan dukungan Snowflake asli yang ditingkatkan. Jika Anda menggunakan konektor Snowflake V1 dalam solusi Anda, Anda disarankan untuk meningkatkan konektor Snowflake Anda sesuka Anda. Lihat bagian ini untuk detail tentang perbedaan antara V2 dan V1.
Kemampuan yang didukung
Konektor Snowflake ini didukung untuk kemampuan berikut ini:
Kemampuan yang didukung | IR |
---|---|
Salin aktivitas (sumber/sink) | (1) (2) |
Memetakan aliran data (sumber/sink) | (1) |
Aktivitas pencarian | (1) (2) |
Aktivitas skrip | (1) (2) |
① Runtime integrasi Azure ② Runtime integrasi yang dihost sendiri
Untuk aktivitas Salin, konektor Snowflake ini mendukung fungsi berikut:
- Salin data dari Snowflake yang menggunakan perintahSALINAN Snowflake ke [lokasi]untuk mendapatkan kinerja terbaik.
- Salin data ke Snowflake yang memanfaatkan SALINAN Snowflakeke dalam perintah [tabel] untuk mendapatkan kinerja terbaik. Proses ini mendukung Snowflake di Azure.
- Jika proksi diperlukan untuk terhubung ke Snowflake dari Integration Runtime yang dihosting sendiri, Anda harus mengonfigurasi variabel lingkungan untuk HTTP_PROXY dan HTTPS_PROXY pada host Integration Runtime.
Prasyarat
Jika penyimpanan data Anda terletak di dalam jaringan lokal, jaringan virtual Azure, atau Amazon Virtual Private Cloud, Anda harus mengonfigurasi runtime integrasi yang dihosting sendiri untuk menghubungkannya. Pastikan untuk menambahkan alamat IP, yang digunakan oleh runtime integrasi dan dihost sendiri ke daftar yang diizinkan.
Jika penyimpanan data Anda adalah layanan data cloud terkelola, Anda dapat menggunakan Azure Integration Runtime. Jika akses dibatasi untuk IP yang disetujui dalam aturan firewall, Anda bisa menambahkan IP Azure Integration Runtime ke daftar izinkan.
Akun Snowflake yang digunakan untuk Sumber atau Sink harus memiliki akses yang diperlukan USAGE
pada database dan akses baca/tulis pada skema dan tabel/tampilan di bawahnya. Selain itu, juga harus memiliki CREATE STAGE
pada skema untuk dapat membuat tahap Eksternal dengan SAS URI.
Nilai properti Akun berikut harus diatur:
Properti | Deskripsi | Wajib diisi | Default |
---|---|---|---|
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION | Menentukan apakah akan memerlukan objek integrasi penyimpanan sebagai kredensial cloud saat membuat tahapan eksternal bernama (menggunakan CREATE STAGE) untuk mengakses lokasi penyimpanan cloud pribadi. | SALAH | SALAH |
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION | Menentukan apakah perlu menggunakan tahap eksternal bernama yang mereferensikan objek integrasi penyimpanan sebagai kredensial cloud saat memuat data dari atau membongkar data ke lokasi penyimpanan cloud pribadi. | SALAH | SALAH |
Untuk informasi selengkapnya tentang mekanisme dan opsi keamanan jaringan yang didukung oleh Data Factory, lihat Strategi akses data.
Memulai
Untuk melakukan aktivitas Salin dengan alur, Anda dapat menggunakan salah satu alat atau SDK berikut:
- Alat Penyalinan Data
- Portal Microsoft Azure
- SDK .NET
- SDK Python
- Azure PowerShell
- REST API
- Templat Azure Resource Manager
Buat layanan tertaut ke Snowflake menggunakan antarmuka pengguna
Gunakan langkah-langkah berikut untuk membuat layanan tertaut ke Snowflake di antarmuka pengguna portal Microsoft Azure.
Telusuri ke tab Kelola di ruang kerja Azure Data Factory atau Synapse Anda dan pilih Layanan Tertaut, lalu klik Baru:
Cari Snowflake dan pilih konektor Snowflake.
Konfigurasikan detail layanan, uji koneksi, dan buat layanan tertaut baru.
Detail konfigurasi konektor
Bagian berikut memberikan detail tentang properti yang menentukan entitas khusus untuk konektor Snowflake.
Properti layanan tertaut
Properti generik ini didukung untuk layanan tertaut Snowflake:
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis harus diatur ke SnowflakeV2. | Ya |
accountIdentifier | Nama akun bersama dengan organisasinya. Misalnya, myorg-account123. | Ya |
database | Database default yang digunakan untuk sesi setelah menyambungkan. | Ya |
gudang | Gudang virtual default yang digunakan untuk sesi setelah menyambungkan. | Ya |
authenticationType | Jenis autentikasi yang digunakan untuk menyambungkan ke layanan Snowflake. Nilai yang diizinkan adalah: Dasar (Default) dan KeyPair. Lihat bagian terkait di bawah ini tentang properti dan contoh masing-masing selengkapnya. | No |
role | Peran keamanan default yang digunakan untuk sesi setelah menyambungkan. | No |
tuan rumah | Nama host akun Snowflake. Misalnya: contoso.snowflakecomputing.com .
.cn juga didukung. |
No |
connectVia | Runtime integrasiyang akan digunakan untuk menyambungkan ke penyimpanan data. Anda dapat menggunakan runtime integrasi Azure atau runtime integrasi yang dihost sendiri jika penyimpanan data Anda berada di jaringan pribadi. Jika tidak ditentukan, menggunakan default Azure Integration Runtime. | No |
Konektor Snowflake ini mendukung jenis autentikasi berikut. Lihat bagian terkait untuk detailnya.
Autentikasi dasar
Untuk menggunakan autentikasi Dasar , selain properti generik yang dijelaskan di bagian sebelumnya, tentukan properti berikut:
Properti | Deskripsi | Wajib diisi |
---|---|---|
pengguna | Nama masuk untuk pengguna Snowflake. | Ya |
kata sandi | Kata sandi untuk pengguna Snowflake. Tandai bidang ini sebagai jenis SecureString untuk menyimpannya dengan aman. Atau, Anda dapat mereferensikan rahasia yang disimpan di Azure Key Vault. | Ya |
Contoh:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "Basic",
"user": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"role": "<role>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Kata sandi di Azure Key Vault:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "Basic",
"user": "<username>",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Catatan
Pemetaan Aliran Data hanya mendukung autentikasi Dasar.
Autentikasi pasangan kunci
Untuk menggunakan autentikasi Pasangan kunci, Anda perlu mengonfigurasi dan membuat pengguna autentikasi pasangan kunci di Snowflake dengan merujuk ke Autentikasi Pasangan Kunci & Rotasi Pasangan Kunci. Setelah itu, catat kunci privat dan frase sandi (opsional), yang Anda gunakan untuk menentukan layanan tertaut.
Selain properti generik yang dijelaskan di bagian sebelumnya, atur properti berikut:
Properti | Deskripsi | Wajib diisi |
---|---|---|
pengguna | Nama masuk untuk pengguna Snowflake. | Ya |
privateKey | Kunci privat yang digunakan untuk autentikasi pasangan kunci. Untuk memastikan kunci privat valid saat dikirim ke Azure Data Factory, dan mempertimbangkan bahwa file privateKey menyertakan karakter baris baru (\n), penting untuk memformat konten privateKey dengan benar dalam bentuk literal string-nya. Proses ini melibatkan penambahan \n secara eksplisit ke setiap baris baru. |
Ya |
privateKeyPassphrase | Frase sandi yang digunakan untuk mendekripsi kunci privat, jika dienkripsi. | No |
Contoh:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "KeyPair",
"user": "<username>",
"privateKey": {
"type": "SecureString",
"value": "<privateKey>"
},
"privateKeyPassphrase": {
"type": "SecureString",
"value": "<privateKeyPassphrase>"
},
"role": "<role>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Properti himpunan data
Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan himpunan data, lihat artikel Himpunan Data.
Properti berikut didukung untuk himpunan data Snowflake.
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis himpunan data harus diatur ke SnowflakeV2Table. | Ya |
skema | Nama skema. Perhatikan bahwa nama skema peka huruf besar-kecil. | Tidak untuk sumber, Ya untuk sink |
tabel | Nama tabel/tampilan. Perhatikan bahwa nama tabel peka huruf besar-kecil. | Tidak untuk sumber, Ya untuk sink |
Contoh:
{
"name": "SnowflakeV2Dataset",
"properties": {
"type": "SnowflakeV2Table",
"typeProperties": {
"schema": "<Schema name for your Snowflake database>",
"table": "<Table name for your Snowflake database>"
},
"schema": [ < physical schema, optional, retrievable during authoring > ],
"linkedServiceName": {
"referenceName": "<name of linked service>",
"type": "LinkedServiceReference"
}
}
}
Properti aktivitas salin
Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan aktivitas, lihat artikel Alur. Bagian ini menyediakan daftar properti yang didukung oleh sumber dan sink dari Snowflake.
Snowflake sebagai sumbernya
Konektor Snowflake menggunakan perintah COPY snowflake ke [lokasi] untuk mencapai performa terbaik.
Jika penyimpanan dan format data sink secara asli didukung oleh perintah SALINAN Snowflake, Anda dapat menggunakan aktivitas salin untuk langsung menyalin dari Snowflake ke sink. Untuk detailnya, lihatSalinan langsung dari Snowflake. Jika tidak, gunakan Salinanbertahap bawaan dari Snowflake.
Untuk menyalin data dari Snowflake, properti berikut ini didukung di bagianSalin sumberaktivitas.
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis sumber aktivitas Salin harus diatur ke SnowflakeV2Source. | Ya |
pertanyaan | Menentukan kueri SQL untuk membaca data dari Snowflake. Jika nama skema, tabel, dan kolom berisi huruf kecil, kutip pengidentifikasi objek dalam kueri, misalnyaselect * from "schema"."myTable" .Menjalankan prosedur tersimpan tidak didukung. |
No |
exportSettings | Pengaturan lanjutan digunakan untuk mengambil data dari Snowflake. Anda dapat mengonfigurasi yang didukung oleh COPY ke dalam perintah yang akan dilewati layanan saat Anda menjalankan pernyataan. | Ya |
Di bawah exportSettings : |
||
jenis | Jenis perintah ekspor, diatur keSnowflakeExportCopyCommand. | Ya |
storageIntegration | Tentukan nama integrasi penyimpanan yang Anda buat di Snowflake. Untuk langkah-langkah prasyarat penggunaan integrasi penyimpanan, lihat Mengonfigurasi integrasi penyimpanan Snowflake. | No |
additionalCopyOptions | Opsi salin tambahan, disediakan sebagai kamus pasangan bernilai kunci. Contoh: MAX_FILE_SIZE, TIMPA. Selengkapnya, lihat Opsi Salinan Snowflake. | No |
additionalFormatOptions | Opsi format file tambahan yang disediakan untuk SALIN perintah sebagai kamus pasangan nilai kunci. Contoh: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT, NULL_IF. Selengkapnya, lihat Opsi Jenis Format Snowflake. Saat Anda menggunakan NULL_IF, nilai NULL di Snowflake dikonversi ke nilai yang ditentukan (yang perlu dikutip tunggal) saat menulis ke file teks yang dibatasi dalam penyimpanan penahapan. Nilai yang ditentukan ini diperlakukan sebagai NULL saat membaca dari file penahapan ke penyimpanan sink. Nilai defaultnya adalah 'NULL' . |
No |
Catatan
Pastikan Anda memiliki izin untuk menjalankan perintah berikut dan mengakses skemaINFORMATION_SCHEMA dan tabel COLUMNS.
COPY INTO <location>
Salinan langsung dari Snowflake
Jika penyimpanan data dan format sink Anda memenuhi kriteria yang dijelaskan di bagian ini, Anda dapat menggunakan aktivitas Salin untuk langsung menyalin dari Snowflake ke sink. Layanan memeriksa pengaturan dan gagal menjalankan aktivitas Salin jika kriteria berikut tidak terpenuhi:
Saat Anda menentukan
storageIntegration
di sumber:Penyimpanan data sink adalah Azure Blob Storage yang Anda rujuk di tahap eksternal di Snowflake. Anda perlu menyelesaikan langkah-langkah berikut sebelum menyalin data:
Buat layanan tertaut Azure Blob Storage untuk sink Azure Blob Storage dengan jenis autentikasi yang didukung.
Berikan setidaknya peran Kontributor Data Blob Penyimpanan ke perwakilan layanan Snowflake di sink Azure Blob Storage Access Control (IAM).
Saat Anda tidak menentukan
storageIntegration
di sumber:Layananyang ditautkansink adalah penyimpanan Azure Blob denganautentikasi tanda tangan akses bersama. Jika Anda ingin langsung menyalin data ke Azure Data Lake Storage Gen2 dalam format yang didukung berikut, Anda dapat membuat layanan tertaut Azure Blob Storage dengan autentikasi SAS terhadap akun Azure Data Lake Storage Gen2 Anda, untuk menghindari penggunaan salinan bertahap dari Snowflake.
Formatdata sinkyaituParquet,teks yangdibatasi,atauJSONdengan konfigurasi berikut:
- Untuk formatParquet,kodek kompresi tidak ada,Snappy,atauLzo.
- Untuk format teks yang dibatasi:
-
rowDelimiter
adalah \r\n, atau karakter tunggal apa pun. -
compression
tidakadakompresi,gzip, bzip2ataukempis. -
encodingName
dibiarkan sebagai default atau diatur ke utf-8. -
quoteChar
merupakankutipan ganda,kutipan tunggal,atau untai kosong (tidak ada karakter kutipan).
-
- Untuk formatJSON, salinan langsung hanya mendukung kasus yang sumber tabel Snowflake atau hasil kueri hanya memiliki kolom tunggal dan jenis data kolom ini adalah VARIAN,OBJEK,atauARRAY.
-
compression
tidakadakompresi,gzip, bzip2ataukempis. -
encodingName
dibiarkan sebagai default atau diatur ke utf-8. -
filePattern
di sink aktivitas salin dibiarkan sebagai default atau diaturke setOfObjects.
-
Di sumber aktivitas salin,
additionalColumns
tidak ditentukan.Pemetaan kolom tidak ditentukan.
Contoh:
"activities":[
{
"name": "CopyFromSnowflake",
"type": "Copy",
"inputs": [
{
"referenceName": "<Snowflake input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "SnowflakeV2Source",
"query": "SELECT * FROM MYTABLE",
"exportSettings": {
"type": "SnowflakeExportCopyCommand",
"additionalCopyOptions": {
"MAX_FILE_SIZE": "64000000",
"OVERWRITE": true
},
"additionalFormatOptions": {
"DATE_FORMAT": "'MM/DD/YYYY'"
},
"storageIntegration": "< Snowflake storage integration name >"
}
},
"sink": {
"type": "<sink type>"
}
}
}
]
Salinan bertahap dari Snowflake
Saat penyimpanan atau format data sink Anda tidak kompatibel secara asli dengan perintah Snowflake COPY, seperti yang disebutkan di bagian terakhir, aktifkan salinan bertahap bawaan menggunakan instans penyimpanan Azure Blob sementara. Fitur salinan bertahap juga memberi Anda throughput yang lebih baik. Layanan mengekspor data dari Snowflake ke penyimpanan staging, lalu menyalin data ke sink, dan akhirnya membersihkan data sementara Anda dari penyimpanan staging. LihatSalinan bertahapuntuk detail tentang menyalin data dengan menggunakan cara bertahap.
Untuk menggunakan fitur ini, buat layanan tertaut penyimpanan Azure Blobyang merujuk ke akun penyimpanan Azure sebagai cara bertahap sementara. Lalu tentukan propertienableStaging
stagingSettings
dalam aktivitas Salin.
Saat Anda menentukan
storageIntegration
di sumbernya, penahapan sementara Azure Blob Storage harus menjadi salah satu yang Anda rujuk di tahap eksternal di Snowflake. Pastikan Anda membuat layanan tertaut Azure Blob Storage untuk layanan tersebut dengan autentikasi yang didukung, dan memberikan setidaknya peran Kontributor Data Blob Penyimpanan ke perwakilan layanan Snowflake dalam penahapan Azure Blob Storage Access Control (IAM).Saat Anda tidak menentukan
storageIntegration
di sumbernya, layanan tertaut Azure Blob Storage penahapan harus menggunakan autentikasi tanda tangan akses bersama, seperti yang diperlukan oleh perintah Snowflake COPY. Pastikan Anda memberikan izin akses yang tepat ke Snowflake dalam penahapan Azure Blob Storage. Untuk mempelajari lebih lengkap mengenai hal ini, lihat artikel ini.
Contoh:
"activities":[
{
"name": "CopyFromSnowflake",
"type": "Copy",
"inputs": [
{
"referenceName": "<Snowflake input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "SnowflakeV2Source",
"query": "SELECT * FROM MyTable",
"exportSettings": {
"type": "SnowflakeExportCopyCommand",
"storageIntegration": "< Snowflake storage integration name >"
}
},
"sink": {
"type": "<sink type>"
},
"enableStaging": true,
"stagingSettings": {
"linkedServiceName": {
"referenceName": "MyStagingBlob",
"type": "LinkedServiceReference"
},
"path": "mystagingpath"
}
}
}
]
Saat melakukan salinan bertahap dari Snowflake, sangat penting untuk mengatur Perilaku Salin Sink untuk Menggabungkan File. Pengaturan ini memastikan bahwa semua file yang dipartisi ditangani dan digabungkan dengan benar, mencegah masalah di mana hanya file terakhir yang dipartisi yang disalin.
Contoh Konfigurasi
{
"type": "Copy",
"source": {
"type": "SnowflakeSource",
"query": "SELECT * FROM my_table"
},
"sink": {
"type": "AzureBlobStorage",
"copyBehavior": "MergeFiles"
}
}
Catatan
Gagal mengatur Perilaku Salin Sink untuk Menggabungkan File hanya dapat mengakibatkan file terakhir yang dipartisi sedang disalin.
Snowflake sebagai sink
Konektor Snowflake yang menggunakan perintahSALINAN Snowflake ke [lokasi]untuk mendapatkan kinerja terbaik. Selain itu, mendukung penulisan data ke Snowflake di Azure.
Jika penyimpanan dan format data sink secara asli didukung oleh perintah SALINAN Snowflake, Anda dapat menggunakan aktivitas salin untuk langsung menyalin dari sumber ke Snowflake. Untuk detailnya, lihatSalinan langsung dari Snowflake. Jika tidak, gunakan salinanbertahap bawaan dari Snowflake.
Untuk menyalin data ke Snowflake, properti berikut ini didukung di bagian sinkaktivitas Salin.
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis sink aktivitas Salin, diatur ke SnowflakeV2Sink. | Ya |
preCopyScript | Tentukan kueri SQL untuk aktivitas Salin yang akan dijalankan sebelum menulis data ke dalam Snowflake di setiap proses. Gunakan properti ini untuk membersihkan data yang telah dimuat sebelumnya. | No |
importSettings | Pengaturan lanjutan digunakan untuk menulis data ke Snowflake. Anda dapat mengonfigurasi yang didukung oleh COPY ke dalam perintah yang akan dilewati layanan saat Anda menjalankan pernyataan. | Ya |
Di bawah importSettings : |
||
jenis | Jenis perintah ekspor, diatur keSnowflakeExportCopyCommand. | Ya |
storageIntegration | Tentukan nama integrasi penyimpanan yang Anda buat di Snowflake. Untuk langkah-langkah prasyarat penggunaan integrasi penyimpanan, lihat Mengonfigurasi integrasi penyimpanan Snowflake. | No |
additionalCopyOptions | Opsi salin tambahan, disediakan sebagai kamus pasangan bernilai kunci. Contoh: ON_ERROR, FORCE, LOAD_UNCERTAIN_FILES. Selengkapnya, lihat Opsi Salinan Snowflake. | No |
additionalFormatOptions | Opsi format file tambahan yang disediakan untuk perintah SALIN sebagai kamus pasangan nilai kunci. Contoh: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT. Selengkapnya, lihat Opsi Jenis Format Snowflake. | No |
Catatan
Pastikan Anda memiliki izin untuk menjalankan perintah berikut dan mengakses skemaINFORMATION_SCHEMA dan tabel COLUMNS.
SELECT CURRENT_REGION()
COPY INTO <table>
SHOW REGIONS
CREATE OR REPLACE STAGE
DROP STAGE
Salin langsung ke Snowflake
Jika penyimpanan data dan format sink Anda memenuhi kriteria yang dijelaskan di bagian ini, Anda dapat menggunakan aktivitas Salin untuk langsung menyalin dari Snowflake. Layanan memeriksa pengaturan dan gagal menjalankan aktivitas Salin jika kriteria berikut tidak terpenuhi:
Saat Anda menentukan
storageIntegration
di sink:Penyimpanan data sumber adalah Azure Blob Storage yang Anda rujuk di tahap eksternal di Snowflake. Anda perlu menyelesaikan langkah-langkah berikut sebelum menyalin data:
Buat layanan tertaut Azure Blob Storage untuk Azure Blob Storage sumber dengan jenis autentikasi yang didukung.
Berikan setidaknya peran Pembaca Data Blob Penyimpanan ke perwakilan layanan Snowflake di Sumber Azure Blob Storage Access Control (IAM).
Saat Anda tidak menentukan
storageIntegration
di sink:Layananyang ditautkansink adalah penyimpanan Azure Blob denganautentikasi tanda tangan aksesbersama. Jika Anda ingin langsung menyalin data dari Azure Data Lake Storage Gen2 dalam format yang didukung berikut, Anda dapat membuat layanan tertaut Azure Blob Storage dengan autentikasi SAS terhadap akun Azure Data Lake Storage Gen2 Anda, untuk menghindari penggunaan salinan bertahap ke Snowflake.
Formatsumber datayaituParquet,teks yangdibatasi,atauJSONdengan konfigurasi berikut:
Untuk formatParquet,kodek kompresi tidakada,Snappy.
Untuk format teks dibatasi:
-
rowDelimiter
adalah \r\n, atau karakter tunggal apa pun. Jika pemisah baris bukan "\r\n",firstRowAsHeader
perlu false, danskipLineCount
tidak ditentukan. -
compression
tidakadakompresi,gzip, bzip2ataukempis. -
encodingName
dibiarkan sebagai default atau diatur ke "UTF-8", "UTF-16", "UTF-16BE", "UTF-32", "UTF-32BE", "BIG5", "EUC-JP", "EUC-KR", "GB18030", "ISO-2022-JP", "ISO-2022-KR", "ISO-8859-1", "ISO-8859-2", "ISO-8859-2", "ISO-8859-2", "ISO-8859-2", "ISO-8859-2", "ISO-8859-2", "ISO-8859-2", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "WINDOWS-1250", "WINDOWS-1251", "WINDOWS-1252", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255". -
quoteChar
merupakankutipan ganda,kutipan tunggal,atau untai kosong (tidak ada karakter kutipan).
-
Untuk formatJSON, salinan langsung hanya mendukung kasus yang sumber tabel sink Snowflake hanya memiliki kolom tunggal dan jenis data kolom ini adalah VARIAN,OBJEK,atauARRAY.
-
compression
tidakadakompresi,gzip, bzip2ataukempis. -
encodingName
dibiarkan sebagai default atau diatur ke utf-8. - Pemetaan kolom tidak ditentukan.
-
Di sumber aktivitas Salin:
-
additionalColumns
tidak ditentukan. - Jika sumber Anda adalah folder,
recursive
diatur ke true. -
prefix
, ,modifiedDateTimeStart
modifiedDateTimeEnd
, danenablePartitionDiscovery
tidak ditentukan.
-
Contoh:
"activities":[
{
"name": "CopyToSnowflake",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Snowflake output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "SnowflakeV2Sink",
"importSettings": {
"type": "SnowflakeImportCopyCommand",
"copyOptions": {
"FORCE": "TRUE",
"ON_ERROR": "SKIP_FILE"
},
"fileFormatOptions": {
"DATE_FORMAT": "YYYY-MM-DD"
},
"storageIntegration": "< Snowflake storage integration name >"
}
}
}
}
]
Salin bertahap ke Snowflake
Saat penyimpanan atau format data sumber Anda tidak kompatibel secara asli dengan perintah Snowflake COPY, seperti yang disebutkan di bagian terakhir, aktifkan salinan bertahap bawaan menggunakan instans penyimpanan Azure Blob sementara. Fitur salinan bertahap juga memberi Anda throughput yang lebih baik. Layanan secara otomatis mengonversi data untuk memenuhi persyaratan format data Snowflake. Kemudian memanggil perintah SALIN untuk memuat data ke Snowflake. Akhirnya, membersihkan data sementara Anda dari penyimpanan blob. LihatSalinan bertahapuntuk detail tentang menyalin data dengan menggunakan cara bertahap.
Untuk menggunakan fitur ini, buat layanan tertaut penyimpanan Azure Blobyang merujuk ke akun penyimpanan Azure sebagai cara bertahap sementara. Lalu tentukan propertienableStaging
stagingSettings
dalam aktivitas Salin.
Saat Anda menentukan
storageIntegration
di sink, penahapan sementara Azure Blob Storage harus menjadi salah satu yang Anda rujuk di tahap eksternal di Snowflake. Pastikan Anda membuat layanan tertaut Azure Blob Storage untuk layanan tersebut dengan autentikasi yang didukung, dan memberikan setidaknya peran Pembaca Data Blob Penyimpanan ke perwakilan layanan Snowflake dalam penahapan Azure Blob Storage Access Control (IAM).Saat Anda tidak menentukan
storageIntegration
di sink, layanan tertaut Azure Blob Storage penahapan perlu menggunakan autentikasi tanda tangan akses bersama seperti yang diperlukan oleh perintah Snowflake COPY.
Contoh:
"activities":[
{
"name": "CopyToSnowflake",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Snowflake output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "SnowflakeV2Sink",
"importSettings": {
"type": "SnowflakeImportCopyCommand",
"storageIntegration": "< Snowflake storage integration name >"
}
},
"enableStaging": true,
"stagingSettings": {
"linkedServiceName": {
"referenceName": "MyStagingBlob",
"type": "LinkedServiceReference"
},
"path": "mystagingpath"
}
}
}
]
Properti pemetaan aliran data
Saat mengubah data dalam pemetaan aliran data, Anda dapat membaca dari dan menulis ke tabel di Snowflake. Untuk informasi selengkapnya, lihat transformasi sumber dan transformasi sink dalam aliran data pemetaan. Anda dapat memilih untuk menggunakan himpunan data Snowflake atau himpunan data sebaris sebagai jenis sumber dan sink.
Transformasi sumber
Tabel di bawah ini mencantumkan properti yang didukung oleh sumber Snowflake. Anda bisa mengedit properti ini di tab opsi Sumber. Konektor menggunakan transfer data internalSnowflake.
Nama | Deskripsi | Wajib diisi | Nilai yang diizinkan | Properti skrip aliran data |
---|---|---|---|---|
Tabel | Jika memilih Tabel sebagai input, aliran data akan mengambil semua data dari tabel yang ditentukan dalam himpunan data Snowflake atau di opsi sumber saat menggunakan himpunan data sebaris. | No | String |
(hanya untuk himpunan data sebaris) tableName schemaName |
Kueri | Jika memilih Kueri sebagai input, masukkan kueri untuk mengambil data dari Snowflake. Pengaturan ini menggantikan tabel apa pun yang telah Anda pilih dalam himpunan data. Jika nama skema, tabel, dan kolom berisi huruf kecil, kutip pengidentifikasi objek dalam kueri, misalnya select * from "schema"."myTable" . |
No | String | pertanyaan |
Aktifkan ekstrak inkremental (Pratinjau) | Gunakan opsi ini untuk memberi tahu ADF untuk hanya memproses baris yang telah berubah sejak terakhir kali alur dijalankan. | No | Boolean | enableCdc |
Kolom Inkremental | Saat menggunakan fitur ekstrak inkremental, Anda harus memilih kolom tanggal/waktu/numerik yang ingin Anda gunakan sebagai marka air di tabel sumber Anda. | No | String | waterMarkColumn |
Aktifkan Pelacakan Perubahan Snowflake (Pratinjau) | Opsi ini memungkinkan ADF memanfaatkan teknologi tangkapan data perubahan Snowflake untuk memproses hanya data delta sejak eksekusi alur sebelumnya. Opsi ini secara otomatis memuat data delta dengan operasi penyisipan baris, pembaruan, dan penghapusan tanpa memerlukan kolom tambahan apa pun. | No | Boolean | enableNativeCdc |
Perubahan Bersih | Saat menggunakan pelacakan perubahan snowflake, Anda dapat menggunakan opsi ini untuk mendapatkan baris yang diubah atau perubahan lengkap yang dikurangi. Baris yang dideduksi berubah hanya akan menampilkan versi terbaru baris yang telah berubah sejak titik waktu tertentu, sementara perubahan lengkap akan menunjukkan kepada Anda semua versi setiap baris yang telah berubah, termasuk yang dihapus atau diperbarui. Misalnya, jika Anda memperbarui baris, Anda akan melihat versi penghapusan dan versi sisipkan dalam perubahan lengkap, tetapi hanya versi sisipkan dalam baris yang diubah yang dideduksi. Tergantung pada kasus penggunaan Anda, Anda dapat memilih opsi yang sesuai dengan kebutuhan Anda. Opsi defaultnya adalah false, yang berarti perubahan lengkap. | No | Boolean | netChanges |
Sertakan Kolom sistem | Saat menggunakan pelacakan perubahan snowflake, Anda dapat menggunakan opsi systemColumns untuk mengontrol apakah kolom aliran metadata yang disediakan oleh Snowflake disertakan atau dikecualikan dalam output pelacakan perubahan. Secara default, systemColumns diatur ke true, yang berarti kolom aliran metadata disertakan. Anda dapat mengatur systemColumns ke false jika Anda ingin mengecualikannya. | No | Boolean | systemColumns |
Mulai membaca dari awal | Mengatur opsi ini dengan ekstrak inkremental dan pelacakan perubahan akan menginstruksikan ADF untuk membaca semua baris pada eksekusi pertama alur dengan ekstrak inkremental diaktifkan. | No | Boolean | skipInitialLoad |
Contoh skrip sumber Snowflake
Saat menggunakan himpunan data Snowflake sebagai jenis sumber, skrip aliran data terkait adalah:
source(allowSchemaDrift: true,
validateSchema: false,
query: 'select * from MYTABLE',
format: 'query') ~> SnowflakeSource
Jika menggunakan himpunan data sebaris, skrip aliran data terkait adalah:
source(allowSchemaDrift: true,
validateSchema: false,
format: 'query',
query: 'select * from MYTABLE',
store: 'snowflake') ~> SnowflakeSource
Pelacakan Perubahan Asli
Azure Data Factory sekarang mendukung fitur asli di Snowflake yang dikenal sebagai pelacakan perubahan, yang melibatkan pelacakan perubahan dalam bentuk log. Fitur snowflake ini memungkinkan kami melacak perubahan data dari waktu ke waktu sehingga berguna untuk tujuan pemuatan dan audit data bertahap. Untuk menggunakan fitur ini, saat Anda mengaktifkan Ubah penangkapan data dan memilih Pelacakan Perubahan Snowflake, kami membuat objek Stream untuk tabel sumber yang memungkinkan pelacakan perubahan pada tabel snowflake sumber. Selanjutnya, kami menggunakan klausa CHANGES dalam kueri kami untuk mengambil hanya data baru atau yang diperbarui dari tabel sumber. Selain itu, disarankan untuk menjadwalkan alur sehingga perubahan dikonsumsi dalam interval waktu retensi data yang ditetapkan untuk tabel sumber snowflake, pengguna lain mungkin melihat perilaku yang tidak konsisten dalam perubahan yang diambil.
Transformasi sink
Tabel di bawah ini mencantumkan properti yang didukung oleh sink Snowflake. Anda dapat mengedit properti ini di tab Pengaturan . Saat menggunakan himpunan data sebaris, Anda akan melihat pengaturan tambahan, yang sama dengan properti yang dijelaskan di bagian properti himpunan data. Konektor menggunakan transfer data internalSnowflake.
Nama | Deskripsi | Wajib diisi | Nilai yang diizinkan | Properti skrip aliran data |
---|---|---|---|---|
Perbarui() metode | Tentukan operasi apa yang diizinkan di tujuan Snowflake Anda. Untuk memperbarui, meningkatkan, atau menghapus baris, transformasi baris Alterdiperlukan untuk menandai baris untuk tindakan tersebut. |
Ya |
true atau false |
dapat dideletable dapat disisipkan dapat diperbarui dapat dibuat upsert |
Kolom kunci | Untuk pembaruan, upsert dan hapus, kolom kunci atau kolom harus diatur untuk menentukan baris mana yang akan diubah. | No | Array | kunci |
Tindakan pada tabel | Menentukan apakah akan membuat ulang atau menghapus semua baris dari tabel tujuan sebelum menulis. - Tidak Ada: Tidak ada tindakan yang akan dilakukan pada tabel. - Buat ulang: Tabel akan dihapus dan dibuat ulang. Diperlukan jika membuat tabel baru secara dinamis. - Kosongkan: Semua baris dari tabel target akan dihapus. |
No |
true atau false |
recreate Memotong |
Contoh skrip{i>
Saat menggunakan himpunan data Snowflake sebagai jenis sink, skrip aliran data terkait adalah:
IncomingStream sink(allowSchemaDrift: true,
validateSchema: false,
deletable:true,
insertable:true,
updateable:true,
upsertable:false,
keys:['movieId'],
format: 'table',
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> SnowflakeSink
Jika menggunakan himpunan data sebaris, skrip aliran data terkait adalah:
IncomingStream sink(allowSchemaDrift: true,
validateSchema: false,
format: 'table',
tableName: 'table',
schemaName: 'schema',
deletable: true,
insertable: true,
updateable: true,
upsertable: false,
store: 'snowflake',
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> SnowflakeSink
Pengoptimalan Pushdown Kueri
Dengan mengatur Tingkat Pengelogan alur ke Tidak Ada, kami mengecualikan transmisi metrik transformasi menengah, mencegah potensi penghambat ke pengoptimalan Spark dan memungkinkan pengoptimalan pushdown kueri yang disediakan oleh Snowflake. Pengoptimalan pushdown ini memungkinkan peningkatan performa yang substansial untuk tabel Snowflake besar dengan himpunan data yang luas.
Catatan
Kami tidak mendukung tabel sementara di Snowflake, karena mereka lokal untuk sesi atau pengguna yang membuatnya, membuatnya tidak dapat diakses oleh sesi lain dan rentan ditimpa sebagai tabel biasa oleh Snowflake. Meskipun Snowflake menawarkan tabel sementara sebagai alternatif, yang dapat diakses secara global, mereka memerlukan penghapusan manual, bertentangan dengan tujuan utama kami menggunakan tabel Temp yang untuk menghindari operasi penghapusan dalam skema sumber.
Properti aktivitas pencarian
Selengkapnya tentang properti, lihat Aktivitas pencarian.
Meningkatkan konektor Snowflake
Untuk meningkatkan konektor Snowflake, Anda dapat melakukan peningkatan berdampingan, atau peningkatan di tempat.
Peningkatan berdampingan
Untuk melakukan peningkatan berdampingan, selesaikan langkah-langkah berikut:
- Buat layanan tertaut Snowflake baru dan konfigurasikan dengan merujuk ke properti layanan tertaut V2.
- Buat himpunan data berdasarkan layanan tertaut Snowflake yang baru dibuat.
- Ganti layanan tertaut dan himpunan data baru dengan yang sudah ada di alur yang menargetkan objek V1.
Peningkatan di tempat
Untuk melakukan peningkatan di tempat, Anda perlu mengedit payload layanan tertaut yang ada dan memperbarui himpunan data untuk menggunakan layanan tertaut baru.
Perbarui jenis dari Snowflake ke SnowflakeV2.
Ubah payload layanan tertaut dari format V1-nya ke V2. Anda dapat mengisi setiap bidang dari antarmuka pengguna setelah mengubah jenis yang disebutkan di atas, atau memperbarui payload langsung melalui JSON Editor. Lihat bagian Properti layanan tertaut di artikel ini untuk properti koneksi yang didukung. Contoh berikut menunjukkan perbedaan payload untuk layanan tertaut Snowflake V1 dan V2:
Payload JSON layanan tertaut Snowflake V1:
{ "name": "Snowflake1", "type": "Microsoft.DataFactory/factories/linkedservices", "properties": { "annotations": [], "type": "Snowflake", "typeProperties": { "authenticationType": "Basic", "connectionString": "jdbc:snowflake://<fake_account>.snowflakecomputing.com/?user=FAKE_USER&db=FAKE_DB&warehouse=FAKE_DW&schema=PUBLIC", "encryptedCredential": "<your_encrypted_credential_value>" }, "connectVia": { "referenceName": "AzureIntegrationRuntime", "type": "IntegrationRuntimeReference" } } }
Payload JSON layanan tertaut Snowflake V2:
{ "name": "Snowflake2", "type": "Microsoft.DataFactory/factories/linkedservices", "properties": { "parameters": { "schema": { "type": "string", "defaultValue": "PUBLIC" } }, "annotations": [], "type": "SnowflakeV2", "typeProperties": { "authenticationType": "Basic", "accountIdentifier": "<FAKE_Account>", "user": "FAKE_USER", "database": "FAKE_DB", "warehouse": "FAKE_DW", "encryptedCredential": "<placeholder>" }, "connectVia": { "referenceName": "AutoResolveIntegrationRuntime", "type": "IntegrationRuntimeReference" } } }
Perbarui himpunan data untuk menggunakan layanan tertaut baru. Anda dapat membuat himpunan data baru berdasarkan layanan tertaut yang baru dibuat, atau memperbarui properti jenis himpunan data yang ada dari SnowflakeTable ke SnowflakeV2Table.
Perbedaan antara Snowflake V2 dan V1
Konektor Snowflake V2 menawarkan fungsionalitas baru dan kompatibel dengan sebagian besar fitur konektor Snowflake V1. Tabel di bawah ini memperlihatkan perbedaan fitur antara V2 dan V1.
Snowflake V2 | Snowflake V1 |
---|---|
Mendukung autentikasi pasangan Dasar dan Kunci. | Mendukung autentikasi Dasar. |
Parameter skrip saat ini tidak didukung dalam aktivitas Skrip. Sebagai alternatif, gunakan ekspresi dinamis untuk parameter skrip. Untuk informasi selengkapnya, lihat Ekspresi dan fungsi di Azure Data Factory dan Azure Synapse Analytics. | Mendukung parameter skrip dalam aktivitas Skrip. |
Mendukung BigDecimal dalam aktivitas Pencarian. Jenis NUMBER, seperti yang didefinisikan dalam Snowflake, akan ditampilkan sebagai string dalam aktivitas Pencarian. Jika Anda ingin menutupinya ke jenis numerik, Anda dapat menggunakan parameter alur dengan fungsi int atau fungsi float. Misalnya, int(activity('lookup').output.firstRow.VALUE) , float(activity('lookup').output.firstRow.VALUE) |
BigDecimal tidak didukung dalam aktivitas Pencarian. |
Properti accountIdentifier , warehouse , database , schema dan role digunakan untuk membuat koneksi. |
Properti connectionstring digunakan untuk membuat koneksi. |
jenis data tanda waktu di Snowflake dibaca sebagai jenis data DateTimeOffset dalam aktivitas Pencarian dan Skrip. | jenis data tanda waktu di Snowflake dibaca sebagai jenis data DateTime dalam aktivitas Pencarian dan Skrip. Jika Anda masih perlu menggunakan nilai Datetime sebagai parameter dalam alur Anda setelah meningkatkan konektor, Anda dapat mengonversi jenis DateTimeOffset ke jenis DateTime dengan menggunakan fungsi formatDateTime (disarankan) atau fungsi concat. Misalnya: formatDateTime(activity('lookup').output.firstRow.DATETIMETYPE) , concat(substring(activity('lookup').output.firstRow.DATETIMETYPE, 0, 19), 'Z') |
Konten terkait
Untuk daftar penyimpanan data yang didukung sebagai sumber dan sink oleh aktivitas Salin, lihat format dan penyimpanan data yang didukung.