Sunucusuz veri havuzlarını kullanarak Azure Synapse Parquet SQL sorgulama

Tamamlandı

Ayrıca, Parquet dosyalarını okuyacak sunucusuz SQL havuzu kullanarak da sorgu yürütebilirsiniz. OPENROWSET işlevi, dosyanıza URL'yi sağlayarak parquet dosyasının içeriğini okumanızı sağlar.

Parquet dosyasını okuma

PARQUET dosyanızı içeriğini görmenin en kolay yolu, OPENROWSET işlevinin dosya URL'sini sağlamak ve parquet FORMAT belirtmektir. Dosya genel kullanıma açıksa veya Azure Active Directory kimliğiniz bu dosyaya erişe biliyorsa, aşağıdaki örnekte gösterildiği gibi sorguyu kullanarak dosyanın içeriğini görebilirsiniz:

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şesiniz. Dosyanız bir SAS anahtarı veya özel Azure kimliğiyle korunuyorsa, oturum açma bilgileri için sunucu düzeyinde kimlik SQL gerekir

Veri kaynağı tanımlama

Son örnek, dosyanın tam yolunu kullanır. Alternatif olarak, depolamanın kök klasörünün konumunu içeren bir dış veri kaynağı oluşturabilir ve bu veri kaynağını ve OPENROWSET işlevinde 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 kimlik ile korunuyorsa, veri kaynağını veritabanı kapsamlı kimlik bilgileriyle yapılandırabilirsiniz.

Şemayı açıkça belirtme

OPENROWSET, WITH yan tümcesini kullanarak dosyadan okumak istediğiniz sütunları 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

Aşağıdaki bölümlerde, çeşitli TÜRLERDE PARQUET dosyalarının nasıl sorgulan olduğunu görüyorsunuz. Aşağıdaki örneklerin hepsi belirli dosya düzenlerini gerektirir. Sonraki örnekleri yürütmek için ilk adımınız nesnelerin oluşturulacak olduğu bir veritabanı oluşturmaktır. Ardından, bu veritabanında kurulum 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.

NYC Sarı Taksi ( https://azure.microsoft.com/services/open-datasets/catalog/nyc-taxi-limousine-commission-yellow-taxi-trip-records/) veri kümesi bu örnekte kullanılır.

Parquet dosyalarını CSV dosyalarını okuduğunuz şekilde sorguabilirsiniz. Tek fark FILEFORMAT parametresinin PARQUET olarak ayarlanmış olmasıdır. Bu makaledeki örneklerde Parquet dosyalarını okumanın özellikleri yer almaktadır.

Parquet dosyalarının belirli sütununu sorgulama

Aşağıdaki kod segmentinde gösterildiği gibi with yan tümcesini kullanarak Parquet dosyalarını sorgularken yalnızca ilgili 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;

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

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

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

Bölümlenmiş verileri sorgulama

NYC Sarı Taksi veri kümesinde sağlanan veri kümesi ayrı alt klasörlere bölündü (veya bölündü). Filepath işlevini kullanarak belirli bölümleri hedefleyebilirsiniz. Bu örnekte, 2017'nin ilk üç ayı için payment_type, ay ve yıla göre ücret tutarları gösterir.

Not

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;

Veri türü eşlemesi

Parquet dosyaları her sütun için tür açıklamaları içerir. Aşağıdaki tabloda Parquet türlerinin veri türleriyle nasıl eşlenmiş olduğu SQL açıklandı.

Parquet türü Parquet mantıksal türü (ek açıklama) SQL veri türü
BOOLEAN bit
BINARY / BYTE_ARRAY Varbinary
ÇİFT float
FLOAT real
INT32 int
INT64 bigint
INT96 datetime2
FIXED_LEN_BYTE_ARRAY ikili
IKİLİ UTF8 varchar *(UTF8 harmanlama)
IKİLİ DİZE varchar *(UTF8 harmanlama)
IKİLİ ENUM varchar *(UTF8 harmanlama)
IKİLİ UUID uniqueidentifier
IKİLİ ON -DA -LIK decimal
IKİLİ JSON varchar(max) *(UTF8 harmanlama)
IKİLİ BSON varbinary(max)
FIXED_LEN_BYTE_ARRAY ON -DA -LIK decimal
BYTE_ARRAY ARALIĞI varchar(max), standartlaştırılmış biçime serileştirilmiş
INT32 INT(8, true) smallint
INT32 INT(16, true) smallint
INT32 INT(32, true) int
INT32 INT (8, false) tinyint
INT32 INT (16, false) int
INT32 INT (32, false) bigint
INT32 DATE date
INT32 KATEGORI decimal
INT32 SAAT (MILIMETRE) time
INT64 INT (64, true) bigint
INT64 INT (64, false) ondalık (20, 0)
INT64 KATEGORI decimal
INT64 SAAT (MIKRO S/NANOS) time
INT64 ZAMAN DAMGASı (MILIMETRE/MIKRO S/NANOS) datetime2
Karmaşık tür LISTELE JSON ile seri hale getirilmiş varchar (max)
Karmaşık tür HARITA JSON ile seri hale getirilmiş varchar (max)