Azure Synapse Analytics sunucusuz SQL havuzunu kullanarak Parquet dosyalarını sorgulama

Tip

Microsoft Fabric Data Warehouse geleceğe hazır mimariye, yerleşik yapay zekaya ve yeni özelliklere sahip data lake foundation üzerinde kurumsal ölçekli ilişkisel bir ambardır. Veri ambarı konusunda yeniyseniz Fabric Data Warehouse ile başlayın. Mevcut özel SQL havuzu iş yükleri, veri bilimi, gerçek zamanlı analiz ve raporlama genelinde yeni özelliklere erişmek için Fabric yükseltilebilir.

Bu makalede, Parquet dosyalarını okuyacak sunucusuz SQL havuzunu kullanarak sorgu yazmayı öğreneceksiniz.

Hızlı başlangıç örneği

OPENROWSET işlevi, dosyanızın URL'sini sağlayarak parquet dosyasının içeriğini okumanızı sağlar.

Parquet dosyasını oku

Dosyanızın PARQUET içeriğini görmenin en kolay yolu, dosya URL'sini OPENROWSET işlevine sağlamak ve FORMAT ile parquet formatını belirtmektir. Dosya genel kullanıma açıksa veya Microsoft Entra kimliğiniz bu dosyaya erişebiliyorsa, aşağıdaki örnekte gösterildiği gibi sorguyu kullanarak dosyanın içeriğini görebilmeniz gerekir:

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

Bu dosyaya erişebildiğinizden emin olun. Dosyanız SAS anahtarı veya özel Azure kimliğiyle korunuyorsa, sql login için sunucu düzeyi kimlik bilgilerini ayarlamanız gerekir.

Önemli

PARQUET dosyalarındaki dize değerleri UTF-8 kodlaması kullanılarak kodlandığından, UTF-8 veritabanı harmanlaması (örneğin Latin1_General_100_BIN2_UTF8) kullandığınızdan emin olun. PARQUET dosyasındaki metin kodlaması ile harmanlama arasındaki uyuşmazlık beklenmeyen dönüştürme hatalarına neden olabilir. Aşağıdaki T-SQL deyimini kullanarak geçerli veritabanının varsayılan harmanlamasını kolayca değiştirebilirsiniz: ALTER DATABASE CURRENT COLLATE Latin1_General_100_BIN2_UTF8; Harmanlamalar hakkında daha fazla bilgi için bkz. Synapse SQL için desteklenen harmanlama türleri.

Latin1_General_100_BIN2_UTF8 harmanlamayı kullanırsanız, diğer harmanlamalarla karşılaştırıldığında ek bir performans artışı elde edersiniz. Harmanlama Latin1_General_100_BIN2_UTF8 , parquet dizesi sıralama kurallarıyla uyumludur. SQL havuzu, sorgularda ihtiyaç duyulmayan verileri içermeyen bazı parquet dosyası bölümlerini (dosya/sütun segment budama) elemeye olanak tanır. Diğer harmanlamaları kullanırsanız, parquet dosyalarındaki tüm veriler Synapse SQL'e yüklenir ve filtreleme SQL işlemi içinde gerçekleştirilir. Latin1_General_100_BIN2_UTF8 harmanlamanın, yalnızca parquet ve Cosmos DB üzerinde çalışan başka bir performans iyileştirmesi daha bulunmaktadır. Dezavantajı, büyük/küçük harf duyarsızlığı gibi ayrıntılı karşılaştırma kurallarını kaybetmenizdir.

Veri kaynağı kullanımı

Önceki örnek dosyanın tam yolunu kullanır. Alternatif olarak, depolamanın kök klasörüne işaret eden konumuyla bir dış veri kaynağı oluşturabilir ve bu veri kaynağını ve işlevdeki OPENROWSET dosyanın göreli yolunu kullanabilirsiniz:

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

Bir veri kaynağı SAS anahtarı veya özel kimlikle korunuyorsa, veri kaynağını veritabanı kapsamlı kimlik bilgileriyle yapılandırabilirsiniz.

Şemayı açıkça belirtin

OPENROWSET , yan tümcesini kullanarak WITH dosyadan hangi sütunları okumak istediğinizi açıkça belirtmenizi sağlar:

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

Önemli

Tüm string sütunları için Latin1_General_100_BIN2_UTF8 ifadesinde açıkça bir UTF-8 collation (örneğin WITH) belirttiğinizden veya veritabanı seviyesinde bir UTF-8 collation ayarladığınızdan emin olun. Dosyadaki metin kodlaması ile dize sütunu harmanlaması arasındaki uyuşmazlık beklenmeyen dönüştürme hatalarına neden olabilir. Aşağıdaki T-SQL deyimini kullanarak geçerli veritabanının varsayılan harmanlamasını kolayca değiştirebilirsiniz: ALTER DATABASE CURRENT COLLATE Latin1_General_100_BIN2_UTF8; Sütun türlerinde kolayca harmanlama ayarlayabilirsiniz, örneğin: geo_id varchar(6) collate Latin1_General_100_BIN2_UTF8 Harmanlamalar hakkında daha fazla bilgi için bkz. Synapse SQL için desteklenen harmanlama türleri.

Aşağıdaki bölümlerde, çeşitli PARQUET dosyası türlerini sorgulamayı görebilirsiniz.

Prerequisites

İlk adımınız, NYC Yellow Taxi depolama hesabına başvuran bir veri kaynağına sahip bir veritabanı oluşturmaktır. Ardından bu veritabanında setup betiği yürüterek nesneleri başlatın. Bu kurulum betiği, bu örneklerde kullanılan veri kaynaklarını, veritabanı kapsamlı kimlik bilgilerini ve dış dosya biçimlerini oluşturur.

Veri Kümesi

Bu örnekte NYC Yellow Taxi veri kümesi kullanılmıştır. Parquet dosyalarını CSV dosyalarını okuduğunuz gibi sorgulayabilirsiniz. Tek fark, parametresinin FILEFORMAT olarak PARQUETayarlanması gerektiğidir. Bu makaledeki örneklerde Parquet dosyalarını okumanın özellikleri gösterilmektedir.

Parquet dosyaları sorgulama kümesi

Parquet dosyalarını sorgularken yalnızca ilgilendiğiniz sütunları belirtebilirsiniz.

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;

Otomatik şema çıkarımı

Parquet dosyalarını okurken OPENROWSET WITH yan tümcesini kullanmanız gerekmez. Sütun adları ve veri türleri Parquet dosyalarından otomatik olarak okunur.

Aynı anda birden fazla dosya okuyorsanız, şema, sütun adları ve veri türleri, hizmetin depolamadan aldığı ilk dosyadan çıkarımla belirlenecektir. Bu, beklenen bazı sütunların atlanacağı anlamına gelebilir, çünkü şemayı tanımlamak için hizmet tarafından kullanılan dosya bu sütunları içermiyordu. Şemayı açıkça belirtmek için OPENROWSET WITH yan tümcesini kullanın.

Aşağıdaki örnekte Parquet dosyaları için otomatik şema çıkarımı özellikleri gösterilmektedir. Eylül 2018'de bir şema belirtmeden satır sayısını döndürür.

Note

Parquet dosyalarını okurken OPENROWSET WITH yan tümcesinde sütunları belirtmeniz gerekmez. Bu durumda sunucusuz SQL havuzu sorgu hizmeti Parquet dosyasında meta verileri kullanır ve sütunları ada göre bağlar.

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

Bölümlenmiş verileri sorgulama

Bu örnekte sağlanan veri kümesi ayrı alt klasörlere bölünür (bölümlenir). Dosya yolu işlevini kullanarak belirli bölümleri hedefleyebilirsiniz. Bu örnekte, 2017'nin ilk üç ayı için yıla, aya ve payment_type göre ücret tutarları gösterilmektedir.

Note

Sunucusuz SQL havuzu sorgusu Hive/Hadoop bölümleme düzeniyle uyumludur.

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;

Tip eşlemesi

SQL yerel türüne Parquet türü eşlemesini kontrol etmek için Parquet için tür eşlemesini denetleyin.

Sonraki adım