Delta Lake -taulukon optimointi ja V-Order
Lakehouse- ja Delta Lake -taulukkomuodot ovat keskeisiä Microsoft Fabricissa, sillä ne varmistavat, että taulukot on optimoitu analytiikkaa varten. Tässä oppaassa käsitellään Delta Lake -taulukon optimoinnin käsitteitä, määrityksiä ja sitä, miten sitä käytetään yleisimmissä massadatan käyttötavoissa.
Mikä on V-järjestys?
V-Order on kirjoitusajan optimointi parquet-tiedostomuotoon , joka mahdollistaa salamannopean lukemisen Microsoft Fabric -käsittelymoduulissa, kuten Power BI:ssä, SQL:ssä, Sparkissä ja muissa.
Power BI- ja SQL-moottorit hyödyntävät Microsoft Verti-Scan -tekniikkaa ja V-tilattuja parquet-tiedostoja muistissa olevien tietojen käyttöaikojen saavuttamiseen. Spark ja muut ei-Verti-Scan käsittelymoduulit hyötyvät myös V-Tilatut tiedostot keskimäärin 10 % nopeammin lukuajat, joissa joissakin skenaarioissa jopa 50%.
V-Order toimii käyttämällä erityistä lajittelua, riviryhmän jakelua, hakemiston koodausta ja pakkausta parquet-tiedostoissa, mikä edellyttää vähemmän verkko-, levy- ja suoritinresursseja laskentamoottoreiden sen lukemiseen, mikä tarjoaa kustannustehokkuuden ja suorituskyvyn. V-järjestyksen lajittelulla on 15 % vaikutus keskimääräiseen kirjoitusaikaan, mutta se tarjoaa jopa 50 % enemmän pakkausta.
Se on 100 % avoimen lähdekoodin parquet-muoto yhteensopiva; kaikki parquet-moottorit voivat lukea sen tavallisena parquet-tiedostona. Delta-taulukot ovat tehokkaampia kuin koskaan; ominaisuudet, kuten Z-Order, ovat yhteensopivia V-Orderin kanssa. Taulukon ominaisuuksia ja optimointikomentoja voidaan käyttää sen osioissa näennäisjärjestyksen hallintaan.
V-Order otetaan käyttöön parquet-tiedostotasolla. Delta-taulukot ja sen ominaisuudet, kuten Z-tilaus, kompakti, tyhjiö, aikamatkat jne. ovat ortogonaalisia V-Orderiin, ja ne ovat yhteensopivia, ja niitä voidaan käyttää yhdessä lisäetujen saamiseksi.
V-Order-kirjoitusten hallinta
V-Order on oletusarvoisesti käytössä Microsoft Fabricissa ja Apache Sparkissa, ja sitä hallitaan seuraavilla määrityksillä.
Määritys | Oletusarvo | Kuvaus |
---|---|---|
spark.sql.parquet.vorder.enabled | true | Ohjaa istuntotason V-järjestyksen kirjoittamista. |
TBLPROPERTIES("delta.parquet.vorder.enabled") | false | Taulukoiden oletusarvoinen V-järjestys-tila |
Dataframe-kirjoittajan vaihtoehto: parquet.vorder.enabled | poista joukosta | V-Order-kirjoitusten hallinta Dataframe-kirjoittajan avulla |
Seuraavien komentojen avulla voit hallita V-order-kirjoitusten käyttöä.
V-tilauksen määritysten tarkistaminen Apache Spark -istunnossa
%%sql
SET spark.sql.parquet.vorder.enabled
Poista V-tilauksen kirjoittaminen käytöstä Apache Spark -istunnossa
%%sql
SET spark.sql.parquet.vorder.enabled=FALSE
V-tilauksen kirjoittamisen ottaminen käyttöön Apache Spark -istunnossa
Tärkeä
Tämä on mahdollista, kun se on käytössä istuntotasolla. Kaikki parquet-kirjoitukset tehdään niin, että V-järjestys on käytössä. Tämä sisältää muut kuin Delta-parquet-taulukot ja Delta-taulukot, joiden parquet.vorder.enabled
taulukko-ominaisuudeksi on määritetty joko true
tai false
.
%%sql
SET spark.sql.parquet.vorder.enabled=TRUE
V-järjestyksen hallinta Delta-taulukon ominaisuuksien avulla
Ota V-Order-taulukko-ominaisuus käyttöön taulukon luomisen aikana:
%%sql
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
Tärkeä
Kun taulukko-ominaisuuden arvoksi on määritetty tosi, LISÄÄ-, UPDATE- ja MERGE-komennot toimivat odotetulla tavalla ja suorittavat kirjoitusaikaoptimoinnin. Jos V-order-istunnon määritykseksi on määritetty tosi tai spark.write ottaa sen käyttöön, kirjoitukset ovat V-tilauksia, vaikka TBLPROPERTIES-asetuksena on epätosi.
Ota V-Order käyttöön tai poista se käytöstä muuttamalla taulukko-ominaisuutta:
%%sql
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "false");
ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");
Kun otat V-Orderin käyttöön tai poistat sen käytöstä taulukon ominaisuuksien avulla, se vaikuttaa vain taulukon jatkokirjoituksiin. Parquet-tiedostot säilyttävät järjestyksen, jota käytettiin luonnin aikana. Jos haluat muuttaa nykyisen fyysisen rakenteen käyttämään tai poistamaan V-järjestyksen, lue alla oleva osio "Ohjausobjektin V-järjestys taulukkoa optimoitaessa".
V-järjestyksen hallinta suoraan kirjoitustoiminnoissa
Kaikki Apache Spark -kirjoituskomennot perivät istuntoasetuksen, jos se ei ole eksplisiittinen. Kaikki seuraavat komennot kirjoittavat V-Order-järjestyksellä perimällä istunnon määritykset implisiittisesti.
df_source.write\
.format("delta")\
.mode("append")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.location("Files/people")\
.execute()
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.saveAsTable("myschema.mytable")
Tärkeä
V-Order koskee vain tiedostoja, joihin predikaatti vaikuttaa.
Jos istunto spark.sql.parquet.vorder.enabled
on määrittämätön tai epätosi, seuraavat komennot kirjoitetaan V-Order-järjestyksellä:
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.option("parquet.vorder.enabled ","true")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.option("parquet.vorder.enabled","true")\
.location("Files/people")\
.execute()
Mitä on Optimoi kirjoitus?
Massadatan käsittelykoneiden, kuten Apache Sparkin, analyyttiset kuormitukset toimivat tehokkaimmin, kun käytetään standardoituja suurempia tiedostokokoja. Tiedostokoon, tiedostojen määrän, Spark-työntekijöiden määrän ja sen kokoonpanojen välinen suhde on tärkeä suorituskyvyn kannalta. Tietojen käyttö Data Lake -taulukoissa on saattanut periä ominaisuuden, joka on jatkuvasti kirjoitettaessa paljon pieniä tiedostoja. Tätä skenaariota kutsutaan yleisesti nimellä "pieni tiedosto-ongelma".
Optimize Write on Delta Lake on Microsoft Fabric and Azure Synapse Analytics -ominaisuus Apache Spark -moduulissa. Se vähentää kirjoitettujen tiedostojen määrää ja pyrkii kasvamaan kirjoitettujen tietojen yksittäistä tiedostokokoa. Kohdetiedoston kokoa voidaan muuttaa kuormitusvaatimusten mukaan määritysten avulla.
Ominaisuus on oletusarvoisesti käytössä Microsoft Fabric Runtime for Apache Spark -palvelussa. Jos haluat lisätietoja käyttöskenaarioiden kirjoittamisen optimoimisesta, lue artikkeli Apache Sparkiin kirjoittamisen optimoinnin tarve.
Yhdistä optimointi
Delta Lake MERGE -komennon avulla käyttäjät voivat päivittää delta-taulukkoa lisäehdoin. Se voi päivittää lähdetaulukon, näkymän tai DataFramen tietoja kohdetaulukkoon käyttämällä MERGE-komentoa. Delta Lake -järjestelmän avoimen lähdekoodin jakauman nykyinen algoritmi ei kuitenkaan ole täysin optimoitu muokkaamattomien rivien käsittelyyn. Microsoft Spark Delta -tiimi otti käyttöön mukautetun Low Shuffle Merge -optimoinnin. Muokkaamattomat rivit jätetään pois kalliista sekoitustoiminnosta, jota tarvitaan vastaavien rivien päivittämiseen.
Toteutusta hallitaan määrityksellä spark.microsoft.delta.merge.lowShuffle.enabled
, joka on oletusarvoisesti käytössä suorituspalvelussa. Koodi ei vaadi muutoksia, ja se on täysin yhteensopiva Delta Lake -järven avoimen lähdekoodin jakauman kanssa. Lisätietoja Low Shuffle Merge -käyttöskenaarioita koskevista ohjeartikkelista Low Shuffle Merge -optimointi Delta-taulukoissa.
Delta-taulukoiden ylläpito
Delta-taulukoiden muuttuessa suorituskyky ja tallennuskustannusten tehokkuus yleensä heikentyvät seuraavista syistä:
- Taulukkoon lisätyt uudet tiedot saattavat vääristää tietoja.
- Tietojen käsittelynopeudet eräille ja suoratoistolle saattavat tuoda paljon pieniä tiedostoja.
- Toimintojen päivittäminen ja poistaminen luovat lopulta lukukustannuksia. Jäsennystiedostot ovat rakenteittain muuttumattomia, joten Delta-taulukot lisäävät uudet parquet-tiedostot muutosjoukkoon ja vahvistavat kahden ensimmäisen kohteen vuoksi asetettuja ongelmia.
- Tallennustilassa käytettävissä olevat datatiedostot ja lokitiedostot eivät enää ole käytettävissä.
Jotta taulukot pysyvät parhaassa tilassa parhaan suorituskyvyn takaamiseksi, suorita lokeron tiivistys- ja poistotoiminnot Delta-taulukoissa. Lokeron kompaktin tiivistys saavutetaan OPTIMIZE-komennolla . Se yhdistää kaikki muutokset suurempiin ja koostettuihin parquet-tiedostoihin. Tallennustilan puhdistus onnistuu VACUUM-komennolla.
Taulukon ylläpitokomentoja OPTIMIZE ja VACUUM voidaan käyttää muistikirjoissa ja Spark Job Definitions -määritelmissä, ja ne voidaan sen jälkeen järjestää käyttöympäristön toiminnoilla. Lakehouse in Fabric tarjoaa käyttöliittymän toimintoja ad-hoc-taulukoiden ylläpitoon Delta Lake -taulukon ylläpitoa artikkelissa kuvatulla tavalla.
Tärkeä
Taulukon fyysisen rakenteen suunnitteleminen oikein käsittelytiheyden ja odotettujen lukumallien perusteella on todennäköisesti tärkeämpää kuin tässä osiossa kuvattujen optimointikomentojen suorittaminen.
V-järjestyksen hallinta taulukkoa optimoitaessa
Seuraavat komentorakenteet lokeroivat kompaktin lokeron ja kirjoittavat uudelleen kaikki tiedostot, joihin tämä vaikuttaa, V-Orderilla, joka on riippumaton TBLPROPERTIES-asetuksesta tai istunnon määritysasetuksesta:
%%sql
OPTIMIZE <table|fileOrFolderPath> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER BY (col_name1, col_name2, ...)] VORDER;
Kun ZORDER:ia ja VORDER:iä käytetään yhdessä, Apache Spark suorittaa lokeron kompaktin, ZORDER:n, VORDER:n järjestyksessä.
Seuraavat komennot lokeroi kompaktin lokeroinnin ja kirjoittavat uudelleen kaikki tiedostot, joihin tämä vaikuttaa, TBLPROPERTIES-asetuksella. Jos TBLPROPERTIES-asetuksen arvoksi on määritetty V-Order, kaikki tiedostot, joita asia koskee, kirjoitetaan V-Order-muodossa. Jos TBLPROPERTIES-asetuksen asetuksena on epätosi (V-Order), istuntoasetus perii sen. Joten, jos haluat poistaa V-Orderin taulukosta, määritä istunnon määritykseksi epätosi.
%%sql
OPTIMIZE <table|fileOrFolderPath>;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];