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). İtme hesaplaması açısından iki özellik arasında hiçbir fark yoktur.

Hadoop ile hesaplamalı iş yükü aktarımı işlevini kullanabilmek için, hedef Hadoop kümesinin HDFS, YARN ve MapReduce'un temel bileşenlerine ve etkin durumda bir iş geçmişi sunucusuna 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.

Toplamalar 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 yararlanmak ve ağ üzerinden gönderilen verileri kısıtlamak için birleştirmeleri, projeksiyonları, toplamaları ve filtreleri dış veri kaynaklarına gönderebilir.

Birleştirmelerin aşağı itme

Çoğu durumda PolyBase, birleştirme işlecinin aynı dış veri kaynağındaki iki dış tablonun birleşimi için gönderilmesini kolaylaştırabilir ve bu da performansı büyük ölçüde artırır.

Birleştirme dış veri kaynağında yapılabiliyorsa bu, veri taşıma miktarını azaltır ve sorgunun performansını artırır. Join pushdown olmadan, birleştirilecek tablolardaki veriler yerel olarak tempdb'ye getirilmeli ve ardından birleştirilmelidir.

Dağıtılmış birleşimler söz konusu olduğunda (bir yerel tabloyu dış tabloya birleştirme), birleştirilmiş dış tabloda bir filtre olmadığı sürece, birleştirme işlemini gerçekleştirmek için dış tablodaki tüm verilerin yerel olarak içine tempdb getirilmesi 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ıyla sonuçlanır.

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

Birleştirme dış tablonun sütununda olduğundan E.id , bu sütuna bir filtre koşulu eklenirse filtre aşağı gönderilebilir ve böylece dış tablodan okunan satır sayısı azaltılabilir.

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, koşul gönderimi için aşağıdaki temel ifadelere ve işleçlere 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).

İşleçler BETWEEN, NOT, IN ve LIKE aşağıya gönderilebilir. Gerçek davranış, sorgu iyileştiricisinin işleç ifadelerini temel ilişkisel işleçleri kullanan bir dizi deyim olarak yeniden yazma şekline bağlıdır.

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, koşul gönderimi için aşağıdaki işlevlere 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

Aşağıdaki T-SQL işlevleri veya söz dizimi, 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 belirtilirken, bu, varsayılan olarak filtre yan tümcesinin itilmesini engeller. Örneğin, aşağıdaki sorguyu çalıştırırsanız, filtre yan tümcesi aşağı gönderilmez:

DECLARE @BusinessEntityID INT

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

Değişkenin aşağı itme işlemini gerçekleştirmek için sorgu iyileştirici düzeltmeleri işlevselliğini etkinleştirmeniz gerekir. Bu, aşağıdaki yollardan herhangi biriyle yapılabilir:

  • Ö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 ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON komutunu çalıştırın.
  • Sorgu düzeyi: Sorgu ipucunu OPTION (QUERYTRACEON 4199) kullanın veya OPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'))

Bu sınırlama , sp_executesql yürütülmesi için geçerlidir. Sınırlama, filtre yan tümcesindeki bazı işlevlerin kullanımı için de geçerlidir.

Değişkenin aşağı itme özelliği ilk olarak SQL Server 2019 CU5'te kullanıma sunulmuştur.

Dizim çakışması

Farklı harmanlamalara sahip verilerle aşağı gönderme mümkün olmayabilir. gibi COLLATE işleçler de sonuca müdahale edebilir. Eşit harmanlamalar veya ikili harmanlamalar desteklenir. Daha fazla bilgi için bkz. Pushdown durumunun 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. Parquet dosyalarıyla aşağıdaki işlemler aşağı gönderilebilir:

  • 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).
  • "Kolon üzerinde IS NOT NULL ifadesi"

Aşağıdakilerin varlığı parquet dosyaları için aşağı itme işlemini engeller:

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

Desteklenen veri türleri

  • Parça
  • TinyInt
  • SmallInt
  • BigInt
  • Gerçek
  • Yüzmek
  • VARCHAR (Bin2Collation, CodePageConversion, BinCollation)
  • NVARCHAR (Bin2Collation, BinCollation)
  • Binary
  • DateTime2 (varsayılan ve 7 basamaklı duyarlık)
  • Date
  • Zaman (varsayılan ve 7 basamaklı hassasiyet)
  • Sayısal*

* Parametre ölçeği sütun ölçeğiyle hizalandığında veya parametre açıkça ondalık olarak yayınlandığında desteklenir.

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

  • Money
  • Smallmoney
  • DateTime
  • Smalldatetime

Ö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);