Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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:
- Hadoop'ta pushdown hesaplamasını etkinleştirme
- Oracle'da dış verilere erişmek için PolyBase'i yapılandırma
- PolyBase'i Teradata'daki dış verilere erişecek şekilde yapılandırma
- PolyBase'i MongoDB'deki dış verilere erişecek şekilde yapılandırma
- POLYBase'i ODBC genel türleriyle dış verilere erişecek şekilde yapılandırma
- POLYBase'i SQL Server'da dış verilere erişecek şekilde yapılandırma
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:
CONCATDATALENGTHLENLIKELOWERLTRIMRTRIMSUBSTRINGUPPER
Matematiksel işlevler:
ABSACOSASINATANCEILINGCOSEXPFLOORPOWERSIGNSINSQRTTAN
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:
DATEADDDATEDIFFDATEPART
İtmeyi engelleyen söz dizimi
Bu T-SQL işlevleri veya söz dizimi öğeleri, aşağı itme hesaplamasını engeller:
AT TIME ZONECONCAT_WSTRANSLATERANDCHECKSUMBINARY_CHECKSUMHASHBYTESISJSONJSON_VALUEJSON_QUERYJSON_MODIFYNEWIDSTRING_ESCAPECOMPRESSDECOMPRESSGREATESTLEASTPARSE
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)veyaOPTION (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:
- PolyBase'i S3 uyumlu nesne depolama dış verilere erişecek şekilde yapılandırma
- PolyBase ile S3 uyumlu nesne depolama alanında parquet dosyasını sanallaştırma
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);
İlgili içerik
- SQL Server'da PolyBase ile veri sanallaştırma
- Dış baskının gerçekleşip gerçekleşmediğini belirleme
- PolyBase'i S3 uyumlu nesne depolama dış verilere erişecek şekilde yapılandırma
- PolyBase ile S3 uyumlu nesne depolama alanında parquet dosyasını sanallaştırma