Megosztás:


Leküldéses számítások a PolyBase-ben

A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók

A továbbított számítás javítja a külső adatforrásokon lévő lekérdezések teljesítményét. Az SQL Server 2016-tól (13.x verzió) kezdődően az adat-továbbításos számítások elérhetők voltak a külső Hadoop adatforrásokhoz. Az SQL Server 2019 (15.x) bevezette a leküldéses számításokat más típusú külső adatforrások esetében.

Megjegyzés:

Annak megállapításához, hogy a PolyBase leküldéses számítása hasznos-e a lekérdezésben, olvassa el a Hogyan állapíthatja meg, hogy történt-e külső leküldés.

Leküldéses számítások engedélyezése

Az alábbi cikkek a leküldéses számítások konfigurálásával kapcsolatos információkat tartalmaznak bizonyos külső adatforrástípusokhoz:

Ez a táblázat a pushdown számítások támogatását foglalja össze különféle külső adatforrások esetében.

Adatforrás Joins Előrejelzések Összesítések Szűrők statisztika
Általános ODBC Igen Igen Igen Igen Igen
Oracle Igen+ Igen Igen Igen Igen
SQL Server Igen Igen Igen Igen Igen
Teradata Igen Igen Igen Igen Igen
MongoDB* No Igen Igen*** Igen*** Igen
Hadoop No Igen Néhány** Néhány** Igen
Azure Blob-tároló Nem Nem Nem Nem Igen

* Az Azure Cosmos DB leküldéses támogatása a MongoDB-hez készült Azure Cosmos DB API-val engedélyezve van.

** Lásd a Pushdown-számításokat és a Hadoop-szolgáltatókat.

Az SQL Server 2019-hez készült MongoDB ODBC-összekötő összesítéseinek és szűrőinek leküldéses támogatása az SQL Server 2019 CU18-ban jelent meg.

+ Az Oracle támogatja az illesztések leküldését, de előfordulhat, hogy a leküldés eléréséhez statisztikákat kell létrehoznia az illesztési oszlopokról.

Megjegyzés:

A leküldéses számítást blokkolhatja néhány T-SQL-szintaxis. További információért tekintse meg a leküldést megakadályozó szintaxist.

Leküldéses feldolgozás és Hadoop szolgáltatók

A PolyBase jelenleg két Hadoop-szolgáltatót támogat: a Hortonworks Data Platformot (HDP) és a Cloudera Distributed Hadoopot (CDH). A pushdown számítás szempontjából nincs különbség a két funkció között.

Ha a számítási leküldéses funkciót a Hadooptal szeretné használni, a cél Hadoop-fürtnek rendelkeznie kell a HDFS, YARN és MapReduce alapvető összetevőivel, és engedélyezve van a feladatelőzmény-kiszolgáló. A PolyBase a MapReduce-on keresztül küldi el az átfuttatott lekérdezést, és lekéri az állapotot a feladattörténet-kiszolgálóról. Bármelyik összetevő nélkül a lekérdezés meghiúsul.

Az adatok SQL Serverre való elérése után bizonyos összesítésnek kell történnie. Az összesítés egy része azonban a Hadoopban történik. Ez a módszer gyakori a masszívan párhuzamos feldolgozási rendszerekben az összesítések számításában.

A Hadoop-szolgáltatók az alábbi összesítéseket és szűrőket támogatják.

Összesítések Szűrők (bináris összehasonlítás)
Count_Big NotEqual
Összeg Kevesebb mint
Átlag Kisebb vagy egyenlő
Max Nagyobb vagy egyenlő
Min GreaterThan
Approx_Count_Distinct Van
NemEz

A "pushdown computation" legfontosabb hasznos forgatókönyvei

A PolyBase leküldéses számítás funkciójával számítási feladatokat delegálhat külső adatforrásokhoz. Ez csökkenti az SQL Server-példány számítási feladatait, és jelentősen javíthatja a teljesítményt.

Az SQL Server leküldheti az illesztéseket, előrejelzéseket, összesítéseket és szűrőket külső adatforrásokra, hogy kihasználhassa a távoli számítás előnyeit, és korlátozza a hálózaton keresztül küldött adatokat.

Kapcsolódások műveleteinek optimalizálása

A PolyBase sok esetben megkönnyítheti az összekapcsolási operátor leküldését két külső tábla összekapcsolásához ugyanazon külső adatforráson, ami jelentősen javítja a teljesítményt.

Ha az illesztés elvégezhető a külső adatforráson, ez csökkenti az adatáthelyezés mennyiségét, és javítja a lekérdezés teljesítményét. Illesztés-leküldés nélkül az összekapcsolni kívánt táblák adatait helyileg a tempdb-be kell hozni, majd összekapcsolva feldolgozni.

Elosztott illesztések esetén (ha egy helyi táblát egy külső táblához csatlakoztat), hacsak nincs szűrő az összekapcsolt külső táblán, a külső tábla összes adatát helyileg kell behozni tempdb az illesztési művelet végrehajtásához. Az alábbi lekérdezés például nem szűr a külső táblaillesztési feltételre, ami a külső tábla összes adatának olvasását eredményezi.

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

Mivel az illesztés a külső tábla E.id oszlopán van, ha az oszlophoz szűrőfeltételt adunk, a szűrő leküldhető, ezáltal csökkentve a külső táblából beolvasott sorok számát.

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

Sorok részhalmazának kijelölése

Predikátumleküldéssel javíthatja egy olyan lekérdezés teljesítményét, amely egy külső tábla sorainak egy részhalmazát választja ki.

Ebben a példában az SQL Server egy térkép-csökkentési feladatot kezdeményez a Hadoop-predikátumnak customer.account_balance < 200000 megfelelő sorok lekéréséhez. Mivel a lekérdezés sikeresen befejeződhet a tábla összes sorának vizsgálata nélkül, a rendszer csak a predikátumi feltételeknek megfelelő sorokat másolja az SQL Serverre. Ez jelentős időt takarít meg, és kevesebb ideiglenes tárterületet igényel, ha a 200000 ügyfélegyenlegek < száma kicsi a számlaegyenleggel >rendelkező ügyfelek számához képest = 200000.

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

Oszlopok részhalmazának kijelölése

Predikátumleküldéssel javíthatja a teljesítményt egy olyan lekérdezés esetében, amely egy külső tábla oszlopainak egy részhalmazát választja ki.

Ebben a lekérdezésben az SQL Server egy MapReduce feladatot kezdeményez, hogy a Hadoop által tagolt szövegfájlt előfeldolgozza, így csak a customer.name és customer.zip_code oszlopok adatai kerülnek átmásolásra az SQL Serverbe.

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

Leküldés az alapszintű kifejezésekhez és operátorokhoz

Az SQL Server a következő alapkifejezéseket és operátorokat teszi lehetővé a predikátumleküldéshez.

  • Bináris operátorok az összehasonlításhoz (<, >, =, !=, <>, >=, <=) numerikus, dátum- és időértékekhez.
  • Számtani operátorok (+, -, *, /, %).
  • Logikai operátorok (AND, OR).
  • Unary operátorok (NOT, IS NULL, IS NOT NULL).

Az operátorok BETWEEN, NOT, INés LIKE lehet, hogy le lesznek küldve. A tényleges viselkedés attól függ, hogy a lekérdezésoptimalizáló hogyan írja át az operátorkifejezéseket alapszintű relációs operátorokat használó utasítások sorozataként.

A példában szereplő lekérdezés több predikátumot is tartalmazhat, amelyeket le lehet küldeni a Hadoopba. Az SQL Server le tudja küldeni a térkép-csökkentési feladatokat a Hadoopba a predikátum customer.account_balance <= 200000végrehajtásához. A kifejezés BETWEEN 92656 AND 92677 bináris és logikai műveletekből is áll, amelyek leküldhetők a Hadoopba. A logikai AND in customer.account_balance AND customer.zipcode egy végső kifejezés.

A predikátumok ezen kombinációját figyelembe véve a térkép-csökkentési feladatok az összes WHERE záradékot végrehajthatják. A rendszer csak a SELECT feltételeknek megfelelő adatokat másolja vissza az SQL Serverre.

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

Támogatott függvények leküldéshez

Az SQL Server a következő függvényeket teszi lehetővé a predikátum leküldéséhez.

Karakterlánc függvények

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

Matematikai függvények

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

Általános függvények

  • COALESCE *
  • NULLIF

* A COLLATE használata bizonyos esetekben megakadályozhatja a leküldést. További információért lásd: Rendezési ütközés.

Dátum- és időfüggvények

  • DATEADD
  • DATEDIFF
  • DATEPART

Szintaxis, amely megakadályozza a pushdown-t

A következő T-SQL-függvények vagy szintaxisok megakadályozzák a leküldéses számítást:

  • 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

Az SQL Server 2019 (15.x) CU10-ben bevezettük a leküldéses támogatást a FORMAT és TRIM szintaxis számára.

Szűrő feltétel változóval

Ha változót ad meg egy szűrőzáradékban, ez alapértelmezés szerint megakadályozza a szűrő záradék leküldését. Amennyiben például a következő lekérdezést futtatja, a szűrőkifejezés nem lesz végrehajtva.

DECLARE @BusinessEntityID INT

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

A változó leküldésének eléréséhez engedélyeznie kell a lekérdezés-optimalizáló gyorsjavítások funkcióját. Ez az alábbi módokon végezhető el:

  • Példányszint: A 4199-es nyomkövetési jelző engedélyezése a példány indítási paramétereként
  • Adatbázisszint: A PolyBase külső objektumokkal rendelkező adatbázis kontextusában hajtsa végre a ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON
  • Lekérdezési szint: Használja a lekérdezési jelzést OPTION (QUERYTRACEON 4199) vagy OPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'))

Ez a korlátozás a sp_executesql végrehajtására vonatkozik. A korlátozás a szűrőzáradék egyes függvényeinek kihasználtságára is vonatkozik.

A változó leküldésének képessége először az SQL Server 2019 CU5-ben lett bevezetve.

Rendezési ütközés

Előfordulhat, hogy az adatok különböző összehasonlítási rendje miatt a pushdown nem lehetséges. A hasonló COLLATE operátorok is zavarhatják az eredményt. Az egyenlő rendezések és a bináris rendezések támogatottak. További információért lásd: Hogyan állapíthatja meg, hogy történt-e leküldés.

Parquet-fájlok optimalizálása

Az SQL Server 2022-től kezdve (16.x) a PolyBase bevezette a parquet-fájlok támogatását. Az SQL Server képes sor- és oszlopeliminálást végrehajtani, miközben a leküldést a Parquet formátummal hajtja végre. A parquet-fájloknál a következő műveleteket lehet leképzíteni:

  • Bináris összehasonlító operátorok (>, >=, <=, <) numerikus, dátum- és időértékekhez.
  • Összehasonlító operátorok kombinációja (> AND <, >= AND <, > AND <=, <= AND >=).
  • Listaszűrőben (col1 = val1 VAGY col1 = val2 VAGY vol1 = val3).
  • NEM NULL érték az oszlop felett.

Az alábbiak jelenléte megakadályozza a pushdown alkalmazását a parquet-fájlok esetében.

  • Virtuális oszlopok.
  • Oszlop-összehasonlítás.
  • Paramétertípus konvertálása.

Támogatott adattípusok

  • Bit
  • TinyInt
  • SmallInt
  • BigInt
  • reál
  • Lebegés
  • VARCHAR (Bin2Collation, CodePageConversion, BinCollation)
  • NVARCHAR (Bin2Collation, BinCollation)
  • Binary
  • DateTime2 (alapértelmezett és 7 jegyű pontosság)
  • Date
  • Idő (alapértelmezett és 7 jegyű pontosság)
  • Numerikus*

* Támogatott, ha a paraméterskálázás az oszlopmérethez igazodik, vagy ha a paraméter explicit módon tizedesjelre van adva.

Adattípusok, amelyek megakadályozzák a Parquet szűkítését

  • Pénz
  • SmallMoney
  • DateTime
  • SmallDateTime

Példák

Leküldés kényszerítése

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

Pushdown letiltása

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