Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Pushdownberekening verbetert de prestaties van query's op externe gegevensbronnen. Vanaf SQL Server 2016 (13.x) waren pushdownberekeningen beschikbaar voor externe Hadoop-gegevensbronnen. SQL Server 2019 (15.x) heeft pushdownberekeningen geïntroduceerd voor andere typen externe gegevensbronnen.
Opmerking
Als u wilt bepalen of PolyBase-pushdownberekeningen voordeel bieden voor uw query, raadpleegt u Hoe u kunt zien of er een externe pushdown heeft plaatsgevonden.
Pushdownberekening inschakelen
De volgende artikelen bevatten informatie over het configureren van pushdownberekeningen voor specifieke typen externe gegevensbronnen:
- Pushdownberekening in Hadoop inschakelen
- PolyBase configureren voor toegang tot externe gegevens in Oracle
- PolyBase configureren voor toegang tot externe gegevens in Teradata
- PolyBase configureren voor toegang tot externe gegevens in MongoDB
- PolyBase configureren voor toegang tot externe gegevens met algemene ODBC-typen
- PolyBase configureren voor toegang tot externe gegevens in SQL Server
Deze tabel bevat een overzicht van ondersteuning voor pushdownberekeningen voor verschillende externe gegevensbronnen:
| Gegevensbron | [Samenvoegingen] | Prognoses | Aggregations | Filteren | Statistics |
|---|---|---|---|---|---|
| Algemene ODBC | 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 | Sommige** | Sommige** | Yes |
| Azure Blob-opslagruimte | Nee. | Nee. | Nee. | Nee. | Yes |
* Pushdown-ondersteuning voor Azure Cosmos DB is ingeschakeld via de Azure Cosmos DB-API voor MongoDB.
** Zie Pushdown-berekeningen en Hadoop-providers.
Pushdown-ondersteuning voor aggregaties en filters voor de MongoDB ODBC-connector voor SQL Server 2019 is geïntroduceerd met SQL Server 2019 CU18.
+ Oracle ondersteunt pushdown voor joins; maar mogelijk moet u statistieken maken voor de joinkolommen om gebruik te maken van pushdown.
Opmerking
De pushdown-berekening kan door bepaalde T-SQL-syntaxis worden geblokkeerd. Raadpleeg syntaxis die pushdown voorkomt voor meer informatie.
Pushdown-berekeningen en Hadoop-providers
PolyBase ondersteunt momenteel twee Hadoop-providers: Hortonworks Data Platform (HDP) en Cloudera Distributed Hadoop (CDH). Er zijn geen verschillen tussen de twee providers in termen van pushdownberekeningen.
Als u de pushdown-functionaliteit voor berekeningen met Hadoop wilt gebruiken, moet het Hadoop-doelcluster beschikken over de kernonderdelen HDFS, YARN en MapReduce, waarbij de taakgeschiedenisserver is ingeschakeld. PolyBase verzendt de pushdownquery via MapReduce en haalt de status op van de taakgeschiedenisserver. Zonder een van beide onderdelen mislukt de query.
Sommige aggregatie moet plaatsvinden nadat de gegevens SQL Server hebben bereikt. Maar een deel van de aggregatie vindt plaats in Hadoop. Deze methode wordt vaak gebruikt voor gegevensaggregaties in massaal parallelle verwerkingssystemen.
Hadoop-providers ondersteunen de volgende aggregaties en filters.
| Aggregations | Filters (binaire vergelijking) |
|---|---|
| Count_Big | NotEqual |
| Som | LessThan |
| Gemiddelde | KleinerOfGelijk |
| Max | GroterOfGelijk |
| Minuut | GreaterThan |
| Approx_Count_Distinct | Is |
| Is Niet |
Belangrijke nuttige scenario's voor pushdownberekening
Met polyBase-pushdownberekening kunt u rekentaken delegeren aan externe gegevensbronnen. Dit vermindert de workload op het SQL Server-exemplaar en kan de prestaties aanzienlijk verbeteren.
SQL Server kan joins, projecties, aggregaties en filters naar externe gegevensbronnen pushen en profiteren van externe rekenkracht, waardoor de hoeveelheid gegevens die via het netwerk wordt verzonden, wordt beperkt.
Pushdown samenvoegen
PolyBase kan het pushdown-mechanisme van de joinoperator vergemakkelijken wanneer je twee externe tabellen koppelt die dezelfde externe gegevensbron gebruiken, wat de prestaties aanzienlijk verbetert.
Wanneer de externe gegevensbron de join uitvoert, vermindert deze de hoeveelheid gegevensverplaatsing en verbetert de queryprestaties. Zonder join pushdown moet SQL Server de gegevens uit beide tabellen lokaal ophalen tempdb en vervolgens de join uitvoeren.
In het geval van gedistribueerde joins (een lokale tabel toevoegen aan een externe tabel), tenzij uw filter van toepassing is op de gekoppelde externe tabel, moet SQL Server alle gegevens uit de externe tabel lokaal tempdb overbrengen om de joinbewerking uit te voeren. De volgende query heeft bijvoorbeeld geen filter op de voorwaarde voor het samenvoegen van externe tabellen, wat resulteert in het lezen van alle gegevens uit de externe tabel.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
Omdat de join gebruikmaakt van de E.id kolom van de externe tabel, kan SQL Server, wanneer u een filtervoorwaarde aan die kolom toevoegt, het filter omlaag pushen, waardoor het aantal rijen dat uit de externe tabel wordt gelezen, wordt verminderd.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
WHERE E.id = 20000
Een subset met rijen selecteren
Gebruik predicaatpushdown om de prestaties van een query te verbeteren die een subset van rijen uit een externe tabel selecteert.
In dit voorbeeld start SQL Server een map-reduce-taak om de rijen op te halen die overeenkomen met het predicaat customer.account_balance < 200000 op Hadoop. Omdat de query kan worden voltooid zonder alle rijen in de tabel te scannen, worden alleen de rijen die voldoen aan de predicaatcriteria gekopieerd naar SQL Server. Dit bespaart aanzienlijke tijd en vereist minder tijdelijke opslagruimte wanneer het aantal klantsaldi < 200000 klein is in vergelijking met het aantal klanten met rekeningsaldi >= 200000.
SELECT * FROM customer WHERE customer.account_balance < 200000;
SELECT * FROM SensorData WHERE Speed > 65;
Een subset van kolommen selecteren
Gebruik predicaatpushdown om de prestaties voor een query te verbeteren die een subset kolommen uit een externe tabel selecteert.
In deze query initieert SQL Server een map-reduce-taak om het Hadoop-bestand met scheidingstekens voor te verwerken, zodat alleen de gegevens voor de twee kolommen customer.name en customer.zip_code worden gekopieerd naar SQL Server.
SELECT customer.name, customer.zip_code
FROM customer
WHERE customer.account_balance < 200000;
Pushdown voor basale expressies en operatoren
SQL Server staat deze basisexpressies en operators voor predicaat-pushdown toe:
- Binaire vergelijkingsoperatoren (
<,>,=,!=,<>, , )>=<=voor numerieke, datum- en tijdwaarden. - Rekenkundige operatoren (
+,-,*,/, ).% - Logische operators (
AND,OR). - Unaire operators (
NOT,IS NULL,IS NOT NULL).
De operatorsBETWEEN, NOTINen LIKE kunnen omlaag worden gepusht, afhankelijk van hoe de queryoptimalisatie de operatorexpressies herschrijft als een reeks instructies met behulp van eenvoudige relationele operators.
De query in dit voorbeeld heeft meerdere predicaten die naar Hadoop kunnen worden doorgestuurd. SQL Server kan map-reduce taken naar Hadoop verplaatsen om het predicaat customer.account_balance <= 200000 uit te voeren. De expressie BETWEEN 92656 AND 92677 bestaat ook uit binaire en logische bewerkingen die naar Hadoop kunnen worden gepusht. De logische AND in customer.account_balance AND customer.zipcode is een definitieve expressie.
Gezien deze combinatie van predicaten kunnen de map-reduce taken de volledige WHERE-clausule uitvoeren. Alleen de gegevens die voldoen aan de SELECT criteria, worden terug gekopieerd naar SQL Server.
SELECT * FROM customer
WHERE customer.account_balance <= 200000
AND customer.zipcode BETWEEN 92656 AND 92677;
Ondersteunde functies voor pushdown
SQL Server staat deze functies toe voor predicaatpushdown:
Tekenreeksfuncties:
CONCATDATALENGTHLENLIKELOWERLTRIMRTRIMSUBSTRINGUPPER
Wiskundige functies:
ABSACOSASINATANCEILINGCOSEXPFLOORPOWERSIGNSINSQRTTAN
Algemene functies:
COALESCE*NULLIF
* Het gebruik met COLLATE kan in sommige scenario's pushdown voorkomen. Zie Collatieconflict voor meer informatie.
Datum- en tijdfuncties:
DATEADDDATEDIFFDATEPART
Syntaxis die pushdown voorkomt
Deze T-SQL-functies of syntaxelementen verhinderen pushdown-berekeningen:
AT TIME ZONECONCAT_WSTRANSLATERANDCHECKSUMBINARY_CHECKSUMHASHBYTESISJSONJSON_VALUEJSON_QUERYJSON_MODIFYNEWIDSTRING_ESCAPECOMPRESSDECOMPRESSGREATESTLEASTPARSE
Pushdown-ondersteuning voor de FORMAT en TRIM syntaxis is geïntroduceerd in SQL Server 2019 (15.x) CU10.
Filtercomponent met variabele
Wanneer u een variabele opgeeft in een filtervoorwaarde, wordt de filtervoorwaarde standaard niet door SQL Server gepusht. Met de volgende query wordt bijvoorbeeld de filterclausule niet doorgevoerd:
DECLARE @BusinessEntityID INT
SELECT * FROM [Person].[BusinessEntity]
WHERE BusinessEntityID = @BusinessEntityID;
Als u pushdown van de variabele wilt inschakelen, schakelt u de hotfixes-functionaliteit voor queryoptimalisatie in met behulp van een van de volgende methoden:
- Instantieniveau: Schakel traceringsvlag 4199 in als opstartparameter voor het exemplaar.
-
Databaseniveau: Voer in de context van de database met de externe PolyBase-objecten
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ONuit. -
Queryniveau: gebruik een hint voor query's
OPTION (QUERYTRACEON 4199)ofOPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES')).
Deze beperking is van toepassing op de uitvoering van sp_executesql en op sommige functies in de filtercomponent.
SQL Server 2019 CU5 heeft voor het eerst de mogelijkheid geïntroduceerd om de variabele omlaag te pushen.
Zie sp_executesql voor meer informatie.
Sorteringsconflict
Pushdown werkt mogelijk niet met gegevens met verschillende sorteringen. Operators zoals COLLATE kunnen ook de uitkomst verstoren. SQL Server ondersteunt gelijke sorteringen of binaire sorteringen. Zie Hoe u kunt zien of externe pushdown heeft plaatsgevondenvoor meer informatie.
Pushdown voor Parquet-bestanden
Vanaf SQL Server 2022 (16.x) heeft PolyBase ondersteuning geïntroduceerd voor Parquet-bestanden. SQL Server kan zowel rij- als kolomeliminatie uitvoeren bij het uitvoeren van pushdown met Parquet.
Ondersteunde externe gegevensbronnen
Parquet-pushdown wordt ondersteund voor de volgende externe gegevensbronnen:
- S3-compatibele objectopslag
- Azure Blob Storage (opslagdienst van Azure)
- Azure Data Lake Storage Gen2
Zie voor configuratiedetails:
- PolyBase configureren voor toegang tot externe gegevens in S3-compatibele objectopslag
- Parquet-bestand virtualiseren in een met S3 compatibele objectopslag met PolyBase
Pushdownbewerkingen
SQL Server kan deze bewerkingen doorvoeren met parquet-bestanden:
- Binaire vergelijkingsoperatoren (>, >=, <=, <) voor numerieke, datum- en tijdwaarden.
- Combinatie van vergelijkingsoperatoren (> EN <, >= EN <, > EN <= , <= EN >= ).
- In lijstfilter (col1 = val1 OR col1 = val2 OR vol1 = val3).
- IS NIET NULL voor een kolom.
Deze items voorkomen pushdown voor Parquet-bestanden:
- Virtuele kolommen.
- Kolomvergelijking.
- Conversie van parametertype.
Ondersteunde gegevenstypen
- bit
- tinyint
- smallint
- bigint
- echte
- float
- varchar (Bin2Collation, CodePageConversion, BinCollation)
- nvarchar (Bin2Collation, BinCollation)
- binary
- datetime2 (standaard en 7-cijferige precisie)
- date
- tijd (standaard en 7-cijferige precisie)
- Numerieke *
* Ondersteund wanneer de parameterschaal wordt uitgelijnd met kolomschaal of wanneer de parameter expliciet wordt omgezet in decimalen.
Gegevenstypen die parquet-pushdown voorkomen
- geld
- kleingeld
- datetime
- smalldatetime
Partitie-verwijdering met mapstructuren
PolyBase kan mapstructuren gebruiken voor het verwijderen van partities, waardoor de hoeveelheid gescande gegevens tijdens query's wordt verminderd. Wanneer u parquet-bestanden in hiërarchische mappen ordent (zoals per jaar, maand of andere partitioneringssleutels), kan PolyBase volledige mappen overslaan die niet overeenkomen met uw querypredicaten.
Als u bijvoorbeeld uw gegevens structureert als:
/data/year=2024/month=01/*.parquet
/data/year=2024/month=02/*.parquet
/data/year=2025/month=01/*.parquet
U kunt query's uitvoeren op specifieke partities met behulp van jokertekens in OPENROWSET of externe tabellocaties:
-- Query only January 2025 data
SELECT *
FROM OPENROWSET(
BULK '/data/year=2025/month=01/*.parquet',
DATA_SOURCE = 's3_ds',
FORMAT = 'PARQUET'
) AS [data];
Voor het verwijderen van dynamische mappen: voer een query uit op een breder mappad en gebruik predicaten met filepath() om partities tijdens runtime te elimineren.
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);
Deze benadering combineert partitieverwijdering op mapniveau met pushdown op parquet-bestandsniveau voor optimale queryprestaties. Zie Parquet-bestand virtualiseren in een S3-compatibele objectopslag met PolyBase voor een volledige zelfstudie over het uitvoeren van query's op Parquet-bestanden met mappatronen.
Voorbeelden
Pushdown afdwingen
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (FORCE EXTERNALPUSHDOWN);
Pushdown uitschakelen
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (DISABLE EXTERNALPUSHDOWN);