Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Nestemäinen klusterointi on joustava datan asettelustrategia Delta-taulukoille Microsoft Fabric -ohjelmistossa. Se korvaa staattisen Hive-tyylisen osioinnin ja manuaalisen Z-järjestyksen ylläpidon deklaratiivisella, muutosystävällisellä klusterointilla. Määrität, mihin sarakkeihin ryhmitetään, ja Fabric Spark Runtime hoitaa fyysisen datan asettelun automaattisesti.
Käytä tätä artikkelia seuraavaan:
- Ymmärrä, miten nesteen klusterointi toimii ja milloin sitä kannattaa käyttää.
- Vertaa nesteen klusterointia osiointiin ja Z-järjestykseen.
- Määritä klusterointi tauluillasi.
- Ymmärrä inkrementaalinen nesteen klusterointi (Runtime 2.0+).
- Säädä klusterointikäyttäytymistä istuntokonfiguraatioiden avulla.
Mitä on nestemäinen klusterointi?
Nesteklusterointi järjestää tiedot Delta-taulukkotiedostoihin siten, että samankaltaiset rivit klusterointisarakkeissa sijaitsevat samassa paikassa. Asettelu mahdollistaa parannetun tiedostojen ohittamisen kyselyn suorituksen aikana: kun kysely suodattaa klusteroituvia sarakkeita, moottori lukee vain tiedostoja, joiden arvovälit vastaavat predikaattia, ohittaen loput.
Toisin kuin osiointi, nesteen klusterointi:
- Ei luo fyysisiä hakemistorakenteita sarakkeen arvoa kohden.
- Se ei vaadi klusterointisarakkeita taulukon luomisen yhteydessä (niitä voi muuttaa myöhemmin).
- Käsittelee korkean kardinaalisuuden sarakkeita ilman, että tuhansista pienistä osioista aiheutuu pieniä tiedostoongelmia.
- Soveltaa asettelun optimointia , ei
OPTIMIZEkirjoitusaikana.
Hyödyt osiointiin ja Z-järjestykseen verrattuna
Nestemäinen klusterointi tarjoaa merkittäviä etuja sekä Hive-tyyliseen osiointiin että Z-Orderiin verrattuna joustavuuden, ylläpidon ja kehittyvien datamallien käsittelyn osalta.
Verrattuna Hive-tyyliseen jakamiseen
| Ominaisuus | Hive-tyylinen jakaminen | Liquid-klusterointi |
|---|---|---|
| Rakeisuus | Yksi hakemisto per erillistä arvoa (tai yhdistelmää) | Tiedostotason arvoalueet, ei hakemistoja |
| Korkea kardinaalisuus | Luo tuhansia pieniä tiedostoja/hakemistoja | Toimii luonnollisesti; Bin-data oikean kokoisiksi tiedostoiksi |
| Sarakkeen muutokset | Vaatii täydellisen taulukon uudelleenkirjoituksen |
ALTER TABLE ... CLUSTER BY Sovellus seuraavassa OPTIMIZE |
| Kirjoituspolku | Osion sarake on tunnettava kirjoitushetkellä | Mikä tahansa sarake voidaan ryhmitellä jälkikäteen |
| Pienen tiedoston ongelma | Yleistä suoratoisto- tai toistuvien inserttien kanssa | Tiivistyksen avulla hallittu OPTIMIZE |
Verrattuna Z-kertaan
| Ominaisuus | Z-järjestys | Liquid-klusterointi |
|---|---|---|
| Sarakkeen muutokset | Täytyy uusia OPTIMIZE ZORDER BY (...) uusilla sarakkeilla |
ALTER TABLE ... CLUSTER BY jatkuu määritelmä |
| Inkrementaalinen tuki | Ei inkrementaalista tilaa; Käytä WHERE laajuuden rajoittamiseen manuaalisesti |
Inkrementaalinen tila (Runtime 2.0+) käsittelee automaattisesti vain uusia, muuttuneita tai epäterveitä tiedostoja |
| Metadata | Ei pysyvää sarakkeiden määrittelyä | Taulukon metatietoihin tallennetut klusterointisarakkeet |
| Monisarakkeinen asettelu | Z-kertakäyrä sovelletaan optimointiajassa | Z-järjestys yhdelle klusterointisarakkeelle; Hilbertin käyrä 2+ sarakkeelle, tarjoten optimoidun datan lokaliteetin |
Nestemäinen klusterointi käyttää Z-järjestystä yksisarakeasetteluissa ja Hilbertin käyrää 2+ sarakkeessa – parannus verrattuna Z-järjestykseen, joka soveltaa vain Z-järjestyksen käyrää moniulotteiseen klusterointiin. Nestemäinen klusterointi käärii molemmat algoritmit inkrementaaliseen, metadatatietoon perustuvaan kehykseen, joka vähentää jatkuvaa ylläpitokustannusta.
Luo nestemäinen klusteroitu taulukko
Määrittele klusterointisarakkeet taulukon luomisen CLUSTER BY lausekkeella:
-- Create a new clustered table
CREATE TABLE dbo.sales (
order_id BIGINT,
order_date DATE,
region STRING,
amount DECIMAL(10,2)
) CLUSTER BY (order_date, region);
-- Create from query results
CREATE TABLE dbo.sales_clustered
CLUSTER BY (order_date, region)
AS SELECT * FROM raw_sales;
-- Enable on existing table
ALTER TABLE dbo.sales_txn CLUSTER BY (order_date, region);
Muuta klusterointisarakkeita
Toisin kuin osiointi, voit muuttaa klusterointisarakkeita milloin tahansa ilman, että dataa kirjoitetaan uudelleen:
-- Change clustering columns
ALTER TABLE sales CLUSTER BY (region, product_category);
-- Remove clustering (table becomes unclustered)
ALTER TABLE sales CLUSTER BY NONE;
Klusterointisarakkeita vaihdettuaan uusi asettelu otetaan käyttöön seuraavalla OPTIMIZE ajokerralla. Olemassa olevat tiedostot säilyttävät aiemman asettelun, kunnes ne klusteroidaan uudelleen.
Käytä klusterointia OPTIMiverilla
Klusterointi tehdään komennon aikana OPTIMIZE . Lauseessa ei tarvitse määritellä sarakkeita OPTIMIZE , koska klusterointimääritelmä tallennetaan taulukon metatietoihin:
-- Cluster the table using the defined clustering columns
OPTIMIZE sales;
-- Recluster partial Z-Cubes and Z-Cubes with different clustering keys or clustering providers
OPTIMIZE sales FULL;
Käytä OPTIMIZE FULL sitä, kun vaihdat klusterointiavaimia ja haluat rakentaa uudelleen Z-kuutioita, jotka eivät noudata nykyistä klusterointistrategiaa.
Z-kuutio on looginen yksikkö, jota liquid-klusterointi käyttää tiedostojen ryhmittelyyn, jotka jakavat samat klusterointisarakkeet. Data ryhmitellään yhdeksi Z-kuutioksi, kunnes klusteriavaimet vaihtuvat tai datamäärä ylittää 100 GB.
Vinkki
Fabric Runtime 2.0:sta alkaen Native suoritusmoottori tukee OPTIMIZE suorittamista nestemäisissä klusteroiduissa taulukoissa, tarjoten 30–50 nopeamman% moniulotteisen klusterointisuorituskyvyn. Aiemmat ajonajat palautuvat normaaliin kiihdytyksettömään Spark-suoritukseen.
Miten nestemäinen klusterointi toimii
Kun käytät OPTIMIZE nestemäistä klusteroitua pöytää, tapahtuu seuraavaa:
-
Tiedostojen valinta: Moottori valitsee tiedostot, jotka vaativat klusterointia.
- Runtime 2.0+:ssa (inkrementaalinen klusterointistrategia) valitaan vain klusteroitumattomat, epäterveet, pienet tai poistovektoritiedostot.
- Runtime 1.3:ssa valitaan kaikki tiedostot jokaisessa Z-Cubessa, joka on alle 100 GB, riippumatta siitä, ovatko ne jo hyvin klusteroituja.
- Binin pakkaaminen: Valitut tiedostot ryhmitellään bineihin, jotka tähtäävät optimaaliseen tulostustiedoston kokoon.
- Uudelleenosiointi: Jokaisen binin sisällä oleva data jaetaan uudelleen tilaa täyttävällä käyrällä (Hilbertin käyrä monisarakkeelle, Z-kerta yksisarakkeelle).
- Tiedostojen kirjoittaminen: Uudelleenjaettu data kirjoitetaan uusina tiedostoina, joilla on tiukat arvoalueet klusterointisarakkeissa.
- Metatietojen päivitys: Delta-loki tallentaa tiedoston korvaamisen, merkitsee uudet tiedostot klusterointimetatiedolla.
Tuloksena on tiedostot, joiden arvovälit eivät mene päällekkäin (tai minimaalisesti päällekkäisiä) klusterointisarakkeissa, mikä mahdollistaa moottorin ohittaa tiedostot, jotka eivät vastaa kyselypredikaattia.
Huomautus
Fabric Runtime 1.3 (Delta 3.2): käytä nesteen klusterointia varoen. Tässä ajonaikaisessa käytössä liquid-klusterointi käyttää täyttä Z-Cube-uudelleenkirjoitusstrategiaa—jokainen tiedosto Z-Cuben sisällä kirjoitetaan uudelleen jokaisella ajokerralla. Z-kuutio säilyy (ohitetaan) vain, kun sen koko ylittää 100 GB. Alle 100 GB:n kokoisille tauluille täysi uudelleenkirjoitus tarkoittaa, että jokainen OPTIMIZE suoritus kirjoittaa kaikki taulukkotiedot uudelleen, vaikka data olisi jo hyvin klusteroitu. Tämä aiheuttaa voimakasta kirjoitusvahvistusta.
- Älä käytä automaattista tiivistämistä nesteen klusteroinnin yhteydessä Runtime 1.3:ssa. Jokainen automaattinen tiivistyslaukaisin voi aiheuttaa täydellisen taulukon uudelleenkirjoituksen sen sijaan, että vain klusteroitu uusi/muuttunut data.
- Vältä ajamista
OPTIMIZEjokaisen kirjoitusoperaation jälkeen. Runtime 1.3:ssa rajoita klusterointi strategisiin, tarkoituksellisiin suorituksiin ja hyväksy niiden välillä pienempi klusteroinnin tuoreus.
Inkrementaalinen nesteklusterointi, joka poistaa tämän kirjoitusvahvistuksen, on käytettävissä vasta Fabric Runtime 2.0:sta alkaen.
Inkrementaalinen nesteen klusterointi
Alkaen Fabric Runtime 2.0 (Delta 4.1) -menetelmästä, likvimäinen klusterointi käyttää oletuksena inkrementaalista klusterointistrategiaa. Inkrementaalinen strategia on merkittävä parannus verrattuna tavanomaiseen klusterointikäyttäytymiseen.
Important
Inkrementaalinen nesteen klusterointi on saatavilla vain Fabric Runtime 2.0:ssa ja uudemmissa versioissa. Aikaisemmissa ajonasemissa käytetään OPTIMIZE standardia (täysi uudelleenkirjoitus), jossa kaikki Z-Cuben tiedostot kirjoitetaan uudelleen jokaisella ajokerralla.
Miksi inkrementaalinen klusterointistrategia on tärkeä
Tavallinen klusterointialgoritmi kirjoittaa uudelleen kaikki tiedostot Z-kuution sisällä (enintään 100 GB) jokaisella OPTIMIZE ajokerralla, riippumatta siitä, ovatko ne jo hyvin klusteroituja. Pieniä liitteita vastaanottavassa taulukossa klusterointikustannus kasvaa lineaarisesti taulukon koon mukaan, ei uuden datan määrän mukaan.
Inkrementaalinen tila ratkaisee täyden uudelleenkirjoitusongelman valitsemalla vain tiedostoja, jotka todella tarvitsevat klusterointia:
- Unclustered -tiedostot: Vastakirjoitettu data ilman klusterointimetatietoja
- Pienet tiedostot: Tiedostot, jotka ovat alle tavoitetiedoston kokokynnyksen
- Tiedostot, joissa on poistovektoreita: Tiedostot, joiden kertyneet poistot ylittävät puhdistuskynnyksen
Jo valmiiksi hyvin klusteroidut, sopivan kokoiset tiedostot jätetään kokonaan väliin.
Automaattinen uudelleenklusterointi
Inkrementaalinen nesteen klusterointi sisältää automaattisen päällekkäisyyden tunnistuksen, jota kutsutaan automaattiseksi uudelleenklusterointiksi, jotta klusteroinnin laatu säilyy ajan myötä. Kun uutta dataa saapuu, se voi aiheuttaa päällekkäisyyttä tiedostoarvojen välille, heikentäen datan ohittamisen tehokkuutta. Automaattinen uudelleenklusterointi havaitsee päällekkäiset arvovälit tiedostojen välillä ja ryppäisee valikoivasti vain ne tiedostot.
Automaattinen uudelleenklusterointi toimii automaattisesti OPTIMIZE aina, kun klusterissa tulee uutta tai muutettua dataa. Manuaalista toimenpidettä tai aikataulutettuja täysiä uudelleenklustereita ei tarvita. Inkrementaalinen klusterointistrategia ylläpitää lähes optimaalista klusterointia datan kehittyessä.
Palauta täyteen uudelleenkirjoituskäyttäytymiseen
Jos sinun täytyy poistaa käytöstä inkrementaalinen klusterointistrategia ja käyttää täyden uudelleenkirjoituksen käyttäytymistä, aseta seuraava konfiguraatio:
SET spark.microsoft.delta.optimize.clustering.strategy.incremental = FALSE;
OPTIMIZE sales;
Vaihtoehtoisesti käytä OPTIMIZE FULL kertakäyttöistä täyttä uudelleenklusterointia muuttamatta istuntoasetuksia:
OPTIMIZE sales FULL;
Muistio
Inkrementaalinen klusterointistrategia mahdollistaa tarkoituksellisesti pienen poikkeaman teoreettisesti optimaalisesta asettelusta merkittävien vähennyksien saavuttamiseksi kirjoitusvahvistuksessa. Ajaminen OPTIMIZE FULL kaventaa tämän kuilun rakentamalla Z-kuutiot täysin uudelleen teoreettiseen optimointiin, mutta korkeammalla kirjoituskustannuksella.
Määritysviittaus
Seuraavat istuntokonfiguraatiot ohjaavat nestemäistä klusterointikäyttäytymistä Fabric Runtime 2.0+:ssa.
Inkrementaalinen klusterointi
| Konfigurointi | Kirjoita | Oletusarvo | Description |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental |
totuusarvo | true |
Pääkytkin inkrementaaliseen klusterointiin. Kun true, OPTIMIZE käsittelee vain klusteroituja, epäterveitä, pieniä ja poistovektoritiedostoja. Kun false, kaikki alle 100 GB kokoiset Z-kuutioiden tiedostot kirjoitetaan uudelleen (normaali toiminta). |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster |
totuusarvo | true |
Mahdollistaa automaattisen tiedostojen tunnistuksen ja uudelleenryhmittelyn, joiden datavälit menevät päällekkäin. Se pätee vain, kun inkrementaalinen klusterointi on käytössä. |
Automaattinen uudelleenklusterin viritys
Nämä kokoonpanot säätelevät automaattisen uudelleenklusteroinnin herkkyyttä ja laajuutta. Oletusasetukset sopivat useimpiin työkuormiin. Säädä niitä vain, kun sinun täytyy muuttaa kompromissia klusteroinnin laadun ja kirjoitusvahvistuksen välillä.
| Konfigurointi | Kirjoita | Oletusarvo | Description |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOffendingFiles |
Int | 4 |
Minimimäärä päällekkäisiä tiedostoja, joita tarvitaan uudelleenklusteroinnin käynnistämiseksi. Alhaisemmat arvot uudelleenklusteroituvat nopeammin (parempi kyselysuorituskyky, korkeampi kirjoituskustannus). Täytyy olla ≥ kaksi. |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOverlapThreshold |
Kaksinkertainen | 0.75 |
Klusterointidimensioiden päällekkäisyyspisteiden raja. Tiedostoparit, joilla on tämän arvon yläpuolella, katsotaan päällekkäisiksi. Täytyy olla välillä (0,25, 1,0). Alhaisemmat arvot ovat aggressiivisempia. |
Klusterointisarakkeiden valinta
Parhaiden tulosten saavuttamiseksi valitse klusterointisarakkeet yleisimpien kyselysuodatinkuvioiden perusteella:
-
Valitse 1–4 sarakke , jotka esiintyvät usein lauseissa
WHERE. Lisää sarakkeita heikentää tilan täyttämiskäyrän sarakkekohtaista tiedoston ohittamistehoa ja pidentää aikaa klusterointiin. - Tarkastellaan sarakkeen kardinaalisuutta. Matalan kardinaalisuuden sarakkeet tuottavat vähemmän erottuvia arvoalueita, mikä vähentää tiedostojen ohittamisen hyötyä yhdistettynä korkean kardinaalisuuden klusterointiavaimiin.
-
Sarakkeiden järjestyksellä ei ole vaikutusta klusterointiin. Sarakkeiden järjestyksellä ei
CLUSTER BYole vaikutusta moniulotteiseen klusterointiin.
Tuetut saraketyypit
Kaikkia saraketyyppejä ei voi käyttää klusterointiavaimina. Moottori arvioi kunkin sarakkeen tietotyypin kelpoisuuden määrittämiseksi.
Aina kelpoisia (atomityypit):
-
NumericType(ByteType,ShortType,IntegerType,LongType,FloatTypeDoubleType, , )DecimalType DateTypeTimestampTypeTimestampNTZTypeStringType
Ehdollisesti kelpoisuus:
Muistio
Seuraavat tyypit voidaan ottaa käyttöön alkaen Fabric Spark Runtime 2.0:sta (Delta 4.1)
-
StructType: kunspark.microsoft.delta.clusteredTable.complexTypes.enabledon käytössä, ja kaikki lehtikentät ovat itse kelvollisia tyyppejä. -
ArrayType: kunspark.microsoft.delta.clusteredTable.complexTypes.enabledon käytössä, ja elementtityyppi on kelvollinen. -
MapType: kunspark.microsoft.delta.clusteredTable.complexTypes.enabledon käytössä, ja sekä avain- että arvotyypit ovat tilattavia ja kelvollisia.
Ei kelvollinen:
BinaryTypeBooleanTypeNullType
Vastaavat kelvolliset tyypit, joita käytetään tiedostotason tilastoissa, katso Tiedostojen ohittaminen—Kelvolliset tietotyypit.
Vuorovaikutus muiden ominaisuuksien kanssa
| Ominaisuus | Toimintatapa |
|---|---|
| Osiointi | Yhteensopimaton. Tiedostojen ohittamiseen suositellaan nesteryhmittelyä osioinnin sijaan. |
| Z-järjestys | Yhteensopimaton. Tiedostojen ohittamiseen suositellaan nestemäistä klusterointia Z-järjestyksen sijaan. |
| Nopea optimointi | Yhteensopiva alkaen Runtime 2.0:sta. Aikaisemmissa ajonajoissa nopealla optimoinnilla ei ollut vaikutusta nestemäisiin klusteroituihin taulukoihin. Aikana OPTIMIZE, ohittaa klusterointia, kun pieniä tiedostoja tai dataa ei ole tarpeeksi terveen kokoisen tulostiedoston tuottamiseen. |
| Adaptiivinen kohdetiedostokoko | Yhteensopiva. Adaptiivisen arvioinnin asettama kohdetiedostokoko toimii klusteroinnin kohdekokona. |
| Optimoi kirjoitus | Yhteensopiva. Tuottaa yhdistetyt tiedostot kirjoituksessa, jotka sitten ryhmitellään aikana OPTIMIZE. |
| Automaattinen tiivistys | Älä käytä nesteen klusteroinnin kanssa Runtime 1.3:ssa tai aiemmin. Näissä ajonoissa jokainen automaattinen tiivistyslaukaisin kirjoittaa uudelleen kaiken alle 100 GB Z-kuutioissa, mikä aiheuttaa voimakasta kirjoitusvahvistusta. Runtime 2.0+:ssa automaattinen tiivistys on yhteensopiva: inkrementaalinen klusterointi varmistaa, että vain uusia tai epäterveitä tiedostoja kirjoitetaan uudelleen. Automaattinen tiivistys hoitaa pienten tiedostojen yhdistämisen; OPTIMIZE hoitaa klusterointiasettelun. |
| Deleetiovektorit | Tiedostot, jotka ylittävät poistetun rivin rajan, valitaan klusterointiin riippumatta niiden klusterointitilasta. |
| V-järjestys | Yhteensopiva. V-järjestys ja nestemäinen klusterointi toimivat eri akselilla (tiedoston sisäinen asettelu vs. tiedostojen väliset arvoalueet). Molempia voi soveltaa yhdessä. |
Parhaat käytännöt
-
Aja
OPTIMIZEsäännöllisesti eräkirjoitusten jälkeen tai aikataululla suoratoistotaulukoille—mutta vain Runtime 2.0+:ssa, jossa inkrementaalinen klusterointistrategia tekee toistuvista ajoista edullisia. Runtime 1.3:ssa ja sitä aiemmissa versioissa jokainenOPTIMIZEajo kirjoittaa uudelleen kaiken alle 100 GB:n Z-kuutioiden datan, joten ajojen tulisi olla tarkoituksellisia ja harvinaisia. -
Käytä
OPTIMIZE FULLsäästeliäästi. Varaa se siihen, kun vaihdat klusterointisarakkeita tai tarvitset kertaluonteisen laadunpalautuksen. - Seuraa klusteroinnin laatua tarkistamalla kyselyskannausmittarit (skannatut tiedostot vs. kokonaistiedostot) Spark UI:ssa tai kyselysuunnitelmissa.
- Yhdistettynä optimointikirjoitukseen suoratoistokuormille, jotta jokainen mikroerä tuottaa hallittavan määrän tiedostoja klusterointia varten.