Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
gäller för: SQL Server 2016 (13.x) och senare versioner
Pushdown-beräkningen förbättrar prestandan för förfrågningar på externa datakällor. Från och med SQL Server 2016 (13.x) var pushdown-beräkningar tillgängliga för hadoop-externa datakällor. SQL Server 2019 (15.x) introducerade pushdown-beräkningar för andra typer av externa datakällor.
Anmärkning
För att avgöra om PolyBase-pushdown-beräkning gynnar din fråga, se Så här ser du om extern pushdown har inträffat.
Aktivera pushdown-beräkning
Följande artiklar innehåller information om hur du konfigurerar pushdown-beräkning för specifika typer av externa datakällor:
- Aktivera pushdown-beräkning i Hadoop
- Konfigurera PolyBase för åtkomst till externa data i Oracle
- Konfigurera PolyBase för åtkomst till externa data i Teradata
- Konfigurera PolyBase för åtkomst till externa data i MongoDB
- Konfigurera PolyBase för åtkomst till externa data med allmänna ODBC-typer
- Konfigurera PolyBase för åtkomst till externa data i SQL Server
Den här tabellen sammanfattar stöd för pushdown-beräkning på olika externa datakällor:
| Datakälla | Ansluter sig | Prognoser | Aggregations | Filterar | Statistics |
|---|---|---|---|---|---|
| ODBC (allmän) | Yes | Yes | Yes | Yes | Yes |
| Oracle | Ja+ | Yes | Yes | Yes | Yes |
| SQL Server | Yes | Yes | Yes | Yes | Yes |
| Teradata | Yes | Yes | Yes | Yes | Yes |
| Mongodb* | No | Yes | Ja*** | Ja*** | Yes |
| Hadoop | No | Yes | Några** | Några** | Yes |
| Azure Blob Storage | Nej | Nej | Nej | Nej | Yes |
* Stöd för Azure Cosmos DB-pushdown aktiveras via Azure Cosmos DB API för MongoDB.
** Se Pushdown-beräkning och Hadoop-leverantörer.
Pushdown-stöd för aggregeringar och filter för MongoDB ODBC-anslutningsappen för SQL Server 2019 introducerades med SQL Server 2019 CU18.
+ Oracle stöder pushdown för kopplingar, men du kan behöva skapa statistik för kopplingskolumnerna för att uppnå pushdown.
Anmärkning
Pushdown-beräkningen kan blockeras av viss T-SQL-syntax. Mer information finns i Syntax som förhindrar nedtryckning.
Pushdown-beräkning och Hadoop-leverantörer
PolyBase stöder för närvarande två Hadoop-leverantörer: Hortonworks Data Platform (HDP) och Cloudera Distributed Hadoop (CDH). Det finns inga skillnader mellan de två leverantörerna när det gäller pushdown-beräkning.
Om du vill använda beräkningens pushdown-funktioner med Hadoop måste hadoop-målklustret ha kärnkomponenterna HDFS, YARN och MapReduce, med jobbhistorikservern aktiverad. PolyBase skickar pushdown-frågan via MapReduce och hämtar status från jobbhistorikservern. Utan någon av komponenterna misslyckas frågan.
En viss aggregering måste ske när data når SQL Server. Men en del av aggregeringen sker i Hadoop. Den här metoden är vanlig vid beräkning av aggregeringar i massivt parallella bearbetningssystem.
Hadoop-leverantörer stöder följande sammansättningar och filter.
| Aggregations | Filter (binär jämförelse) |
|---|---|
| Count_Big | NotEqual |
| Summa | Mindre än |
| Avg | LessOrEqual |
| Max | StörreEllerLikaMed |
| Min | GreaterThan |
| Approx_Count_Distinct | är |
| IsNot |
Nyckelfördelaktiga scenarier för pushdownberäkningar
Med PolyBase pushdown-beräkning kan du delegera beräkningsuppgifter till externa datakällor. Detta minskar arbetsbelastningen på SQL Server-instansen och kan avsevärt förbättra prestandan.
SQL Server kan skicka kopplingar, projektioner, aggregeringar och filter till externa datakällor, dra nytta av fjärrberäkning och begränsa data som skickas via nätverket.
Gå med i pushdown
PolyBase kan underlätta pushdown för kopplingsoperatorn när du ansluter två externa tabeller till samma externa datakälla, vilket avsevärt förbättrar prestandan.
När den externa datakällan utför kopplingen minskar mängden dataförflyttning och förbättrar frågeprestandan. Utan join pushdown måste SQL Server hämta data från båda tabellerna lokalt in i tempdb och sedan utföra kopplingen.
När det gäller distribuerade kopplingar (koppla en lokal tabell till en extern tabell), såvida inte filtret gäller för den anslutna externa tabellen, måste SQL Server ta med alla data från den externa tabellen lokalt för tempdb att utföra kopplingsåtgärden. Följande fråga har till exempel ingen filtrering av villkoret för extern tabellkoppling, vilket resulterar i läsning av alla data från den externa tabellen.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
Eftersom kopplingen använder kolumnen i E.id den externa tabellen kan SQL Server, när du lägger till ett filtervillkor i kolumnen, trycka ned filtret, vilket minskar antalet rader som lästs från den externa tabellen.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
WHERE E.id = 20000
Välj en delmängd av rader
Använd pushdown för att förbättra prestanda för en sökfråga som väljer en delmängd rader från en extern tabell.
I det här exemplet initierar SQL Server ett map-reduce-jobb för att hämta de rader som matchar predikatet customer.account_balance < 200000 på Hadoop. Eftersom frågan kan slutföras utan att genomsöka alla rader i tabellen kopieras endast de rader som uppfyller predikatvillkoren till SQL Server. Detta sparar betydande tid och kräver mindre tillfälligt lagringsutrymme när antalet kundsaldon < 200000 är litet jämfört med antalet kunder med kontosaldon >= 200000.
SELECT * FROM customer WHERE customer.account_balance < 200000;
SELECT * FROM SensorData WHERE Speed > 65;
Välj en delmängd av kolumner
Använd predikatpushdown för att förbättra prestandan för en fråga som väljer ut en del av kolumnerna från en extern tabell.
I den här frågan initierar SQL Server ett map-reduce-jobb för att förbearbeta hadoop-avgränsad textfil så att endast data för de två kolumnerna, customer.name och customer.zip_code, kopieras till SQL Server.
SELECT customer.name, customer.zip_code
FROM customer
WHERE customer.account_balance < 200000;
Pushdown för grundläggande uttryck och operatorer
SQL Server tillåter dessa grundläggande uttryck och operatorer för predikatoptimering:
- Binära jämförelseoperatorer (
<,>,=,!=,<>,>=,<=) för numeriska, datum- och tidsvärden. - Aritmetiska operatorer (
+,-,*,/,%). - Logiska operatorer (
AND,OR). - Unära operatorer (
NOT,IS NULL,IS NOT NULL).
Operatorerna BETWEEN, NOT, INoch LIKE kan tryckas ned beroende på hur frågeoptimeraren skriver om operatoruttrycken som en serie instruktioner med hjälp av grundläggande relationsoperatorer.
Frågan i det här exemplet har flera predikat som kan skickas ned till Hadoop. SQL Server kan skicka map-reduce-jobb till Hadoop för att utföra predikatet customer.account_balance <= 200000. Uttrycket BETWEEN 92656 AND 92677 består också av binära och logiska åtgärder som kan skickas till Hadoop. Det logiska AND i customer.account_balance AND customer.zipcode är ett slutligt uttryck.
Med den här kombinationen av predikat kan map-reduce-jobben utföra alla WHERE-satser. Endast de data som uppfyller SELECT kriterierna kopieras tillbaka till SQL Server.
SELECT * FROM customer
WHERE customer.account_balance <= 200000
AND customer.zipcode BETWEEN 92656 AND 92677;
Funktioner som stöds för pushdown
SQL Server tillåter dessa funktioner för predikat-pushdown:
Strängfunktioner:
CONCATDATALENGTHLENLIKELOWERLTRIMRTRIMSUBSTRINGUPPER
Matematiska funktioner:
ABSACOSASINATANCEILINGCOSEXPFLOORPOWERSIGNSINSQRTTAN
Allmänna funktioner:
COALESCE*NULLIF
* Användning med COLLATE kan förhindra pushdown i vissa scenarier. Mer information finns i Sorteringskonflikt.
Datum- och tidsfunktioner:
DATEADDDATEDIFFDATEPART
Syntax som förhindrar nedtryckning
Dessa T-SQL-funktioner eller syntaxobjekt förhindrar pushdown-beräkning:
AT TIME ZONECONCAT_WSTRANSLATERANDCHECKSUMBINARY_CHECKSUMHASHBYTESISJSONJSON_VALUEJSON_QUERYJSON_MODIFYNEWIDSTRING_ESCAPECOMPRESSDECOMPRESSGREATESTLEASTPARSE
Pushdown-stöd för syntaxen FORMAT och TRIM introducerades i SQL Server 2019 (15.x) CU10.
Filtersats med variabel
När du anger en variabel i en filtersats skjuter SQL Server inte ned filtersatsen som standard. Följande fråga trycker till exempel inte ned filtersatsen:
DECLARE @BusinessEntityID INT
SELECT * FROM [Person].[BusinessEntity]
WHERE BusinessEntityID = @BusinessEntityID;
För att aktivera push-nedtryckning av variabeln, aktivera funktionen för snabbkorrigeringar av frågeoptimeraren med hjälp av någon av dessa metoder:
- Instansnivå: Aktivera spårningsflagga 4199 som startparameter för instansen.
-
Databasnivå: I sammanhanget av databasen som har PolyBase externa objekt, kör
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON. -
Frågenivå: Använd frågetips
OPTION (QUERYTRACEON 4199)ellerOPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES')).
Den här begränsningen gäller för körning av sp_executesql och för vissa funktioner i filterklausulen.
SQL Server 2019 CU5 introducerade först möjligheten att push-överföra variabeln.
Mer information finns i sp_executesql.
Sorteringskonflikt
Pushdown kanske inte fungerar med data som har olika kollationer. Operatorer som COLLATE kan också störa resultatet. SQL Server stöder lika sortering eller binär sortering. Mer information finns i Så här anger du om en extern nedtryckning har inträffat.
Pushdown för parquetfiler
Från och med SQL Server 2022 (16.x) introducerade PolyBase stöd för parquet-filer. SQL Server kan utföra både rad- och kolumneliminering när pushdown utförs med parquet-formatet.
Externa datakällor som stöds
Parquet-pushdown stöds för följande externa datakällor:
- S3-kompatibel objektlagring
- Azure Blob Storage-lagringstjänst
- Azure Data Lake Storage Gen2
Mer information om konfiguration finns i:
- Konfigurera PolyBase för åtkomst till externa data i S3-kompatibel objektlagring
- Virtualisera en Parquet-fil i ett objektlagringssystem kompatibelt med S3 med PolyBase
Pushdown-åtgärder
SQL Server kan delegera dessa åtgärder med Parquet-filer:
- Binära jämförelseoperatorer (>, >=, <=, <) för numeriska värden, datum- och tidsvärden.
- Kombination av jämförelseoperatorer (> AND <, >= AND <, > AND <=, <= AND >=).
- I listfiltret (col1 = val1 OR col1 = val2 OR col1 = val3).
- ÄR INTE NULL över en kolumn.
Dessa objekt förhindrar pushdown för parquet-filer:
- Virtuella kolumner.
- Kolumnjämförelse.
- Konvertering av parametertyp.
Datatyper som stöds
- bit
- tinyint
- smallint
- bigint
- riktiga
- float
- varchar (Bin2Collation, CodePageConversion, BinCollation)
- nvarchar (Bin2Collation, BinCollation)
- binary
- datetime2 (standard och 7-siffrig precision)
- date
- tid (standard och 7-siffrig precision)
- Numerisk *
* Stöds när parameterskalan överensstämmer med kolumnskalan, eller när parametern uttryckligen omvandlas till decimal.
Datatyper som förhindrar parquet-pushdown
- pengar
- småpengar
- datetime
- smalldatetime
Partitionseliminering med mappstrukturer
PolyBase kan använda mappstrukturer för partitionseliminering, vilket minskar mängden data som genomsöks under frågor. När du organiserar parquet-filer i hierarkiska mappar (till exempel efter år, månad eller andra partitioneringsnycklar) kan PolyBase hoppa över hela mappar som inte matchar dina frågepredikat.
Om du till exempel strukturerar dina data som:
/data/year=2024/month=01/*.parquet
/data/year=2024/month=02/*.parquet
/data/year=2025/month=01/*.parquet
Du kan köra frågor mot specifika partitioner med jokertecken på OPENROWSET eller externa tabellplatser:
-- Query only January 2025 data
SELECT *
FROM OPENROWSET(
BULK '/data/year=2025/month=01/*.parquet',
DATA_SOURCE = 's3_ds',
FORMAT = 'PARQUET'
) AS [data];
För dynamisk mappeliminering utför du en sökning på en bredare mappsökväg och använder filepath() villkor för att eliminera partitioner vid körning.
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);
Den här metoden kombinerar partitionseliminering på mappnivå med parquet-pushdown på filnivå för optimal frågeprestanda. En komplett handledning för hur du ställer frågor mot parquet-filer med mappmönster finns att se i Virtualisera parquet-fil i en S3-kompatibel objektlagring med PolyBase.
Examples
Framtvinga nedtryckning
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (FORCE EXTERNALPUSHDOWN);
Avaktivera pushdown
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (DISABLE EXTERNALPUSHDOWN);