Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
- Povolit pushdown výpočty v Hadoopu
- Konfigurace PolyBase pro přístup k externím datům v Oracle
- Konfigurace PolyBase pro přístup k externím datům v Teradata
- Konfigurace PolyBase pro přístup k externím datům v MongoDB
- Konfigurace PolyBase pro přístup k externím datům pomocí obecných typů ODBC
- Konfigurace PolyBase pro přístup k externím datům na SQL Serveru
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:
CONCATDATALENGTHLENLIKELOWERLTRIMRTRIMSUBSTRINGUPPER
Matematické funkce:
ABSACOSASINATANCEILINGCOSEXPFLOORPOWERSIGNSINSQRTTAN
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:
DATEADDDATEDIFFDATEPART
Syntaxe, která brání posunu
Tyto funkce nebo syntaxe T-SQL brání posunu výpočtu:
AT TIME ZONECONCAT_WSTRANSLATERANDCHECKSUMBINARY_CHECKSUMHASHBYTESISJSONJSON_VALUEJSON_QUERYJSON_MODIFYNEWIDSTRING_ESCAPECOMPRESSDECOMPRESSGREATESTLEASTPARSE
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 neboOPTION (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:
- Konfigurace PolyBase pro přístup k externím datům v úložišti objektů kompatibilním s S3
- Virtualizovat soubor Parquet v úložišti objektů kompatibilním s S3 pomocí PolyBase
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);