Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam artikel ini, Anda akan menemukan kumpulan praktik terbaik untuk menggunakan kumpulan SQL nirserver. Kumpulan SQL nirserver adalah sumber daya di Azure Synapse Analytics. Jika Anda bekerja dengan kumpulan SQL khusus, lihat Praktik terbaik untuk kumpulan SQL khusus untuk panduan khusus.
Kumpulan SQL tanpa server memungkinkan Anda membuat kueri file di akun Azure Storage Anda. Benda tersebut tidak memiliki kemampuan penyimpanan atau pemasukan lokal. Semua file yang menjadi target kueri berada di luar kumpulan SQL tanpa server. Segala sesuatu yang terkait dengan membaca file dari penyimpanan mungkin berdampak pada performa kueri.
Beberapa pedoman umumnya adalah:
- Pastikan bahwa aplikasi klien Anda dikolokasikan dengan kumpulan SQL tanpa server.
- Jika Anda menggunakan aplikasi klien di luar Azure, pastikan Anda menggunakan kumpulan SQL tanpa server di wilayah yang dekat dengan komputer klien Anda. Contoh aplikasi klien termasuk Power BI Desktop, SQL Server Management Studio, dan Azure Data Studio.
- Pastikan bahwa penyimpanan dan kumpulan SQL tanpa server berada di wilayah yang sama. Contoh Storage termasuk Azure Data Lake Storage dan Azure Cosmos DB.
- Cobalah untuk mengoptimalkan tata letak penyimpanan menggunakan pemartisian dan menyimpan file Anda dalam rentang antara 100 MB dan 10 GB.
- Jika hasilnya berjumlah besar, pastikan Anda menggunakan SQL Server Management Studio atau Azure Data Studio dan bukan Azure Synapse Studio. Azure Synapse Studio adalah alat web yang tidak dirancang untuk menangani kumpulan hasil yang besar.
- Jika Anda memfilter hasil menurut kolom string, coba gunakan kolase
BIN2_UTF8. Untuk informasi selengkapnya tentang mengubah kolase, lihat Jenis kolase yang didukung untuk Synapse SQL. - Pertimbangkan untuk men-cache hasil di sisi klien dengan menggunakan mode impor Power BI atau Azure Analysis Services, dan refresh secara berkala. Kumpulan SQL tanpa server tidak dapat memberikan pengalaman interaktif dalam mode Kueri Langsung Power BI jika Anda menggunakan kueri kompleks atau memproses sejumlah besar data.
- Konkurensi maksimum tidak terbatas dan bergantung pada kompleksitas kueri dan jumlah data yang dipindai. Satu kumpulan SQL tanpa server dapat secara bersamaan menangani 1.000 sesi aktif yang mengeksekusi kueri ringan. Jumlahnya akan berkurang jika kueri lebih kompleks atau memindai data dalam jumlah yang lebih besar, jadi pertimbangkan untuk mengurangi konkurensi dan jalankan kueri dalam jangka waktu yang lebih lama jika memungkinkan.
Aplikasi klien dan koneksi jaringan
Pastikan bahwa aplikasi klien Anda tersambung ke ruang kerja Azure Synapse terdekat dengan koneksi optimal.
- Kolokasikan aplikasi klien dengan ruang kerja Azure Synapse. Jika menggunakan aplikasi seperti Power BI atau Azure Analysis Service, pastikan aplikasi tersebut berada di wilayah yang sama dengan tempat Anda menempatkan ruang kerja Azure Synapse. Jika diperlukan, buat ruang kerja terpisah yang dipasangkan dengan aplikasi klien Anda. Menempatkan aplikasi klien dan ruang kerja Azure Synapse di wilayah yang berbeda dapat menyebabkan latensi yang lebih besar dan streaming hasil yang lebih lambat.
- Jika Anda membaca data dari aplikasi lokal, pastikan ruang kerja Azure Synapse berada di wilayah yang dekat dengan lokasi Anda.
- Pastikan Anda tidak memiliki masalah bandwidth jaringan saat membaca sejumlah besar data.
- Jangan gunakan Azure Synapse Studio untuk mengembalikan sejumlah besar data. Azure Synapse Studio adalah alat web yang menggunakan protokol HTTPS untuk mentransfer data. Gunakan Azure Data Studio atau SQL Server Management Studio untuk membaca sejumlah besar data.
Penyimpanan dan tata letak konten
Berikut adalah praktik terbaik untuk penyimpanan dan tata letak konten di kumpulan SQL tanpa server.
Kolokasikan penyimpanan dan kumpulan SQL nirserver Anda
Untuk meminimalkan latensi, tempatkan akun Azure Storage atau penyimpanan analitik Azure Cosmos DB dan titik akhir SQL pool tanpa server Anda di lokasi yang sama. Akun penyimpanan dan titik akhir yang disiapkan saat pembuatan ruang kerja terletak di wilayah yang sama.
Untuk performa optimal, jika Anda mengakses akun penyimpanan lain dengan kumpulan SQL nirserver, pastikan mereka berada di wilayah yang sama. Jika mereka tidak berada di wilayah yang sama, akan ada peningkatan latensi untuk transfer jaringan data antara wilayah terpencil dan wilayah titik akhir.
Letakkan penyimpanan analitik Azure Cosmos DB dan kumpulan SQL serverless Anda
Pastikan bahwa penyimpanan analitik Azure Cosmos DB Anda ditempatkan di wilayah yang sama dengan ruang kerja Azure Synapse. Kueri lintas wilayah dapat menyebabkan latensi besar. Gunakan properti wilayah di string koneksi untuk secara eksplisit menentukan wilayah tempat penyimpanan analitik ditempatkan (lihat Kueri Azure Cosmos DB dengan menggunakan kumpulan SQL tanpa server): account=<database account name>;database=<database name>;region=<region name>'
Pembatasan Azure Storage
Beberapa aplikasi dan layanan dapat mengakses akun penyimpanan Anda. Pembatasan penyimpanan terjadi saat IOPS gabungan atau throughput yang dihasilkan oleh beban kerja kumpulan SQL tanpa server, aplikasi, dan layanan melebihi batas akun penyimpanan. Akibatnya, Anda akan mengalami efek negatif yang signifikan pada performa kueri.
Saat pembatasan terdeteksi, kumpulan SQL nirserver memiliki penanganan bawaan untuk mengatasinya. Kumpulan SQL tanpa server akan membuat permintaan ke penyimpanan pada laju yang lebih lambat sampai pembatasan telah teratasi.
Petunjuk / Saran
Untuk eksekusi kueri yang optimal, jangan membebani akun penyimpanan dengan beban kerja lainnya selama eksekusi kueri.
Siapkan file untuk kueri
Jika memungkinkan, Anda dapat menyiapkan file untuk performa yang lebih baik:
- Mengonversi file CSV dan JSON besar ke Parquet. Parquet adalah format kolom. Karena dikompresi, ukuran filenya lebih kecil dari file CSV atau JSON yang berisi data yang sama. Kumpulan SQL tanpa server dapat melompati kolom dan baris yang tidak diperlukan dalam kueri jika Anda membaca file Parquet. Kumpulan SQL tanpa server akan membutuhkan lebih sedikit waktu dan lebih sedikit permintaan penyimpanan untuk membacanya.
- Jika kueri menargetkan satu file besar, Anda akan mendapat manfaat dari memisahkannya menjadi beberapa file yang lebih kecil.
- Cobalah untuk menjaga ukuran file CSV Anda antara 100 MB dan 10 GB.
- Lebih baik memiliki file berukuran sama untuk satu jalur OPENROWSET atau lokasi tabel eksternal.
- Partisi data Anda dengan menyimpan partisi ke nama folder atau file yang berbeda. Lihat Menggunakan fungsi filename dan filepath untuk menargetkan partisi tertentu.
Pengoptimalan CSV
Berikut adalah praktik terbaik untuk menggunakan file CSV di kumpulan SQL tanpa server.
Gunakan PARSER_VERSION 2.0 untuk membuat kueri file CSV
Anda dapat menggunakan pengurai yang dioptimalkan performa saat Anda membuat kueri file CSV. Untuk detailnya, lihat PARSER_VERSION.
Membuat statistik untuk file CSV secara manual
Kumpulan SQL nirserver bergantung pada statistik untuk menghasilkan rencana eksekusi kueri yang optimal. Statistik secara otomatis dibuat untuk kolom menggunakan pengambilan sampel dan dalam banyak kasus persentase pengambilan sampel akan kurang dari 100%. Alur ini sama untuk setiap format file. Perlu diingat bahwa saat membaca CSV dengan pengambilan sampel parser versi 1.0 tidak didukung dan pembuatan statistik otomatis tidak akan terjadi dengan persentase pengambilan sampel kurang dari 100%. Untuk tabel kecil dengan perkiraan kardinalitas rendah (jumlah baris) pembuatan statistik otomatis akan dipicu dengan persentase pengambilan sampel 100%. Itu berarti bahwa fullscan dipicu dan statistik otomatis dibuat bahkan untuk CSV dengan parser versi 1.0. Jika statistik tidak dibuat secara otomatis, buat statistik secara manual untuk kolom yang Anda gunakan dalam kueri, terutama yang digunakan dalam DISTINCT, JOIN, WHERE, ORDER BY, dan GROUP BY. Periksa statistik di kumpulan SQL nirserver untuk detailnya.
Pengoptimalan Delta Lake
Berikut adalah praktik terbaik untuk menggunakan file Delta Lake di kumpulan SQL tanpa server.
Mengoptimalkan titik pemeriksaan
Performa kueri format Delta Lake dipengaruhi oleh jumlah file JSON dalam direktori _delta_log. Untuk memastikan performa optimal, hindari mengumpulkan terlalu banyak file JSON. Idealnya, log hanya boleh berisi file titik pemeriksaan Parquet terbaru tanpa file JSON tambahan. Namun, pengaturan ini mungkin tidak optimal untuk beban kerja yang banyak menulis.
Pendekatan yang seimbang adalah mempertahankan sekitar 10 file JSON di antara titik pemeriksaan, yang biasanya menawarkan performa yang baik untuk pembaca dan penulis. Berhati-hatilah dengan konfigurasi yang menunda pembuatan titik pemeriksaan, karena dapat menyebabkan akumulasi file JSON yang berlebihan dan menurunkan performa kueri.
Atur properti tabel berikut untuk memastikan titik pemeriksaan dibuat setelah setiap 10 file log JSON:
ALTER TABLE tableName SET TBLPROPERTIES ('delta.checkpointInterval' = '10')
Jenis data
Berikut adalah praktik terbaik untuk menggunakan jenis data di kumpulan SQL tanpa server.
Menggunakan jenis data yang sesuai
Jenis data yang Anda gunakan dalam kueri mempengaruhi performa dan keserentakan. Anda bisa mendapatkan performa yang lebih baik jika mengikuti pedoman berikut:
- Gunakan ukuran data terkecil yang akan mengakomodasi nilai terbesar yang memungkinkan.
- Jika panjang nilai karakter maksimum adalah 30 karakter, gunakan jenis data karakter dengan panjang 30.
- Jika semua nilai kolom karakter berukuran tetap, gunakan char atau nchar. Jika tidak, gunakan varchar atau nvarchar.
- Jika nilai kolom bilangan bulat maksimum adalah 500, gunakan smallint karena ini adalah jenis data terkecil yang dapat mengakomodasi nilai ini. Untuk informasi selengkapnya, lihat rentang jenis data bilangan bulat.
- Jika memungkinkan, gunakan varchar dan char alih-alih nvarchar dan nchar.
- Gunakan jenis varchar dengan beberapa kolase UTF8 jika Anda membaca data dari Parquet, Azure Cosmos DB, Delta Lake, atau CSV dengan pengodean UTF-8.
- Gunakan jenis varchar tanpa kolase UTF8 jika Anda membaca data dari file non-Unicode CSV (misalnya, ASCII).
- Gunakan tipe nvarchar jika Anda membaca data dari file CSV UTF-16.
- Gunakan jenis data berbasis bilangan bulat jika memungkinkan. Operasi SORT, JOIN, dan GROUP BY selesai lebih cepat pada bilangan bulat daripada pada data karakter.
- Jika Anda menggunakan inferensi skema, periksa jenis data yang disimpulkan dan timpa secara eksplisit dengan jenis yang lebih kecil jika memungkinkan.
Memeriksa jenis data yang disimpulkan
Inferensi skema membantu Anda menulis kueri dengan cepat dan menjelajahi data tanpa mengetahui skema file. Kemudahan ini mengakibatkan jenis data yang disimpulkan dapat lebih besar dari jenis data sesungguhnya. Perbedaan ini terjadi saat tidak ada cukup informasi dalam file sumber untuk memastikan jenis data yang sesuai digunakan. Misalnya, file Parquet tidak berisi metadata tentang panjang kolom karakter maksimum. Jadi kumpulan SQL nirserver menyimpulkannya sebagai varchar(8000).
Perlu diingat bahwa situasinya dapat berbeda jika tabel Spark terkelola dan eksternal yang dapat dibagikan terekspos di mesin SQL sebagai tabel eksternal. Tabel Spark menyediakan jenis data yang berbeda dari mesin Synapse SQL. Pemetaan antara jenis data tabel Spark dan jenis SQL dapat ditemukan di sini.
Anda bisa menggunakan prosedur tersimpan sistem sp_describe_first_results_set untuk memeriksa tipe data kueri Anda yang dihasilkan.
Contoh berikut menunjukkan bagaimana Anda dapat mengoptimalkan jenis data yang disimpulkan. Prosedur ini digunakan untuk menunjukkan jenis data yang disimpulkan:
EXEC sp_describe_first_result_set N'
SELECT
vendor_id, pickup_datetime, passenger_count
FROM
OPENROWSET(
BULK ''https://sqlondemandstorage.blob.core.windows.net/parquet/taxi/*/*/*'',
FORMAT=''PARQUET''
) AS nyc';
Berikut set hasilnya:
| tersembunyi | kolom_berurutan | nama | nama_tipe_sistem | panjang_maksimum |
|---|---|---|---|---|
| 0 | 1 | ID Pemasok | varchar(8000) | delapan ribu |
| 0 | 2 | waktu_penjemputan | datetime2(7) | 8 |
| 0 | 3 | jumlah_penumpang | int (integer) | 4 |
Setelah mengetahui jenis data yang disimpulkan untuk kueri, Anda dapat menentukan jenis data yang sesuai:
SELECT
vendorID, tpepPickupDateTime, passengerCount
FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=2018/puMonth=*/*.snappy.parquet',
FORMAT='PARQUET'
)
WITH (
vendorID varchar(4), -- we used length of 4 instead of the inferred 8000
tpepPickupDateTime datetime2,
passengerCount int
) AS nyc;
Pengoptimalan filter
Berikut adalah praktik terbaik untuk menggunakan kueri di kumpulan SQL tanpa server.
Pindahkan karakter pengganti ke tingkat yang lebih rendah di jalur
Anda dapat menggunakan wildcard di jalur Anda untuk mengkueri beberapa file dan folder. Kumpulan SQL tanpa server mencantumkan file di akun penyimpanan Anda, mulai dari tanda bintang yang pertama (*), dengan menggunakan API penyimpanan. Kumpulan ini menghilangkan file yang tidak cocok dengan jalur yang ditentukan. Mengurangi daftar awal file dapat meningkatkan performa jika ada banyak file yang cocok dengan jalur yang ditentukan hingga kartubebas pertama.
Gunakan fungsi filename dan filepath untuk menargetkan partisi tertentu
Data sering diatur dalam partisi. Anda dapat menginstruksikan kumpulan SQL nirserver untuk membuat kueri folder dan file tertentu. Melakukannya akan mengurangi jumlah file dan jumlah data yang perlu dibaca dan diproses oleh kueri. Bonus tambahan adalah Anda akan mencapai performa yang lebih baik.
Untuk informasi selengkapnya, baca tentang fungsi filename dan filepath dan lihat contoh untuk membuat kueri file tertentu.
Petunjuk / Saran
Selalu transmisikan hasil fungsi filepath dan filename ke jenis data yang sesuai. Jika Anda menggunakan jenis data karakter, pastikan untuk menggunakan panjang yang sesuai.
Fungsi yang digunakan untuk penghapusan partisi, filepath, dan nama file, saat ini tidak didukung untuk tabel eksternal, selain yang dibuat secara otomatis untuk setiap tabel yang dibuat di Apache Spark untuk Azure Synapse Analytics.
Jika data tersimpan Anda tidak dipartisi, pertimbangkan untuk mempartisinya. Dengan begitu Anda dapat menggunakan fungsi-fungsi ini untuk mengoptimalkan kueri yang menargetkan file-file tersebut. Saat Anda menjalankan kueri pada tabel Apache Spark yang dipartisi untuk Azure Synapse dari kumpulan SQL tanpa server, kueri tersebut akan secara otomatis menargetkan hanya file yang diperlukan.
Gunakan pengurutan yang tepat untuk memanfaatkan penghimpitan predikat pada kolom karakter
Data dalam file Parquet diatur dalam kelompok baris. Kumpulan SQL tanpa server melompati grup baris berdasarkan predikat yang ditentukan dalam klausul WHERE, yang mengurangi IO. Hasilnya adalah peningkatan performa kueri.
Pushdown predikat untuk kolom karakter dalam file Parquet didukung untuk kolase Latin1_General_100_BIN2_UTF8 saja. Anda dapat menentukan kolase untuk kolom tertentu menggunakan klausul WITH. Jika Anda tidak menentukan kolase ini menggunakan klausul WITH, kolase database akan digunakan.
Optimalkan kueri yang berulang
Berikut adalah praktik terbaik untuk menggunakan CETAS di kumpulan SQL tanpa server.
Gunakan CETAS guna meningkatkan performa kueri dan gabungan
CETAS adalah salah satu fitur terpenting yang tersedia di kumpulan SQL nirserver. CETAS adalah operasi paralel yang membuat metadata tabel eksternal dan mengekspor hasil kueri SELECT ke set file di akun penyimpanan Anda.
Anda dapat menggunakan CETAS untuk membuat bagian kueri yang sering digunakan, seperti tabel referensi yang digabungkan, ke set file baru. Anda kemudian dapat bergabung ke tabel eksternal tunggal ini alih-alih mengulangi gabungan umum dalam beberapa kueri.
Karena CETAS menghasilkan file Parquet, statistik akan dibuat secara otomatis saat pertama kali kueri menargetkan tabel eksternal ini. Hasilnya adalah peningkatan performa untuk kueri-kueri berikutnya yang menargetkan tabel yang dihasilkan dengan CETAS.
Mengkueri data Azure
Kumpulan SQL tanpa server memungkinkan Anda membuat kueri data di Azure Storage atau Azure Cosmos DB dengan menggunakan tabel eksternal dan fungsi OPENROWSET. Pastikan Anda memiliki pengaturan izin yang tepat di penyimpanan Anda.
Mengkueri data CSV
Pelajari cara mengkueri satu file CSV atau folder dan beberapa file CSV. Anda juga dapat mengkueri file yang dipartisi
Meminta data Parquet
Pelajari cara mengakses file Parquet dengan tipe bersarang. Anda juga dapat mengkueri file yang dipartisi.
Kueri Delta Lake
Pelajari cara melakukan kueri pada file Delta Lake dengan tipe bersarang.
Mengkueri data Azure Cosmos DB
Pelajari cara mengkueri penyimpanan analitik Azure Cosmos DB. Anda dapat menggunakan generator online untuk membuat klausa WITH berdasarkan contoh dokumen Azure Cosmos DB. Anda dapat membuat tampilan di atas kontainer Azure Cosmos DB.
Kueri data JSON
Pelajari cara mengkueri file JSON. Anda juga dapat mengkueri file yang dipartisi.
Membuat tampilan, tabel, dan objek database lainnya
Pelajari cara membuat dan menggunakan tampilan dan tabel eksternal atau menyiapkan keamanan tingkat baris. Jika Anda memiliki file yang dipartisi, pastikan Anda menggunakan tampilan yang dipartisi.
Menyalin dan mengubah data (CETAS)
Pelajari cara menyimpan hasil kueri ke penyimpanan dengan menggunakan perintah CETAS.
Langkah berikutnya
- Tinjau artikel pemecahan masalah kumpulan SQL tanpa server untuk solusi masalah umum.
- Jika Anda bekerja dengan kumpulan SQL khusus dan bukan kumpulan SQL tanpa server, lihat Praktik terbaik untuk kumpulan SQL khusus untuk mendapatkan panduan tertentu.
- Tanya jawab umum Tentang Azure Synapse Analytics
- Memberikan izin kepada identitas terkelola ruang kerja