Azure Synapse Analytics'de sunucusuz SQL havuzu için en iyi yöntemler

Bu makalede sunucusuz SQL havuzunu kullanmaya yönelik en iyi yöntemlerin bir koleksiyonunu bulacaksınız. Sunucusuz SQL havuzu, Azure Synapse Analytics'teki bir kaynaktır. Ayrılmış bir SQL havuzuyla çalışıyorsanız, belirli yönergeler için bkz . Ayrılmış SQL havuzları için en iyi yöntemler.

Sunucusuz SQL havuzu, Azure Depolama hesaplarınızdaki dosyaları sorgulamanıza olanak tanır. Yerel depolama veya alma özelliklerine sahip değildir. Sorguların hedeflediğini tüm dosyalar sunucusuz SQL havuzunun dışındadır. Depolamadan dosya okumayla ilgili her şey sorgu performansını etkileyebilir.

Bazı genel yönergeler şunlardır:

  • İstemci uygulamalarınızın sunucusuz SQL havuzuyla birlikte bulunduğuna emin olun.
    • Azure dışında istemci uygulamaları kullanıyorsanız istemci bilgisayarınıza yakın bir bölgede sunucusuz SQL havuzu kullandığınızdan emin olun. İstemci uygulaması örnekleri arasında Power BI Desktop, SQL Server Management Studio ve Azure Data Studio yer alır.
  • Depolama ve sunucusuz SQL havuzunun aynı bölgede olduğundan emin olun. Depolama örnek olarak Azure Data Lake Depolama ve Azure Cosmos DB verilebilir.
  • Bölümleme kullanarak ve dosyalarınızı 100 MB ile 10 GB arasında tutarak depolama düzenini iyileştirmeyi deneyin.
  • Çok sayıda sonuç döndür ediyorsanız Azure Synapse Studio'yu değil SQL Server Management Studio'yu veya Azure Data Studio'yu kullandığınızdan emin olun. Azure Synapse Studio, büyük sonuç kümeleri için tasarlanmamış bir web aracıdır.
  • Sonuçları dize sütununa göre filtrelediyseniz harmanlama kullanmayı BIN2_UTF8 deneyin. Harmanlamaları değiştirme hakkında daha fazla bilgi için Synapse SQL için desteklenen Harmanlama türlerine bakın.
  • Power BI içeri aktarma modunu veya Azure Analysis Services'i kullanarak sonuçları istemci tarafında önbelleğe almayı ve bunları düzenli aralıklarla yenilemeyi göz önünde bulundurun. Karmaşık sorgular kullanıyorsanız veya büyük miktarda veri işliyorsanız sunucusuz SQL havuzları Power BI Doğrudan Sorgu modunda etkileşimli bir deneyim sağlayamaz.
  • Eşzamanlılık üst sınırı sınırlı değildir ve sorgu karmaşıklığı ve taranan veri miktarına bağlıdır. Sunucusuz bir SQL havuzu, basit sorgular yürüten 1.000 etkin oturumu eşzamanlı olarak işleyebilir. Sorgular daha karmaşıksa veya daha fazla miktarda veri tararsa sayılar düşer, bu nedenle bu durumda eşzamanlılığı azaltmayı ve mümkünse daha uzun bir süre boyunca sorguları yürütmeyi göz önünde bulundurun.

İstemci uygulamaları ve ağ bağlantıları

İstemci uygulamanızın mümkün olan en yakın Azure Synapse çalışma alanına en uygun bağlantıyla bağlandığından emin olun.

  • İstemci uygulamasını Azure Synapse çalışma alanıyla birlikte kullanın. Power BI veya Azure Analysis Service gibi uygulamalar kullanıyorsanız, bunların Azure Synapse çalışma alanınızı yerleştirdiğiniz bölgede bulunduğundan emin olun. Gerekirse, istemci uygulamalarınızla eşleştirilmiş ayrı çalışma alanları oluşturun. bir istemci uygulamasının ve Azure Synapse çalışma alanının farklı bölgelere yerleştirilmesi daha büyük gecikme süresine ve daha yavaş sonuç akışına neden olabilir.
  • Şirket içi uygulamanızdaki verileri okuyorsanız Azure Synapse çalışma alanının konumunuza yakın olan bölgede olduğundan emin olun.
  • Büyük miktarda veri okurken ağ bant genişliği sorunları olmadığından emin olun.
  • Büyük miktarda veri döndürmek için Azure Synapse Studio kullanmayın. Azure Synapse Studio, verileri aktarmak için HTTPS protokolunu kullanan bir web aracıdır. Büyük miktarda veriyi okumak için Azure Data Studio veya SQL Server Management Studio kullanın.

Depolama ve içerik düzeni

Sunucusuz SQL havuzundaki depolama ve içerik düzeni için en iyi yöntemler aşağıdadır.

Depolama alanınızı ve sunucusuz SQL havuzunuzu birlikte kullanma

Gecikme süresini en aza indirmek için Azure Depolama hesabınızı veya Azure Cosmos DB analiz depolama alanınızı ve sunucusuz SQL havuzu uç noktanızı birlikte yazın. çalışma alanı oluşturma sırasında sağlanan Depolama hesapları ve uç noktaları aynı bölgede bulunur.

En iyi performans için sunucusuz SQL havuzuna sahip diğer depolama hesaplarına erişiyorsa bunların aynı bölgede olduğundan emin olun. Bunlar aynı bölgede değilse, uzak bölge ile uç noktanın bölgesi arasında verilerin ağ aktarımı için gecikme süresi artar.

Azure Depolama azaltma

Depolama hesabınıza birden çok uygulama ve hizmet erişebilir. Depolama azaltma, uygulamalar, hizmetler ve sunucusuz SQL havuzu iş yükleri tarafından oluşturulan birleştirilmiş IOPS veya aktarım hızı depolama hesabının sınırlarını aştığında oluşur. Sonuç olarak, sorgu performansı üzerinde önemli bir olumsuz etkiyle karşılaşırsınız.

Azaltma algılandığında sunucusuz SQL havuzu bunu çözmek için yerleşik işlemeye sahiptir. Sunucusuz SQL havuzu, azaltma çözümlenene kadar depolamaya daha yavaş bir hızda istekte bulunur.

Bahşiş

En iyi sorgu yürütme için, sorgu yürütme sırasında depolama hesabını diğer iş yükleriyle strese atmayın.

Dosyaları sorgulamaya hazırlama

Mümkünse, dosyaları daha iyi performans için hazırlayabilirsiniz:

  • Büyük CSV ve JSON dosyalarını Parquet'e dönüştürün. Parquet sütunlu bir biçimdir. Sıkıştırılmış olduğundan, dosya boyutları aynı verileri içeren CSV veya JSON dosyalarından daha küçüktür. Sunucusuz SQL havuzu, Parquet dosyalarını okuyorsanız sorguda gerekli olmayan sütunları ve satırları atlar. Sunucusuz SQL havuzunun okunması için daha az zamana ve daha az depolama isteğine ihtiyacı vardır.
  • Bir sorgu tek bir büyük dosyayı hedeflediyse, bu dosyayı birden çok küçük dosyaya bölme avantajından yararlanabilirsiniz.
  • CSV dosya boyutunuzu 100 MB ile 10 GB arasında tutmaya çalışın.
  • Tek bir OPENROWSET yolu veya dış tablo LOCATION için eşit boyutta dosyalara sahip olmak daha iyidir.
  • Bölümleri farklı klasörlere veya dosya adlarına depolayarak verilerinizi bölümleyin. Bkz. Belirli bölümleri hedeflemek için dosya adı ve dosya yolu işlevlerini kullanma.

Azure Cosmos DB analitik depolama alanınızı ve sunucusuz SQL havuzunuzu birlikte kullanma

Azure Cosmos DB analiz depolama alanınızın bir Azure Synapse çalışma alanıyla aynı bölgeye yerleştirildiğinden emin olun. Bölgeler arası sorgular çok büyük gecikmelere neden olabilir. Analiz deposunun yerleştirildiği bölgeyi açıkça belirtmek için bağlantı dizesi bölge özelliğini kullanın (bkz. Sunucusuz SQL havuzunu kullanarak Azure Cosmos DB'yi sorgulama):account=<database account name>;database=<database name>;region=<region name>'

CSV iyileştirmeleri

Sunucusuz SQL havuzunda CSV dosyalarını kullanmaya yönelik en iyi yöntemler aşağıdadır.

CSV dosyalarını sorgulamak için PARSER_VERSION 2.0 kullanma

CSV dosyalarını sorgularken performans açısından iyileştirilmiş ayrıştırıcı kullanabilirsiniz. Ayrıntılar için bkz . PARSER_VERSION.

CSV dosyaları için istatistikleri el ile oluşturma

Sunucusuz SQL havuzu, en iyi sorgu yürütme planlarını oluşturmak için istatistiklere dayanır. İstatistikler örnekleme kullanılarak sütunlar için otomatik olarak oluşturulur ve çoğu durumda örnekleme yüzdesi %100'den az olur. Bu akış her dosya biçimi için aynıdır. Ayrıştırıcı sürüm 1.0 örneklemesi ile CSV okunurken örneklemenin desteklenmediğini ve %100'den az örnekleme yüzdesiyle otomatik istatistik oluşturmanın gerçekleşmeyeceğini unutmayın. Tahmini düşük kardinaliteye (satır sayısı) sahip küçük tablolar için otomatik istatistik oluşturma işlemi %100 örnekleme yüzdesiyle tetiklenir. Bu, tam taramanın tetiklendiğini ve ayrıştırıcı sürüm 1.0 ile CSV için bile otomatik istatistiklerin oluşturulduğu anlamına gelir. İstatistiklerin otomatik olarak oluşturulmaması durumunda, özellikle DISTINCT, JOIN, WHERE, ORDER BY ve GROUP BY içinde kullanılan sorgularda kullandığınız sütunlar için el ile istatistikler oluşturun. Ayrıntılar için sunucusuz SQL havuzundaki istatistikleri denetleyin.

Veri türleri

Sunucusuz SQL havuzunda veri türlerini kullanmaya yönelik en iyi yöntemler aşağıdadır.

Uygun veri türlerini kullanma

Sorgunuzda kullandığınız veri türleri performansı ve eşzamanlılığı etkiler. Bu yönergeleri izlerseniz daha iyi performans elde edebilirsiniz:

  • Mümkün olan en büyük değeri barındırabilecek en küçük veri boyutunu kullanın.
    • Maksimum karakter değeri uzunluğu 30 karakter ise, 30 uzunluğunda bir karakter veri türü kullanın.
    • Tüm karakter sütunu değerleri sabit boyuttaysa, char veya nchar kullanın. Aksi takdirde varchar veya nvarchar kullanın.
    • En büyük tamsayı sütun değeri 500 ise smallint kullanın çünkü bu değere uyum sağlayabilen en küçük veri türüdür. Daha fazla bilgi için bkz . tamsayı veri türü aralıkları.
  • Mümkünse nvarchar ve nchar yerine varchar ve char kullanın.
    • Parquet, Azure Cosmos DB, Delta Lake veya UTF-8 kodlamalı CSV'den veri okuyorsanız, bazı UTF8 harmanlaması ile varchar türünü kullanın.
    • CSV Unicode olmayan dosyalardan (örneğin, ASCII) veri okuyorsanız UTF8 harmanlaması olmadan varchar türünü kullanın.
    • CSV UTF-16 dosyasından veri okuyorsanız nvarchar türünü kullanın.
  • Mümkünse tamsayı tabanlı veri türlerini kullanın. SIRALAMA, JOIN ve GROUP BY işlemleri tamsayılarda karakter verilerine göre daha hızlı tamamlanır.
  • Şema çıkarımı kullanıyorsanız, çıkarsanan veri türlerini denetleyin ve mümkünse bunları daha küçük türlerle açıkça geçersiz kılın.

Çıkarsanan veri türlerini denetleme

Şema çıkarımı , dosya şemalarını bilmeden hızlı bir şekilde sorgu yazmanıza ve verileri keşfetmenize yardımcı olur. Bu kolaylığın maliyeti, çıkarsanan veri türlerinin gerçek veri türlerinden daha büyük olmasıdır. Bu tutarsızlık, kaynak dosyalarda uygun veri türünün kullanıldığından emin olmak için yeterli bilgi olmadığında gerçekleşir. Örneğin, Parquet dosyaları maksimum karakter sütunu uzunluğuyla ilgili meta veriler içermez. Bu nedenle sunucusuz SQL havuzu bunu varchar(8000) olarak çıkarsar.

SQL altyapısında dış tablolar olarak kullanıma sunulan paylaşılabilir yönetilen ve dış Spark tablolarında durumun farklı olabileceğini unutmayın. Spark tabloları Synapse SQL altyapılarından farklı veri türleri sağlar. Spark tablosu veri türleri ile SQL türleri arasında eşleme burada bulunabilir.

Sorgunuzun elde edilen veri türlerini denetlemek için sistem saklı yordamını sp_describe_first_results_set kullanabilirsiniz.

Aşağıdaki örnek, çıkarım yapılan veri türlerini nasıl iyileştirebileceğinizi gösterir. Bu yordam, çıkarsanan veri türlerini göstermek için kullanılır:

EXEC sp_describe_first_result_set N'
    SELECT
        vendor_id, pickup_datetime, passenger_count
    FROM  
        OPENROWSET(
            BULK ''https://sqlondemandstorage.blob.core.windows.net/parquet/taxi/*/*/*'',
            FORMAT=''PARQUET''
        ) AS nyc';

Sonuç kümesi aşağıdadır:

is_hidden column_ordinal name system_type_name max_length
0 1 vendor_id varchar(8000) 8000
0 2 pickup_datetime datetime2(7) 8
0 3 passenger_count int 4

Sorgu için çıkarılan veri türlerini bildikten sonra uygun veri türlerini belirtebilirsiniz:

SELECT
    vendorID, tpepPickupDateTime, passengerCount
FROM  
    OPENROWSET(
        BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=2018/puMonth=*/*.snappy.parquet',
        FORMAT='PARQUET'
    )  
    WITH (
        vendorID varchar(4), -- we used length of 4 instead of the inferred 8000
        tpepPickupDateTime datetime2,
        passengerCount int
    ) AS nyc;

Filtre iyileştirme

Sunucusuz SQL havuzunda sorguları kullanmaya yönelik en iyi yöntemler aşağıdadır.

Yoldaki alt düzeylere joker karakter gönderme

Birden çok dosya ve klasörü sorgulamak için yolunuzda joker karakterler kullanabilirsiniz. Sunucusuz SQL havuzu, depolama API'sini kullanarak ilk yıldız işaretinden (*) başlayarak depolama hesabınızdaki dosyaları listeler. Belirtilen yolla eşleşmeyen dosyaları eler. İlk joker karaktere gelene kadar belirtilen yolla eşleşen çok fazla dosya varsa, başlangıçtaki dosya listesini kısaltmak performansı geliştirebilir.

Belirli bölümleri hedeflemek için dosya adı ve dosya yolu işlevlerini kullanma

Veriler genellikle bölümler halinde düzenlenir. Sunucusuz SQL havuzuna belirli klasörleri ve dosyaları sorgulamasını sağlayabilirsiniz. Bunun yapılması, dosya sayısını ve sorgunun okuması ve işlemesi gereken veri miktarını azaltır. Ek olarak daha iyi bir performans elde edersiniz.

Daha fazla bilgi için dosya adı ve dosya yolu işlevleri hakkında bilgi edinin ve belirli dosyaları sorgulama örneklerine bakın.

Bahşiş

Dosya yolu ve dosya adı işlevlerinin sonuçlarını her zaman uygun veri türlerine dönüştürebilirsiniz. Karakter veri türlerini kullanıyorsanız uygun uzunluğu kullandığınızdan emin olun.

Bölüm eleme, dosya yolu ve dosya adı için kullanılan işlevler, Azure Synapse Analytics için Apache Spark'ta oluşturulan her tablo için otomatik olarak oluşturulanlar dışında şu anda dış tablolar için desteklenmemektedir.

Depolanan verileriniz bölümlenmemişse bölümleme işlemini göz önünde bulundurun. Bu şekilde, bu dosyaları hedefleyen sorguları iyileştirmek için bu işlevleri kullanabilirsiniz. Sunucusuz SQL havuzundan bölümlenmiş Azure Synapse için Apache Spark tablolarını sorguladığınızda, sorgu otomatik olarak yalnızca gerekli dosyaları hedefler.

Karakter sütunları için koşul aşağı itme özelliğini kullanmak için uygun harmanlamayı kullanın

Parquet dosyasındaki veriler satır gruplarında düzenlenir. Sunucusuz SQL havuzu, WHERE yan tümcesinde belirtilen koşula göre satır gruplarını atlar ve bu da GÇ’yi azaltır. Sonuç, sorgu performansını artırır.

Parquet dosyalarındaki karakter sütunları için koşul aşağı itme yalnızca Latin1_General_100_BIN2_UTF8 harmanlama için desteklenir. WITH yan tümcesini kullanarak belirli bir sütun için harmanlama belirtebilirsiniz. Bir WITH yan tümcesi kullanarak bu harmanlamayı belirtmezseniz, veritabanı harmanlaması kullanılır.

Yinelenen sorguları iyileştirme

Sunucusuz SQL havuzunda CETAS kullanmaya yönelik en iyi yöntemler aşağıdadır.

Sorgu performansını ve birleşimlerini geliştirmek için CETAS kullanma

CETAS , sunucusuz SQL havuzunda kullanılabilen en önemli özelliklerden biridir. CETAS, dış tablo meta verilerini oluşturan ve SELECT sorgu sonuçlarını depolama hesabınızdaki bir dosya kümesine aktaran paralel bir işlemdir.

CETAS'ı kullanarak sorguların birleştirilmiş başvuru tabloları gibi sık kullanılan bölümlerini yeni bir dosya kümesine oluşturabilirsiniz. Daha sonra birden çok sorguda ortak birleştirmeleri yinelemek yerine bu tek dış tabloya katılabilirsiniz.

CETAS Parquet dosyaları oluştururken, ilk sorgu bu dış tabloyu hedeflediğinde istatistikler otomatik olarak oluşturulur. Sonuç, CETAS ile oluşturulan tabloyu hedefleyen sonraki sorgular için iyileştirilmiş performanstır.

Azure verilerini sorgulama

Sunucusuz SQL havuzları, dış tabloları ve OPENROWSET işlevini kullanarak Azure Depolama veya Azure Cosmos DB'deki verileri sorgulamanızı sağlar. Depolama alanınızda uygun izinlerin ayarlandığından emin olun.

CSV verilerini sorgulama

Tek bir CSV dosyasını veya klasörünü ve birden çok CSV dosyasını sorgulamayı öğrenin. Bölümlenmiş dosyaları da sorgulayabilirsiniz

Parquet verilerini sorgulama

İç içe türler içeren Parquet dosyalarını sorgulamayı öğrenin. Bölümlenmiş dosyaları da sorgulayabilirsiniz.

Delta Lake'i Sorgulama

Delta Lake dosyalarını iç içe türleriyle sorgulamayı öğrenin.

Azure Cosmos DB verilerini sorgulama

Azure Cosmos DB analiz deposunu sorgulamayı öğrenin. Bir çevrimiçi oluşturucu kullanarak örnek bir Azure Cosmos DB belgesini temel alan WITH yan tümcesini oluşturabilirsiniz. Azure Cosmos DB kapsayıcılarının üzerinde görünümler oluşturabilirsiniz.

JSON verilerini sorgulama

JSON dosyalarını sorgulamayı öğrenin. Bölümlenmiş dosyaları da sorgulayabilirsiniz.

Görünümler, tablolar ve diğer veritabanı nesneleri oluşturma

Görünümleri ve dış tabloları oluşturmayı ve kullanmayı ya da satır düzeyi güvenlik ayarlamayı öğrenin. Bölümlenmiş dosyalarınız varsa bölümlenmiş görünümleri kullandığınızdan emin olun.

Verileri kopyalama ve dönüştürme (CETAS)

CETAS komutunu kullanarak sorgu sonuçlarını depolamaya depolamayı öğrenin.

Sonraki adımlar