Aracılığıyla paylaş


PolyBase'de pushdown hesaplamaları

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri

İtme hesaplaması, dış veri kaynaklarında sorguların performansını artırır. SQL Server 2016'da (13.x) başlayarak Hadoop dış veri kaynakları için anında iletme hesaplamaları sağlandı. SQL Server 2019 (15.x), diğer tür dış veri kaynakları için pushdown hesaplamaları tanıttı.

Uyarı

PolyBase pushdown hesaplamalarının sorgunuza fayda sağlayıp sağlamadığını belirtmek amacıyla, bkz. Dış pushdown oluşup oluşmadığını anlama.

İtme hesaplamasını etkinleştirme

Aşağıdaki makaleler, belirli dış veri kaynağı türleri için anında iletme hesaplamasını yapılandırma hakkında bilgiler içerir:

Bu tablo, farklı dış veri kaynaklarındaki pushdown hesaplama desteğinin özetini sunmaktadır.

Veri Kaynağı Joins Projeksiyonlar Aggregations Filtreler Statistics
Genel ODBC Yes Yes Yes Yes Yes
Oracle Evet+ Yes Yes Yes Yes
SQL Server Yes Yes Yes Yes Yes
Teradata Yes Yes Yes Yes Yes
MongoDB* Hayır Yes Evet*** Evet*** Yes
Hadoop Hayır Yes Bazı** Bazı** Yes
Azure Blob Depolama Hayı Hayı Hayı Hayı Yes

* Azure Cosmos DB gönderme desteği MongoDB için Azure Cosmos DB API'si aracılığıyla etkinleştirilir.

** Bkz. Pushdown hesaplaması ve Hadoop sağlayıcıları.

SQL Server 2019 CU18 ile, SQL Server 2019 için MongoDB ODBC bağlayıcısında toplamalar ve filtreler için itme desteği sunuldu.

+ Oracle, birleştirmeler için düşürmeyi destekler, ancak düşürmeyi sağlamak için birleştirme sütunlarında istatistikler oluşturmanız gerekebilir.

Uyarı

Basıltma hesaplaması bazı T-SQL sözdizimlerinden engellenebilir. Daha fazla bilgi için, pushdown'u engelleyen söz dizimi bölümüne bakın.

Pushdown hesaplaması ve Hadoop sağlayıcıları

PolyBase şu anda iki Hadoop sağlayıcısını desteklemektedir: Hortonworks Veri Platformu (HDP) ve Cloudera Dağıtılmış Hadoop (CDH). İki sağlayıcı arasında pushdown hesaplaması açısından hiçbir fark yoktur.

Hadoop ile hesaplama anında iletme işlevini kullanmak için hedef Hadoop kümesinin, iş geçmişi sunucusu etkinleştirilmiş olarak HDFS, YARN ve MapReduce temel bileşenlerine sahip olması gerekir. PolyBase, MapReduce aracılığıyla anında iletme sorgusunu gönderir ve durumu iş geçmişi sunucusundan çeker. Bileşenlerden biri olmadan sorgu başarısız olur.

Veriler SQL Server'a ulaştıktan sonra bazı toplamalar gerçekleşmelidir. Ancak toplama işleminin bir kısmı Hadoop'ta gerçekleşir. Bu yöntem, yüksek düzeyde paralel işleme sistemlerindeki hesaplama toplamalarında yaygındır.

Hadoop sağlayıcıları aşağıdaki toplamaları ve filtreleri destekler.

Aggregations Filtreler (ikili karşılaştırma)
Count_Big NotEqual
Toplam LessThan
Ortalama Küçük veya Eşittir
Max Büyük veya Eşit
Dakika GreaterThan
Approx_Count_Distinct Dir
Isnot

Yığın hesaplamasının başlıca faydalı senaryoları

PolyBase anında iletme hesaplamasıyla, hesaplama görevlerini dış veri kaynaklarına devredebilirsiniz. Bu, SQL Server örneğindeki iş yükünü azaltır ve performansı önemli ölçüde iyileştirebilir.

SQL Server, uzak işlemden yararlanarak ve ağ üzerinden gönderilen verileri kısıtlayarak birleştirmeleri, projeksiyonları, toplamaları ve filtreleri dış veri kaynaklarına gönderebilir.

Pushdown'a katıl

PolyBase, aynı dış veri kaynağında bulunan iki dış tabloyu birleştirdiğinizde, join operatörünün itilmesini kolaylaştırabilir ve bu da performansı büyük ölçüde artırır.

Dış veri kaynağı birleştirme işlemini gerçekleştirdiğinde veri taşıma miktarını azaltır ve sorgu performansını artırır. Join pushdown olmadan, SQL Server her iki tablodaki verileri yerel olarak tempdb içine getirmeli ve ardından birleştirmeyi gerçekleştirmelidir.

Filtreniz birleştirilmiş dış tabloya uygulanmadığı sürece , dağıtılmış birleşimler (yerel bir tabloyu dış tabloya birleştirme) söz konusu olduğunda, SQL Server'ın birleştirme işlemini gerçekleştirmek için dış tablodaki tüm verileri yerel olarak içine tempdb getirmesi gerekir. Örneğin, aşağıdaki sorgunun dış tablo birleştirme koşulu üzerinde filtrelemesi yoktur ve bu da dış tablodaki tüm verilerin okunmasını sağlar.

SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id

Birleştirme dış tablonun sütununu E.id kullandığından, bu sütuna bir filtre koşulu eklediğinizde, SQL Server filtreyi aşağı iterek dış tablodan okunan satır sayısını azaltabilir.

SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
WHERE E.id = 20000

Satırların alt kümesini seçme

Dış tablodan satırların bir alt kümesini seçen bir sorgunun performansını artırmak için öne koşul iletmeyi kullanın.

Bu örnekte, SQL Server Hadoop üzerindeki koşul customer.account_balance < 200000 ile eşleşen satırları almak için bir map-reduce işi başlatır. Sorgu, tablodaki tüm satırları taramadan başarıyla tamamlayabildiği için, yalnızca koşul ölçütlerini karşılayan satırlar SQL Server'a kopyalanır. Bu, hesap bakiyesi <= 200000 olan müşteri sayısına kıyasla 200000 müşteri bakiyesi > az olduğunda önemli ölçüde zaman kazandırır ve daha az geçici depolama alanı gerektirir.

SELECT * FROM customer WHERE customer.account_balance < 200000;
SELECT * FROM SensorData WHERE Speed > 65;

Sütunların alt kümesini seçme

Harici bir tablodan sütunların bir alt kümesini seçen bir sorgunun performansını artırmak için önkoşul iteleme tekniğini kullanın.

Bu sorguda, SQL Server Hadoop sınırlandırılmış metin dosyasını önceden işlemek için bir eşleme azaltma işi başlatır, böylece yalnızca customer.name ve customer.zip_code sütunlarının verileri SQL Server'a kopyalanır.

SELECT customer.name, customer.zip_code
FROM customer
WHERE customer.account_balance < 200000;

Temel ifadeler ve işleçler için aşağı itme

SQL Server bu temel ifadelere ve işleçlere koşul gönderimi için izin verir:

  • Sayısal, tarih ve saat değerleri için ikili karşılaştırma işleçleri (<, >, =, !=, <>, >=, <=).
  • Aritmetik işleçler (+, -, *, /, %).
  • Mantıksal işleçler (AND, OR).
  • Birli işleçler (NOT, IS NULL, IS NOT NULL).

, BETWEEN, NOTve IN işleçleriLIKE, sorgu iyileştiricisinin işleç ifadelerini temel ilişkisel işleçler kullanarak bir dizi deyim olarak yeniden yazma şekline bağlı olarak aşağı gönderilebilir.

Bu örnekteki sorgunun Hadoop'a gönderilebilen birden çok koşulu vardır. SQL Server, koşulunu customer.account_balance <= 200000gerçekleştirmek için harita azaltma işlerini Hadoop'a gönderebilir. İfade BETWEEN 92656 AND 92677 ayrıca Hadoop'a gönderilebilen ikili ve mantıksal işlemlerden oluşur. Mantıksal AND ifadesi, customer.account_balance AND customer.zipcode'de son bir ifadeyi temsil eder.

Bu koşul bileşimi göz önünde bulundurulduğunda, MapReduce işleri WHERE koşulunun tamamını gerçekleştirebilir. Yalnızca ölçütleri SELECT karşılayan veriler SQL Server'a geri kopyalanır.

SELECT * FROM customer
WHERE customer.account_balance <= 200000
AND customer.zipcode BETWEEN 92656 AND 92677;

İtme için desteklenen işlevler

SQL Server, bu işlevlerin koşul gönderimine izin verir:

Dize işlevleri:

  • CONCAT
  • DATALENGTH
  • LEN
  • LIKE
  • LOWER
  • LTRIM
  • RTRIM
  • SUBSTRING
  • UPPER

Matematiksel işlevler:

  • ABS
  • ACOS
  • ASIN
  • ATAN
  • CEILING
  • COS
  • EXP
  • FLOOR
  • POWER
  • SIGN
  • SIN
  • SQRT
  • TAN

Genel işlevler:

  • COALESCE *
  • NULLIF

* COLLATE ile kullanılması bazı senaryolarda pushdown'ı önleyebilir. Daha fazla bilgi için bakınız Harmanlama çatışması.

Tarih ve saat işlevleri:

  • DATEADD
  • DATEDIFF
  • DATEPART

İtmeyi engelleyen söz dizimi

Bu T-SQL işlevleri veya söz dizimi öğeleri, aşağı itme hesaplamasını engeller:

  • AT TIME ZONE
  • CONCAT_WS
  • TRANSLATE
  • RAND
  • CHECKSUM
  • BINARY_CHECKSUM
  • HASHBYTES
  • ISJSON
  • JSON_VALUE
  • JSON_QUERY
  • JSON_MODIFY
  • NEWID
  • STRING_ESCAPE
  • COMPRESS
  • DECOMPRESS
  • GREATEST
  • LEAST
  • PARSE

SQL Server 2019 (15.x) CU10'da FORMAT ve TRIM söz dizimi için anında iletme desteği sunulmuştur.

Değişkenli filtre ifadesi

Bir filtre yan tümcesinde bir değişken belirttiğinizde, varsayılan olarak SQL Server filtre yan tümcesini aşağı göndermez. Örneğin, aşağıdaki sorgu filtre yan tümcesini aşağı göndermez:

DECLARE @BusinessEntityID INT

SELECT * FROM [Person].[BusinessEntity]
WHERE BusinessEntityID = @BusinessEntityID;

Değişkenin aşağı itme özelliğini etkinleştirmek için aşağıdaki yöntemlerden birini kullanarak sorgu iyileştirici düzeltmeleri işlevselliğini etkinleştirin:

  • Örnek Düzeyi: Örnek için başlangıç parametresi olarak izleme bayrağı 4199'ı etkinleştirin.
  • Veritabanı Düzeyi: PolyBase dış nesnelerini içeren veritabanı bağlamında komutunu yürütür ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON.
  • Sorgu düzeyi: Sorgu ipucunu OPTION (QUERYTRACEON 4199) veya OPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'))kullanın.

Bu sınırlama, sp_executesql yürütülmesi ve filtre yan tümcesindeki bazı işlevler için geçerlidir.

SQL Server 2019 CU5 ilk olarak değişkeni aşağı gönderme özelliğini kullanıma sunulmuştur.

Daha fazla bilgi için bkz. sp_executesql.

Dizim çakışması

Pushdown, farklı sıralama düzenine sahip verilerle işlemeyebilir. gibi COLLATE işleçler de sonuca müdahale edebilir. SQL Server eşit harmanlamaları veya ikili harmanlamaları destekler. Daha fazla bilgi için bkz. Dış gönderimin gerçekleşip gerçekleşmediğini belirleme.

Parquet dosyaları için pushdown işlemi

SQL Server 2022'den (16.x) başlayarak PolyBase parquet dosyaları için destek sunar. SQL Server, parquet ile aşağı gönderme gerçekleştirirken hem satır hem de sütun eleme gerçekleştirebilir.

Desteklenen dış veri kaynakları

Aşağıdaki dış veri kaynakları için Parquet pushdown desteği sağlanır:

  • S3 uyumlu nesne depolama
  • Azure Blob Saklama Alanı
  • Azure Data Lake Storage (İkinci Nesil)

Yapılandırma ayrıntıları için bkz:

Yığıt Üstü İşlemleri

SQL Server bu işlemleri parquet dosyalarıyla aşağı doğru itebilir:

  • Sayısal, tarih ve saat değerleri için ikili karşılaştırma işleçleri (>, >, <=, <).
  • Karşılaştırma işleçlerinin birleşimi (> AND <, >= AND <, > AND <=, <= AND >=).
  • Liste filtresinde (sütun1 = val1 VEYA sütun1 = val2 VEYA sütun1 = val3).
  • Bir sütun için NULL DEĞİLDİR.

Bu öğeler parquet dosyaları için aşağı itme yapılmasını engeller:

  • Sanal sütunlar.
  • Sütun karşılaştırması.
  • Parametre türü dönüştürme.

Desteklenen veri türleri

  • bit
  • tinyint
  • smallint
  • bigint
  • Gerçek
  • float
  • varchar (Bin2Collation, CodePageConversion, BinCollation)
  • nvarchar (Bin2Collation, BinCollation)
  • binary
  • datetime2 (varsayılan ve 7 basamaklı duyarlık)
  • date
  • time (varsayılan ve 7 basamaklı duyarlık)
  • Sayısal *

* Parametrenin ölçeği sütunun ölçeğiyle hizalandığında veya parametre açıkça ondalık olarak dönüştürüldüğünde desteklenir.

Parquet pushdown'larını engelleyen veri türleri

  • para
  • küçük para
  • datetime
  • smalldatetime

Klasör yapılarıyla bölüm eleme

PolyBase, bölüm eleme için klasör yapılarını kullanabilir ve sorgular sırasında taranan veri miktarını azaltır. Parquet dosyalarını hiyerarşik klasörlerde (yıla, aya veya diğer bölümleme anahtarlarına göre) düzenlerken, PolyBase sorgu koşullarınızla eşleşmeyen klasörlerin tamamını atlayabilir.

Örneğin, verilerinizi şu şekilde yapılandırdığınızda:

/data/year=2024/month=01/*.parquet
/data/year=2024/month=02/*.parquet
/data/year=2025/month=01/*.parquet

Veya dış tablo konumlarındaki OPENROWSET joker karakterleri kullanarak belirli bölümleri sorgulayabilirsiniz:

-- Query only January 2025 data
SELECT *
FROM OPENROWSET(
    BULK '/data/year=2025/month=01/*.parquet',
    DATA_SOURCE = 's3_ds',
    FORMAT = 'PARQUET'
) AS [data];

Dinamik klasör elemeye yönelik olarak, daha geniş bir klasör yolunu sorgulayın ve filepath() ögelerini kullanarak bölümleri çalışma zamanında ortadan kaldırın.

SELECT
    r.filepath(1) AS [year],
    r.filepath(2) AS [month],
    COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
    BULK '/data/year=*/month=*/*.parquet',
    DATA_SOURCE = 's3_ds',
    FORMAT = 'PARQUET'
) WITH (
    customer_id INT,
    amount DECIMAL(10, 2)
) AS [r]
WHERE
    r.filepath(1) = '2025'
    AND r.filepath(2) = '01'
GROUP BY
    r.filepath(1),
    r.filepath(2);

Bu yaklaşım, optimum sorgu performansı için klasör düzeyinde bölüm kaldırma ile parquet dosya düzeyi baskılamayı birleştirir. Klasör desenleriyle parquet dosyalarını sorgulama hakkında eksiksiz bir öğretici için bkz. PolyBase ile S3 uyumlu nesne depolama alanında parquet dosyasını sanallaştırma.

Örnekler

Zorlamalı aşağı itme

SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (FORCE EXTERNALPUSHDOWN);

İtmeyi devre dışı bırak

SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (DISABLE EXTERNALPUSHDOWN);