Sovella nesteen klusterointia Delta-taulukoissa

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:

  1. 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.
  2. Binin pakkaaminen: Valitut tiedostot ryhmitellään bineihin, jotka tähtäävät optimaaliseen tulostustiedoston kokoon.
  3. Uudelleenosiointi: Jokaisen binin sisällä oleva data jaetaan uudelleen tilaa täyttävällä käyrällä (Hilbertin käyrä monisarakkeelle, Z-kerta yksisarakkeelle).
  4. Tiedostojen kirjoittaminen: Uudelleenjaettu data kirjoitetaan uusina tiedostoina, joilla on tiukat arvoalueet klusterointisarakkeissa.
  5. 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 OPTIMIZE jokaisen 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 BY ole 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
  • DateType
  • TimestampType
  • TimestampNTZType
  • StringType

Ehdollisesti kelpoisuus:

Muistio

Seuraavat tyypit voidaan ottaa käyttöön alkaen Fabric Spark Runtime 2.0:sta (Delta 4.1)

  • StructType: kun spark.microsoft.delta.clusteredTable.complexTypes.enabled on käytössä, ja kaikki lehtikentät ovat itse kelvollisia tyyppejä.
  • ArrayType: kun spark.microsoft.delta.clusteredTable.complexTypes.enabled on käytössä, ja elementtityyppi on kelvollinen.
  • MapType: kun spark.microsoft.delta.clusteredTable.complexTypes.enabled on käytössä, ja sekä avain- että arvotyypit ovat tilattavia ja kelvollisia.

Ei kelvollinen:

  • BinaryType
  • BooleanType
  • NullType

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 OPTIMIZE sää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 jokainen OPTIMIZE ajo kirjoittaa uudelleen kaiken alle 100 GB:n Z-kuutioiden datan, joten ajojen tulisi olla tarkoituksellisia ja harvinaisia.
  • Käytä OPTIMIZE FULL sää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.