Bagikan melalui


File kueri Parquet menggunakan kumpulan SQL tanpa server di Azure Synapse Analytics

Dalam artikel ini, Anda akan mempelajari cara menulis kueri menggunakan kumpulan SQL tanpa server yang akan membaca file Parquet.

Contoh mulai cepat

Fungsi OPENROWSET memungkinkan Anda membaca konten file parquet dengan memberikan URL ke file Anda.

Baca file parquet

Cara termudah untuk melihat konten file PARQUET Anda adalah dengan memberikan URL file ke fungsi OPENROWSET dan menentukan parquet FORMAT. Jika file tersedia untuk umum atau jika identitas Microsoft Entra Anda dapat mengakses file ini, Anda akan dapat melihat konten file menggunakan kueri seperti yang diperlihatkan dalam contoh berikut:

select top 10 *
from openrowset(
    bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',
    format = 'parquet') as rows

Pastikan Anda bisa mengakses file ini. Jika file Anda dilindungi dengan kunci SAS atau identitas Azure kustom, Anda harus menyiapkan kredensial tingkat server untuk masuk sql.

Penting

Pastikan Anda menggunakan kolase database UTF-8 (misalnya Latin1_General_100_BIN2_UTF8) karena nilai string dalam file PARQUET dikodekan menggunakan pengodean UTF-8. Ketidakcocokan antara pengodean teks dalam file PARQUET dan kolase dapat menyebabkan kesalahan konversi yang tidak terduga. Anda dapat dengan mudah mengubah kolase default database saat ini menggunakan pernyataan T-SQL berikut: ALTER DATABASE CURRENT COLLATE Latin1_General_100_BIN2_UTF8; Untuk informasi selengkapnya tentang kolase, lihat Jenis kolase yang didukung untuk Synapse SQL.

Jika Anda menggunakan Latin1_General_100_BIN2_UTF8 kolase Anda akan mendapatkan dorongan kinerja tambahan dibandingkan dengan kolase lainnya. Kolase Latin1_General_100_BIN2_UTF8 kompatibel dengan aturan penyortiran string parket. Kumpulan SQL mampu menghilangkan beberapa bagian file parket yang tidak akan berisi data yang dibutuhkan dalam kueri (pemangkasan segmen file/kolom). Jika Anda menggunakan kolase lain, semua data dari file parket akan dimuat ke synapse SQL dan penyaringan terjadi dalam proses SQL. Kolase Latin1_General_100_BIN2_UTF8 memiliki pengoptimalan performa tambahan yang hanya berfungsi untuk parquet dan Cosmos DB. Kelemahannya adalah bahwa Anda kehilangan aturan perbandingan terperinci seperti ketidakpekaan huruf besar atau kecil.

Penggunaan sumber data

Contoh sebelumnya menggunakan jalur lengkap ke file. Sebagai alternatif, Anda dapat membuat sumber data eksternal dengan lokasi yang mengarah ke folder akar penyimpanan, dan menggunakan sumber data tersebut dan jalur relatif ke file dalam fungsi OPENROWSET:

create external data source covid
with ( location = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases' );
go
select top 10 *
from openrowset(
        bulk 'latest/ecdc_cases.parquet',
        data_source = 'covid',
        format = 'parquet'
    ) as rows

Jika sumber data dilindungi dengan kunci SAS atau identitas kustom, Anda bisa mengonfigurasi sumber data dengan info masuk lingkup database.

Secara eksplisit menentukan skema

OPENROWSET memungkinkan Anda secara eksplisit menentukan kolom apa yang ingin Anda baca dari file menggunakan klausul WITH:

select top 10 *
from openrowset(
        bulk 'latest/ecdc_cases.parquet',
        data_source = 'covid',
        format = 'parquet'
    ) with ( date_rep date, cases int, geo_id varchar(6) ) as rows

Penting

Pastikan Anda kedaluwarsa menentukan beberapa kolase UTF-8 (misalnya) untuk Latin1_General_100_BIN2_UTF8 semua kolom string dalam kausul WITH atau mengatur beberapa kolase UTF-8 di tingkat database. Ketidakcocokan antara pengkodean teks dalam file dan kolase kolom string dapat menyebabkan kesalahan konversi yang tidak terduga. Anda dapat dengan mudah mengubah kolase default database saat ini menggunakan pernyataan T-SQL berikut: ALTER DATABASE CURRENT COLLATE Latin1_General_100_BIN2_UTF8; Anda dapat dengan mudah mengatur kolase pada jenis colum, misalnya: geo_id varchar(6) collate Latin1_General_100_BIN2_UTF8 Untuk informasi selengkapnya tentang kolase, lihat Jenis kolase yang didukung untuk Synapse SQL.

Di bagian berikut, Anda bisa melihat cara mengkueri berbagai jenis file PARQUET.

Prasyarat

Langkah pertama Anda adalah membuat database dengan sumber data yang mereferensikan akun penyimpanan Taksi Kuning NYC. Kemudian menginisialisasi objek dengan mengeksekusi skrip penyiapan pada database itu. Skrip penyetelan ini akan membuat sumber data, info masuk lingkup database, dan format file eksternal yang digunakan dalam sampel ini.

Dataset

Himpunan data Taksi Kuning NYC digunakan dalam sampel ini. Anda dapat mengueri file Parquet dengan cara yang sama seperti Anda membaca file CSV. Satu-satunya perbedaan adalah bahwa perameter FILEFORMAT harus diatur ke PARQUET. Contoh dalam artikel ini memperlihatkan secara spesifik pembacaan file Parquet.

Kumpulan kueri file parquet

Anda hanya bisa menentukan kolom minat saat Anda mengueri file Parquet.

SELECT
        YEAR(tpepPickupDateTime),
        passengerCount,
        COUNT(*) AS cnt
FROM  
    OPENROWSET(
        BULK 'puYear=2018/puMonth=*/*.snappy.parquet',
        DATA_SOURCE = 'YellowTaxi',
        FORMAT='PARQUET'
    ) WITH (
        tpepPickupDateTime DATETIME2,
        passengerCount INT
    ) AS nyc
GROUP BY
    passengerCount,
    YEAR(tpepPickupDateTime)
ORDER BY
    YEAR(tpepPickupDateTime),
    passengerCount;

Inferensi skema otomatis

Anda tidak perlu menggunakan klausul OPENROWSET WITH saat membaca file Parquet. Nama kolom dan tipe data secara otomatis dibaca dari file Parquet.

Perlu diingat bahwa jika Anda membaca jumlah file sekaligus, skema, nama kolom, dan jenis data akan disimpulkan dari layanan file pertama yang diperoleh dari penyimpanan. Ini dapat berarti bahwa beberapa kolom yang diharapkan dihilangkan, semua karena file yang digunakan oleh layanan untuk menentukan skema tidak berisi kolom ini. Untuk menentukan skema secara eksplisit, silakan gunakan klausa OPENROWSET WITH.

Sampel berikut menunjukkan kemampuan inferensi skema otomatis untuk file Parquet. Kemampuan tersebut mengembalikan jumlah baris pada September 2018 tanpa menentukan skema.

Catatan

Anda tidak harus menentukan kolom dalam klausul OPENROWSET WITH saat membaca file Parquet. Dalam hal ini, layanan kueri kumpulan SQL tanpa server menggunakan metadata dalam file Parquet dan mengikat kolom berdasarkan nama.

SELECT TOP 10 *
FROM  
    OPENROWSET(
        BULK 'puYear=2018/puMonth=9/*.snappy.parquet',
        DATA_SOURCE = 'YellowTaxi',
        FORMAT='PARQUET'
    ) AS nyc

Data yang dipartisi kueri

Kumpulan data yang disediakan dalam sampel ini dibagi (dipartisi) menjadi subfolder terpisah. Anda dapat menargetkan partisi tertentu menggunakan fungsi filepath. Contoh ini menunjukkan jumlah tarif menurut tahun, bulan, dan payment_type untuk tiga bulan pertama 2017.

Catatan

Kueri kumpulan SQL tanpa server kompatibel dengan skema partisi Apache Hive/Hadoop.

SELECT
        YEAR(tpepPickupDateTime),
        passengerCount,
        COUNT(*) AS cnt
FROM  
    OPENROWSET(
        BULK 'puYear=*/puMonth=*/*.snappy.parquet',
        DATA_SOURCE = 'YellowTaxi',
        FORMAT='PARQUET'
    ) nyc
WHERE
    nyc.filepath(1) = 2017
    AND nyc.filepath(2) IN (1, 2, 3)
    AND tpepPickupDateTime BETWEEN CAST('1/1/2017' AS datetime) AND CAST('3/31/2017' AS datetime)
GROUP BY
    passengerCount,
    YEAR(tpepPickupDateTime)
ORDER BY
    YEAR(tpepPickupDateTime),
    passengerCount;

Pemetaan jenis

Untuk pemetaan jenis Parquet ke jenis asli SQL cek pemetaan jenis untuk Parquet.

Langkah berikutnya

Lanjutkan ke artikel berikutnya untuk mempelajari cara Mengueri jenis Parquet bertumpuk.