Azure Synapse Analytics'te sunucusuz SQL havuzunu kullanarak Delta Lake (v1) dosyalarını sorgulama
Bu makalede, Delta Lake dosyalarını okumak için sunucusuz Synapse SQL havuzunu kullanarak sorgu yazmayı öğreneceksiniz. Delta Lake, APACHE Spark ve büyük veri iş yüklerine ACID (bölünmezlik, tutarlılık, yalıtım ve dayanıklılık) işlemleri getiren açık kaynaklı bir depolama katmanıdır. Delta lake tablolarını sorgulama videosundan daha fazla bilgi edinebilirsiniz.
Önemli
Sunucusuz SQL havuzları Delta Lake 1.0 sürümünü sorgulayabilir. Delta Lake 1.2 sürümünden bu yana sütunları yeniden adlandırma gibi değişiklikler sunucusuz olarak desteklenmez. Delta'nın daha yüksek sürümlerini silme vektörleri, v2 denetim noktaları ve diğerleriyle kullanıyorsanız, Lakehouses için Microsoft Fabric SQL uç noktası gibi diğer sorgu altyapısını kullanmayı düşünmelisiniz.
Synapse çalışma alanında sunucusuz SQL havuzu, Delta Lake biçiminde depolanan verileri okumanızı ve raporlama araçlarına sunmanızı sağlar. Sunucusuz SQL havuzu Apache Spark, Azure Databricks veya Delta Lake biçiminin başka bir üreticisi kullanılarak oluşturulan Delta Lake dosyalarını okuyabilir.
Azure Synapse'teki Apache Spark havuzları, veri mühendislerinin Scala, PySpark ve .NET kullanarak Delta Lake dosyalarını değiştirmesine olanak tanır. Sunucusuz SQL havuzları, veri analistlerinin veri mühendisleri tarafından oluşturulan Delta Lake dosyalarıyla ilgili raporlar oluşturmasına yardımcı olur.
Önemli
Sunucusuz SQL havuzunu kullanarak Delta Lake biçimini sorgulama genel olarak kullanılabilir işlevselliktir. Ancak Spark Delta tablolarını sorgulama işlemi hala genel önizleme aşamasındadır ve üretime hazır değildir. Spark havuzları kullanılarak oluşturulan Delta tablolarını sorgularsanız karşılaşabileceğiniz bilinen sorunlar vardır. Sunucusuz SQL havuzu kendi kendine yardım bölümünde bilinen sorunlara bakın.
Hızlı başlangıç örneği
OPENROWSET işlevi, kök klasörünüzün URL'sini sağlayarak Delta Lake dosyalarının içeriğini okumanızı sağlar.
Delta Lake klasörünü okuma
Dosyanızın DELTA
içeriğini görmenin en kolay yolu, OPENROWSET işlevinin dosya URL'sini sağlamak ve biçimi belirtmektirDELTA
. Dosya genel kullanıma açıksa veya Microsoft Entra kimliğiniz bu dosyaya erişebiliyorsa, aşağıdaki örnekte gösterilen gibi bir sorgu kullanarak dosyanın içeriğini görebilmeniz gerekir:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://sqlondemandstorage.blob.core.windows.net/delta-lake/covid/',
FORMAT = 'delta') as rows;
Sütun adları ve veri türleri Delta Lake dosyalarından otomatik olarak okunur. işlevi, OPENROWSET
dize sütunları için VARCHAR(1000) gibi en iyi tahmin türlerini kullanır.
İşlevdeki OPENROWSET
URI, adlı _delta_log
bir alt klasör içeren kök Delta Lake klasörüne başvurmalıdır.
Bu alt klasöre sahip değilseniz Delta Lake biçimini kullanmazsınız. Aşağıdaki Apache Spark Python betiğini kullanarak klasördeki düz Parquet dosyalarınızı Delta Lake biçimine dönüştürebilirsiniz:
%%pyspark
from delta.tables import DeltaTable
deltaTable = DeltaTable.convertToDelta(spark, "parquet.`abfss://delta-lake@sqlondemandstorage.dfs.core.windows.net/covid`")
Sorgularınızın performansını geliştirmek için yan tümcesinde açık türler belirtmeyi WITH
göz önünde bulundurun.
Not
Sunucusuz Synapse SQL havuzu, sütunları ve bunların türlerini otomatik olarak belirlemek için şema çıkarımı kullanır. Şema çıkarımı kuralları Parquet dosyaları için kullanılanla aynıdır. SQL yerel türüne Delta Lake türü eşlemesi için Parquet için tür eşlemesini denetleyin.
Dosyanıza erişebildiğinizden emin olun. Dosyanız SAS anahtarı veya özel Azure kimliği ile korunuyorsa, SQL oturum açma bilgileri için sunucu düzeyinde bir kimlik bilgisi ayarlamanız gerekir.
Önemli
Delta Lake 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.
Delta Lake 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.
Veri kaynağı kullanımı
Önceki örneklerde dosyanın tam yolu kullanılmıştır. Alternatif olarak, depolamanın kök klasörüne işaret eden konumuyla bir dış veri kaynağı oluşturabilirsiniz. Dış veri kaynağını oluşturduktan sonra, veri kaynağını ve işlevdeki OPENROWSET
dosyanın göreli yolunu kullanın. Bu şekilde dosyalarınızda tam mutlak URI'yi kullanmanız gerekmez. Daha sonra depolama konumuna erişmek için özel kimlik bilgileri de tanımlayabilirsiniz.
Önemli
Veri kaynakları yalnızca özel veritabanlarında oluşturulabilir (ana veritabanında veya Apache Spark havuzlarından çoğaltılan veritabanlarında oluşturulmaz).
Aşağıdaki örnekleri kullanmak için aşağıdaki adımı tamamlamanız gerekir:
- NYC Yellow Taxi depolama hesabına başvuran bir veri kaynağıyla veritabanı oluşturun.
- 1. adımda oluşturduğunuz veritabanında kurulum betiğini 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.
Veritabanınızı oluşturduysanız ve bağlamı veritabanınıza geçirdiyseniz (bir sorgu düzenleyicisinde veritabanı seçmek için deyimi veya açılan menü kullanarak USE database_name
), veri kümenizin kök URI'sini içeren dış veri kaynağınızı oluşturabilir ve Delta Lake dosyalarını sorgulamak için kullanabilirsiniz:
CREATE EXTERNAL DATA SOURCE DeltaLakeStorage
WITH ( LOCATION = 'https://sqlondemandstorage.blob.core.windows.net/delta-lake/' );
GO
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'covid',
DATA_SOURCE = 'DeltaLakeStorage',
FORMAT = 'delta'
) 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 'covid',
DATA_SOURCE = 'DeltaLakeStorage',
FORMAT = 'delta'
)
WITH ( date_rep date,
cases int,
geo_id varchar(6)
) as rows;
Sonuç kümesi şemasının açık belirtimiyle, tür boyutlarını en aza indirip kötümser VARCHAR(1000) yerine dize sütunları için daha kesin VARCHAR(6) türlerini kullanabilirsiniz. Türlerin küçültülmesi, sorgularınızın performansını önemli ölçüde artırabilir.
Önemli
Yan tümcedeki WITH
tüm dize sütunları için açıkça utf-8 harmanlaması (örneğinLatin1_General_100_BIN2_UTF8
) belirttiğinizden veya veritabanı düzeyinde utf-8 harmanlaması 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
Aşağıdaki tanımı kullanarak harmanlama türlerini kolayca ayarlayabilirsiniz: geo_id varchar(6) collate Latin1_General_100_BIN2_UTF8
Veri kümesi
Bu örnekte NYC Yellow Taxi veri kümesi kullanılmıştır. Özgün PARQUET
veri kümesi biçime DELTA
dönüştürülür ve DELTA
sürüm örneklerde kullanılır.
Bölümlenmiş verileri sorgulama
Bu örnekte sağlanan veri kümesi ayrı alt klasörlere bölünür (bölümlenir).
Parquet'in aksine, işlevini kullanarak FILEPATH
belirli bölümleri hedeflemeniz gerekmez. , OPENROWSET
Delta Lake klasör yapınızdaki bölümleme sütunlarını belirler ve bu sütunları kullanarak verileri doğrudan sorgulamanızı sağlar. Bu örnekte, 2017'nin ilk üç ayı için yıla, aya ve payment_type göre ücret tutarları gösterilmektedir.
SELECT
YEAR(pickup_datetime) AS year,
passenger_count,
COUNT(*) AS cnt
FROM
OPENROWSET(
BULK 'yellow',
DATA_SOURCE = 'DeltaLakeStorage',
FORMAT='DELTA'
) nyc
WHERE
nyc.year = 2017
AND nyc.month IN (1, 2, 3)
AND pickup_datetime BETWEEN CAST('1/1/2017' AS datetime) AND CAST('3/31/2017' AS datetime)
GROUP BY
passenger_count,
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime),
passenger_count;
işlevi, OPENROWSET
where yan tümcesinde ve month
ile year
eşleşmeyen bölümleri ortadan kaldırır. Bu dosya/bölüm ayıklama tekniği veri kümenizi önemli ölçüde azaltır, performansı artırır ve sorgunun maliyetini azaltır.
İşlevdeki OPENROWSET
klasör adı (yellow
bu örnekte), veri kaynağında DeltaLakeStorage
kullanılarak LOCATION
birleştirilir ve adlı _delta_log
bir alt klasör içeren kök Delta Lake klasörüne başvurmalıdır.
Bu alt klasöre sahip değilseniz Delta Lake biçimini kullanmazsınız. Aşağıdaki Apache Spark Python betiğini kullanarak klasördeki düz Parquet dosyalarınızı Delta Lake biçimine dönüştürebilirsiniz:
%%pyspark
from delta.tables import DeltaTable
deltaTable = DeltaTable.convertToDelta(spark, "parquet.`abfss://delta-lake@sqlondemandstorage.dfs.core.windows.net/yellow`", "year INT, month INT")
İşlevin ikinci bağımsız değişkeni, klasör deseninin DeltaTable.convertToDeltaLake
(bu örnekte) bir parçası olan bölümleme sütunlarını (year=*/month=*
yıl ve ay) ve bunların türlerini temsil eder.
Sınırlamalar
- Synapse sunucusuz SQL havuzu kendi kendine yardım sayfasındaki sınırlamaları ve bilinen sorunları gözden geçirin.
Sonraki adımlar
Parquet iç içe türleri sorgulamayı öğrenmek için sonraki makaleye ilerleyin. Delta Lake çözümü oluşturmaya devam etmek istiyorsanız Delta Lake klasöründe görünümler veya dış tablolar oluşturmayı öğrenin.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin