File penyimpanan kueri dengan kumpulan SQL tanpa server di Azure Synapse Analytics
Kumpulan SQL tanpa server memungkinkan Anda untuk mengkueri data dalam data lake Anda. Kumpulan ini menawarkan area permukaan kueri T-SQL yang mengakomodasi kueri data semi terstruktur dan tidak terstruktur. Untuk kueri, aspek T-SQL berikut didukung:
- Area permukaan SELECT penuh, termasuk sebagian besar fungsi dan operator SQL.
- CREATE EXTERNAL TABLE AS SELECT (CETAS) membuat tabel eksternal lalu mengekspor, secara paralel, hasil dari pernyataan Transact-SQL SELECT ke Azure Storage.
Untuk informasi selengkapnya tentang apa yang sedang vs. apa yang saat ini tidak didukung, baca artikel ringkasan kumpulan SQL tanpa server, atau artikel berikut:
- Mengembangkan akses penyimpanan di mana Anda dapat mempelajari cara menggunakan Tabel eksternal dan fungsi OPENROWSET untuk membaca data dari penyimpanan.
- Mengontrol akses penyimpanan di mana Anda dapat mempelajari cara mengaktifkan Synapse SQL untuk mengakses penyimpanan menggunakan autentikasi SAS, atau Identitas Terkelola ruang kerja.
Gambaran Umum
Untuk mendukung pengalaman yang mulus untuk kueri data yang terletak di file Azure Storage, kumpulan SQL tanpa server menggunakan fungsi OPENROWSET dengan kemampuan tambahan:
- Kueri beberapa file atau folder
- Format file PARQUET
- Kueri CSV dan teks berbatas (terminator bidang, terminator baris, char escape)
- Format DELTA LAKE
- Membaca subset kolom yang dipilih
- Inferensi skema
- fungsi filename
- fungsi filepath
- Bekerja dengan jenis kompleks dan struktur data bersarang atau berulang
Kueri file PARQUET
Untuk mengkueri data sumber Parquet, gunakan FORMAT = 'PARQUET':
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Tinjau artikel Kueri file Parquet untuk contoh penggunaan.
Kueri file CSV
Untuk mengkueri data sumber CSV, gunakan FORMAT = 'CSV'. Anda dapat menentukan skema file CSV sebagai bagian dari fungsi OPENROWSET
saat Anda mengkueri file CSV:
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.csv', FORMAT = 'CSV', PARSER_VERSION='2.0')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Ada beberapa opsi tambahan yang dapat digunakan untuk menyesuaikan aturan penguraian ke format CSv kustom:
- ESCAPE_CHAR = ‘char’ Menentukan karakter dalam file yang digunakan untuk melepaskan karakter tersebut dan semua nilai pemisah dalam file. Jika karakter escape diikuti oleh nilai selain nilainya sendiri, atau salah satu nilai pembatas, karakter escape akan dihilangkan saat membaca nilai. Parameter ESCAPE_CHAR akan diterapkan baik saat FIELDQUOTE diaktifkan atau tidak. Parameter ini tidak akan digunakan untuk melepaskan karakter tanda kutip. Karakter tanda kutip harus dipisahkan dengan karakter tanda kutip lainnya. Karakter kutipan dapat muncul dalam nilai kolom hanya jika nilai dienkapsulasi dengan karakter kutipan.
- FIELDTERMINATOR ='field_terminator' Menentukan terminator bidang yang akan digunakan. Terminator bidang defaultnya adalah koma (" , ")
- ROWTERMINATOR ='row_terminator' Menentukan terminator baris yang akan digunakan. Terminator baris default adalah karakter baris baru: \r\n.
Kueri format DELTA LAKE
Untuk mengkueri data sumber Delta Lake, gunakan FORMAT = 'DELTA' dan referensikan folder akar yang berisi file Delta Lake Anda.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder', FORMAT = 'DELTA')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Folder akar harus berisi subfolder yang disebut _delta_log
.
Tinjau artikel kueri format Delta Lake untuk contoh penggunaan.
Skema file
Bahasa SQL dalam Synapse SQL memungkinkan Anda menentukan skema file sebagai bagian dari fungsi OPENROWSET
dan membaca semua atau subset kolom, atau mencoba menentukan jenis kolom secara otomatis dari file menggunakan inferensi skema.
Membaca subset kolom yang dipilih
Untuk menentukan kolom yang ingin Anda baca, Anda dapat memberikan klausul WITH opsional dalam pernyataan OPENROWSET
Anda.
- Jika ada file data CSV, untuk membaca semua kolom, masukkan nama kolom dan jenis datanya. Jika Anda menginginkan subset kolom, gunakan nomor urut untuk memilih kolom dari file data asal berdasarkan urutan. Kolom akan terikat oleh penunjukan urutan.
- Jika ada file data Parquet, masukkan nama kolom yang sesuai dengan nama kolom di file data asal. Kolom akan terikat menurut nama.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
WITH (
C1 int,
C2 varchar(20),
C3 varchar(max)
) as rows
Untuk setiap kolom, Anda perlu menentukan nama kolom dan mengetikkan klausul WITH
.
Untuk sampel, lihat Membaca file CSV tanpa menentukan semua kolom.
Inferensi skema
Dengan menghilangkan klausul WITH dari pernyataan OPENROWSET
, Anda dapat menginstruksikan layanan untuk mendeteksi (menyimpulkan) skema secara otomatis dari file yang mendasarinya.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
Pastikan jenis data yang disimpulkan yang sesuai digunakan demi performa optimal.
Kueri beberapa file atau folder
Untuk menjalankan kueri T-SQL terhadap suatu set file dalam folder atau suatu set folder selagi memperlakukannya sebagai entitas tunggal atau rowset, sediakan jalur ke folder atau pola (menggunakan kartubebas) terhadap suatu set file atau folder.
Aturan berikut ini akan berlaku:
- Pola dapat muncul baik di sebagian jalur direktori atau dalam nama file.
- Beberapa pola dapat muncul di langkah direktori atau nama file yang sama.
- Jika ada beberapa kartubebas, maka file dalam semua jalur yang cocok akan disertakan dalam set file yang dihasilkan.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/myroot/*/mysubfolder/*.parquet', FORMAT = 'PARQUET' ) as rows
Lihat Kueri folder dan beberapa file untuk contoh penggunaan.
Fungsi metadata file
Fungsi filename
Fungsi ini menampilkan nama file asal baris tersebut.
Untuk mengkueri file tertentu, baca bagian Filename di artikel Kueri file tertentu.
Jenis data yang ditampilkan adalah nvarchar(1024). Demi performa optimal, selalu transmisikan hasil fungsi filename ke jenis data yang sesuai. Jika Anda menggunakan jenis data karakter, pastikan menggunakan panjang yang sesuai.
Fungsi filepath
Fungsi ini menampilkan jalur lengkap atau bagian dari jalur:
- Ketika dipanggil tanpa parameter, menampilkan jalur file lengkap asal baris tersebut.
- Ketika dipanggil dengan parameter, menampilkan bagian dari jalur yang cocok dengan kartubebas pada posisi yang ditentukan dalam parameter. Misalnya, nilai parameter 1 akan mengembalikan bagian dari jalur yang cocok dengan kartubebas pertama.
Untuk informasi tambahan, baca bagian Filepath di artikel Kueri file tertentu.
Jenis data yang ditampilkan adalah nvarchar(1024). Demi performa optimal, selalu transmisikan hasil fungsi filepath ke jenis data yang sesuai. Jika Anda menggunakan jenis data karakter, pastikan menggunakan panjang yang sesuai.
Bekerja dengan jenis kompleks dan struktur data bersarang atau berulang
Untuk mengaktifkan pengalaman yang lancar dengan data yang disimpan dalam jenis data bersarang atau berulang, seperti dalam file Parquet, kumpulan SQL tanpa server telah menambahkan ekstensi yang mengikuti.
Memproyeksikan data bersarang atau berulang
Untuk memproyeksikan data, jalankan pernyataan SELECT terhadap file Parquet yang berisi kolom jenis data bersarang. Pada output, nilai bersarang akan diserialisasikan menjadi JSON dan dikembalikan sebagai jenis data SQL varchar(8000).
SELECT * FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
Untuk informasi selengkapnya, lihat bagian Memproyeksikan data bersarang atau berulang dari artikel Kueri jenis Parquet bersarang.
Mengakses elemen dari kolom bersarang
Untuk mengakses elemen bersarang dari kolom bersarang, seperti Struct, gunakan "notasi titik" untuk menggabungkan nama bidang ke dalam jalur. Masukkan jalur sebagai column_name dalam klausul WITH dari fungsi OPENROWSET
.
Contoh fragmen sintaksnya adalah sebagai berikut:
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
WITH ({'column_name' 'column_type',})
[AS alias]
'column_name' ::= '[field_name.] field_name'
Secara default, fungsi OPENROWSET
ini cocok dengan nama dan jalur bidang sumber dengan nama kolom yang disediakan dalam klausul WITH. Elemen yang terkandung pada tingkat bersarang lain dalam file Parquet sumber yang sama dapat diakses melalui klausul WITH.
Mengembalikan nilai
- Fungsi akan menampilkan nilai skalar, seperti int, desimal, dan varchar, dari elemen yang ditentukan, dan pada jalur yang ditentukan, untuk semua jenis Parquet yang tidak berada dalam grup Jenis Bersarang.
- Jika jalur menunjuk ke elemen yang berasal dari Jenis Bersarang, fungsi akan mengembalikan fragmen JSON dimulai dari elemen atas pada jalur yang ditentukan. Fragmen JSON adalah dari jenis varchar (8000).
- Jika properti tidak dapat ditemukan di halaman column_name yang ditentukan, fungsi akan menampilkan kesalahan.
- Jika properti tidak dapat ditemukan di column_path yang ditentukan, bergantung pada Mode jalur, fungsi akan menampilkan kesalahan saat dalam mode ketat atau null saat dalam mode lax.
Untuk sampel kueri, tinjau elemen Akses dari bagian kolom bersarang di artikel Kueri jenis Parquet bersarang.
Mengakses elemen dari kolom berulang
Untuk mengakses elemen dari kolom berulang, seperti elemen Array atau Peta, gunakan fungsi JSON_VALUE untuk setiap elemen skalar yang perlu Anda proyeksi dan berikan:
- Kolom bersarang atau berulang, sebagai parameter pertama
- Jalur JSON yang menentukan elemen atau properti yang akan diakses, sebagai parameter kedua
Untuk mengakses elemen non-skalar dari kolom berulang, gunakan fungsi JSON_QUERY untuk setiap elemen non-skalar yang perlu Anda proyeksikan dan berikan:
- Kolom bersarang atau berulang, sebagai parameter pertama
- Jalur JSON yang menentukan elemen atau properti yang akan diakses, sebagai parameter kedua
Lihat fragmen sintaks di bawah ini:
SELECT
{ JSON_VALUE (column_name, path_to_sub_element), }
{ JSON_QUERY (column_name [ , path_to_sub_element ]), )
FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
Anda dapat menemukan sampel kueri untuk mengakses elemen dari kolom berulang di artikel Kueri jenis Parquet bersarang.
Kueri sampel
Anda dapat mempelajari selengkapnya tentang kueri berbagai jenis data menggunakan kueri sampel.
Alat
Alat yang Anda perlukan untuk mengeluarkan kueri: - Azure Synapse Studio - Azure Data Studio - SQL Server Management Studio
Penyiapan demo
Langkah pertama Anda adalah membuat database tempat Anda akan menjalankan kueri. Kemudian Anda akan menginisialisasi objek dengan menjalankan skrip penyiapan pada database tersebut.
Skrip penyiapan ini akan membuat sumber data, kredensial lingkup database, dan format file eksternal yang digunakan untuk membaca data dalam sampel ini.
Catatan
Database hanya digunakan untuk menampilkan metadata, bukan untuk data aktual. Tuliskan nama database yang Anda gunakan, Anda akan membutuhkannya nanti.
CREATE DATABASE mydbname;
Data demo yang disediakan
Data demo berisi set data berikut ini:
- NYC Taxi - Yellow Taxi Trip Records - bagian dari data NYC publik yang diatur dalam format CSV dan Parquet
- Set data populasi dalam format CSV
- File Parquet sampel dengan kolom bersarang
- Buku dalam format JSON
Jalur folder | Deskripsi |
---|---|
/csv/ | Folder induk untuk data dalam format CSV |
/csv/population/ /csv/population-unix/ /csv/population-unix-hdr/ /csv/population-unix-hdr-escape /csv/population-unix-hdr-quoted |
Folder dengan file data Populasi dalam format CSV yang berbeda. |
/csv/taxi/ | Folder dengan file data publik NYC dalam format CSV |
/parquet/ | Folder induk untuk data dalam format Parquet |
/parquet/taxi | File data publik NYC dalam format Parquet, yang dibagi berdasarkan tahun, dan bulan menggunakan skema partisi Apache Hive/Hadoop. |
/parquet/nested/ | File Parquet sampel dengan kolom bersarang |
/json/ | Folder induk untuk data dalam format JSON |
/json/books/ | File JSON dengan data buku |
Langkah berikutnya
Untuk informasi selengkapnya tentang cara mengkueri berbagai jenis file, dan untuk membuat serta menggunakan tampilan, lihat artikel berikut ini:
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk