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 |
|---|---|---|---|---|---|
| Obecná rozhraní 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 funkcemi nejsou žádné rozdíly, pokud jde o výpočet posunu.
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.
| Agregace | Filtry (binární porovnání) |
|---|---|
| Count_Big | NotEqual |
| 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, aby mohl využívat vzdálené výpočetní prostředky a omezit data odesílaná přes síť.
Posun spojení
V mnoha případech může PolyBase usnadnit posun operátoru spojení pro spojení dvou externích tabulek ve stejném externím zdroji dat, což výrazně zlepší výkon.
Pokud je možné spojení provést v externím zdroji dat, sníží se tím objem přesunu dat a zlepší se výkon dotazu. Bez optimalizace spojení musí být data z tabulek, které se mají spojit, přenesena místně do tempdb a následně spojena.
V případě distribuovaných spojení (spojování místní tabulky k externí tabulce), pokud není v připojené externí tabulce filtr, musí se všechna data v externí tabulce převést místně, tempdb aby bylo možné provést operaci spojení. Například následující dotaz nemá žádné filtrování pro podmínku spojení externí tabulky, což způsobí, že se načtou všechna data z externí tabulky.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
Vzhledem k tomu, že spojení je ve E.id sloupci externí tabulky, je-li do tohoto sloupce přidána podmínka filtru, lze filtr posunout dolů a snížit tak 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 následující 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, , NOTINa LIKE mohou být posunut dolů. Skutečné chování závisí na tom, jak optimalizátor dotazů přepisuje výrazy operátoru jako řadu příkazů, které používají základní relační operátory.
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 následující funkce pro posun predikátu.
Ř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 a času
DATEADDDATEDIFFDATEPART
Syntaxe, která brání posunu
Následující funkce nebo syntaxe T-SQL zabraňuje posunutí 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
Při zadávání proměnné v klauzuli filtru se ve výchozím nastavení zabrání posunu klauzule filtru. Pokud například spustíte následující dotaz, klauzule filtru se nedostane dolu.
DECLARE @BusinessEntityID INT
SELECT * FROM [Person].[BusinessEntity]
WHERE BusinessEntityID = @BusinessEntityID;
Chcete-li dosáhnout pushdownu proměnné, musíte povolit funkci optimalizace dotazů pomocí opravných balíčků hotfix. Můžete to provést některým z následujících způsobů:
- Úroveň instance: Povolení příznaku trasování 4199 jako spouštěcího parametru instance
- Úroveň databáze: V kontextu databáze, která obsahuje externí objekty PolyBase, spusťte
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON - Úroveň dotazu: Použijte nápovědu k dotazu
OPTION (QUERYTRACEON 4199)neboOPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'))
Toto omezení platí pro provádění sp_executesql. Toto omezení platí také pro využití některých funkcí v klauzuli filtru.
Možnost předání proměnné byla poprvé zavedena v SQL Serveru 2019 CU5.
Konflikt kolace
Pushdown nemusí být možné u dat s různými kolacemi. Operátory, jako jsou COLLATE , můžou také kolidovat s výsledkem. Podporují se stejné kolace nebo binární kolace. Další informace naleznete v tématu Jak poznat, zda nastalo seskupení.
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. U souborů parquet je možné prosadit následující operace:
- 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 sloupec.
Přítomnost následujících možností zabraňuje posunu souborů parquet:
- Virtuální sloupce.
- Porovnání sloupců
- Převod typu parametru
Podporované datové typy
- Bit
- TinyInt
- SmallInt
- BigInt
- real
- Plovat
- VARCHAR (Bin2Collation, CodePageConversion, BinCollation)
- NVARCHAR (Bin2Collation, BinCollation)
- Binary
- DateTime2 (výchozí a 7místná přesnost)
- Date
- Čas (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
- Smallmoney
- DateTime
- Smalldatetime
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);
Související obsah
- Další informace o PolyBase naleznete v tématu Úvod k virtualizaci dat pomocí PolyBase
- Jak zjistit, jestli došlo k externímu prosazení