Sdílet prostřednictvím


Posun výpočtů v PolyBase

platí pro: SQL Server 2016 (13.x) a novější verze

Zpracování s využitím pushdown zlepšuje výkon dotazů na externí zdroje dat. Počínaje SQL Serverem 2016 (13.x) byly pro externí Hadoop zdroje dat k dispozici výpočty přiřazené na nižší úrovni. SQL Server 2019 (15.x) zavedl výpočty pushdownu pro jiné typy externích zdrojů dat.

Poznámka:

Chcete-li zjistit, zda vaše dotazování těží z výpočtů PolyBase pushdown, přečtěte si Jak zjistit, zda došlo k externímu pushdownu.

Povolit počítání pushdown

Následující články obsahují informace o konfiguraci propagace výpočtů pro konkrétní typy externích zdrojů dat:

Tato tabulka shrnuje podporu výpočtů typu pushdown na různých externích zdrojích dat:

Zdroj dat Joins Projekce Aggregations Filtry Statistika
Generický ODBC Ano Ano Ano Ano Ano
Oracle Ano+ Ano Ano Ano Ano
SQL Server Ano Ano Ano Ano Ano
Teradata Ano Ano Ano Ano Ano
MongoDB* Ne Ano Ano*** Ano*** Ano
Hadoop Ne Ano Některé** Některé** Ano
Azure Blob Storage Ne Ne Ne Ne Ano

* Podpora nabízení změn ve službě Azure Cosmos DB je povolená prostřednictvím rozhraní API služby Azure Cosmos DB pro MongoDB.

** Viz výpočetní funkce Pushdown a poskytovatelé Hadoopu.

Podpora nabízení pro agregace a filtry pro konektor MongoDB ODBC pro SQL Server 2019 byla zavedena s SQL Serverem 2019 CU18.

+ Oracle podporuje průchod dolů pro spojení, ale možná budete muset vytvořit statistiky pro spojené sloupce, abyste dosáhli průchodu dolů.

Poznámka:

Výpočet odsdílení změn je možné zablokovat určitou syntaxí T-SQL. Další informace najdete v syntaxi, která brání posunu.

Výpočty s redukcí dat a poskytovatelé Hadoopu

PolyBase aktuálně podporuje dva poskytovatele Hadoop: Hortonworks Data Platform (HDP) a Cloudera Distributed Hadoop (CDH). Mezi těmito dvěma poskytovateli nejsou žádné rozdíly z hlediska pushdown výpočtu.

Aby bylo možné s Hadoopem použít funkci nabízení výpočtů, musí mít cílový cluster Hadoop základní komponenty: HDFS, YARN a MapReduce s povoleným serverem historie úloh. PolyBase odešle dotaz pushdownu prostřednictvím MapReduce a načítá stav ze serveru historie úloh. Bez obou komponent dotaz selže.

K určité agregaci musí dojít, jakmile data dosáhnou SQL Serveru. Část agregace se ale vyskytuje v Hadoopu. Tato metoda je běžná v výpočetních agregacích v systémech masivního paralelního zpracování.

Poskytovatelé Systému Hadoop podporují následující agregace a filtry.

Aggregations Filtry (binární porovnání)
Count_Big Nerovno
Suma LessThan
Průměr menší nebo rovno
Max Větší nebo rovno
Minuta GreaterThan
Approx_Count_Distinct Je
IsNot

Klíčové užitečné scénáře výpočtu odsdílení změn

Při delegování výpočtů pomocí PolyBase můžete úkoly výpočtů svěřit externím zdrojům dat. Tím se sníží zatížení instance SQL Serveru a výrazně se zlepší výkon.

SQL Server může odesílat spojení, projekce, agregace a filtry externím zdrojům dat, využívat vzdálené výpočetní prostředky a omezovat data odesílaná přes síť.

Připojit se ke snižování

PolyBase může usnadnit propagaci operátoru spojení při slučování dvou externích tabulek z téhož externího zdroje dat, což výrazně zvyšuje výkon.

Když externí zdroj dat provede spojení, sníží se tím objem přesunu dat a zlepší se výkon dotazů. Bez propagace spojení musí SQL Server lokálně přenést data z obou tabulek do tempdb a pak provést spojení.

V případě distribuovaných spojení (spojování místní tabulky k externí tabulce), pokud váš filtr neplatí pro připojenou externí tabulku, musí SQL Server přenést všechna data z externí tabulky místně, aby tempdb bylo možné provést operaci spojení. Například následující dotaz nemá žádné filtrování pro podmínku spojení externí tabulky, což vede ke čtení všech dat z externí tabulky.

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

Vzhledem k tomu, že spojení používá E.id sloupec externí tabulky, při přidání podmínky filtru do tohoto sloupce může SQL Server vložit filtr, čímž se sníží počet řádků přečtených z externí tabulky.

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

Vyberte podmnožinu řádků

Pomocí predikátového tlačení můžete zlepšit výkon dotazu, který vybírá podmnožinu řádků z externí tabulky.

V tomto příkladu SQL Server zahájí úlohu redukce mapování, která načte řádky, které odpovídají predikátu customer.account_balance < 200000 v Hadoopu. Vzhledem k tomu, že se dotaz může úspěšně dokončit bez kontroly všech řádků v tabulce, zkopírují se do SQL Serveru pouze řádky, které splňují kritéria predikátu. Ušetří se tím značný čas a vyžaduje méně dočasného prostoru úložiště, když je počet zůstatků < zákazníků 200000 malý oproti počtu zákazníků s zůstatky >na účtu = 2 00000.

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

Zvolte podmnožinu sloupců

Použití predikát pushdownu ke zlepšení výkonu dotazu, který vybere podmnožinu sloupců z externí tabulky.

V tomto dotazu SQL Server zahájí úlohu redukce mapování, která předzpracuje textový soubor s oddělovači Hadoop, aby se do SQL Serveru zkopírovala pouze data pro dva sloupce, customer.name a customer.zip_code.

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

Pushdown pro základní výrazy a operátory

SQL Server umožňuje tyto základní výrazy a operátory pro predikát pushdown:

  • Binární relační operátory (<, >, =, !=, <>, >=<=) pro číselné hodnoty, datum a čas.
  • Aritmetické operátory (+, -, *, /, %).
  • Logické operátory (AND, OR).
  • Unární operátory (NOT, IS NULL, IS NOT NULL).

Operátory BETWEEN, NOT, INa LIKE lze nasdílit dolů v závislosti na tom, jak optimalizátor dotazu přepisuje výrazy operátoru jako řadu příkazů pomocí základních relačních operátorů.

Dotaz v tomto příkladu obsahuje několik predikátů, které lze odeslat do Hadoopu. SQL Server může odesílat úlohy redukce mapování do systému Hadoop, aby provedl predikát customer.account_balance <= 200000. Výraz BETWEEN 92656 AND 92677 se také skládá z binárních a logických operací, které lze odeslat do Hadoopu. Logický AND v customer.account_balance AND customer.zipcode je finální výraz.

Vzhledem k této kombinaci predikátů mohou úlohy redukce mapování provádět všechny klauzule WHERE. Do SQL Serveru se zkopírují jenom data, která splňují SELECT kritéria.

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

Podporované funkce pro pushdown

SQL Server umožňuje těmto funkcím využívat predikát pushdown:

Řetězcové funkce:

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

Matematické funkce:

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

Obecné funkce:

  • COALESCE *
  • NULLIF

* Použití s COLLATE může zabránit odsunutí v některých scénářích. Další informace naleznete v tématu Konflikt kolace.

Funkce data & času:

  • DATEADD
  • DATEDIFF
  • DATEPART

Syntaxe, která brání posunu

Tyto funkce nebo syntaxe T-SQL brání posunu výpočtu:

  • 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

Podpora zpracování na nižší úrovni pro syntaxi FORMAT a TRIM byla zavedena v SQL Serveru 2019 (15.x) CU10.

Klauzule Filter s proměnnou

Když v klauzuli filtru zadáte proměnnou, SQL Server ve výchozím nastavení klauzuli filtru nepřenese. Například následující dotaz neaplikuje klauzuli filtru:

DECLARE @BusinessEntityID INT

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

Pokud chcete povolit prosazení proměnné, povolte funkci aktualizací hotfix optimalizátoru dotazů pomocí některé z těchto metod:

  • Úroveň instance: Povolte příznak trasování 4199 jako parametr při spuštění instance.
  • Úroveň databáze: V kontextu databáze, která má PolyBase externí objekty, spusťte ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON.
  • Úroveň dotazu: Použijte nápovědu OPTION (QUERYTRACEON 4199) k dotazu nebo OPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES')).

Toto omezení se vztahuje na provádění sp_executesql a na některé funkce v klauzuli filtru.

SQL Server 2019 CU5 poprvé zavedl možnost přenesení proměnné.

Další informace najdete v tématu sp_executesql.

Konflikt kolace

Funkce Pushdown nemusí fungovat s daty, která mají různé kolace. Operátory, jako jsou COLLATE , můžou také kolidovat s výsledkem. SQL Server podporuje stejné kolace nebo binární kolace. Další informace najdete v tématu Jak zjistit, jestli došlo k externímu posunu.

Optimalizace dotazů pro soubory ve formátu Parquet

Počínaje verzí SQL Server 2022 (16.x) zavedla PolyBase podporu pro soubory „parquet“. SQL Server je schopen provést odstranění řádků i sloupců při přeneseném zpracování v parquet.

Podporované externí zdroje dat

Pushdown Parquet je podporovaný pro následující externí zdroje dat:

  • Úložiště objektů kompatibilní s S3
  • Azure Blob Storage
  • Azure Data Lake Storage Gen2

Podrobnosti o konfiguraci najdete tady:

Operace propadávání

SQL Server může delegovat tyto operace na soubory Parquet.

  • Binární relační operátory (>, >=, <=, <) pro číselné hodnoty, datum a čas
  • Kombinace relačních operátorů (> AND <, >= AND <, > AND <=, <= AND >=).
  • Ve filtru seznamu (sloupec1 = val1 NEBO sloupec1 = val2 OR vol1 = val3).
  • IS NOT NULL nad sloupcem.

Tyto položky brání posunu souborů parquet:

  • Virtuální sloupce.
  • Porovnání sloupců
  • Převod typu parametru

Podporované datové typy

  • bit
  • tinyint
  • smallint
  • bigint
  • skutečné
  • float
  • varchar (Bin2Collation, CodePageConversion, BinCollation)
  • nvarchar (Bin2Collation, BinCollation)
  • binary
  • datetime2 (výchozí a 7místná přesnost)
  • date
  • time (výchozí a 7místná přesnost)
  • Číselné *

* Podporováno, když se měřítko parametru zarovná se měřítkem sloupce nebo když je parametr explicitně přetypován na desetinné číslo.

Datové typy, které brání posunu parquet

  • peníze
  • málo peněz
  • datetime
  • smalldatetime

Odstranění oddílů se strukturami složek

PolyBase může použít struktury složek k odstranění oddílů, což snižuje množství dat kontrolovaných během dotazů. Při uspořádání souborů Parquet v hierarchických složkách (například podle roku, měsíce nebo jiných klíčů dělení) může PolyBase přeskočit celé složky, které neodpovídají predikátům dotazu.

Pokud například data strukturujete takto:

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

Konkrétní oddíly můžete dotazovat pomocí zástupných znaků v OPENROWSET poloze externí tabulky:

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

Pokud chcete odstranit dynamické složky, zadejte dotaz na širší cestu ke složce a pomocí filepath() predikátů odstraňte oddíly za běhu:

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

Tento přístup kombinuje eliminaci oddílů na úrovni složek s optimalizací na úrovni souborů Parquet pro optimální výkon dotazů. Kompletní kurz dotazování souborů parquet se vzory složek najdete v tématu Virtualizace souboru parquet v úložišti objektů kompatibilním s S3 pomocí PolyBase.

Examples

Vynucení posunu

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

Zakázání nabízení změn

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