Su'e i le Delta Lake: Fa'amalosia ma le Evolution

Ei Habr! Ou te faailoa atu ia te outou le faaliliuga o le tusiga "Maulu I Delta Vaituloto: Fa'atonu Fa'atonu & Evolution" tusitala o Burak Yavuz, Brenner Heintz ma Denny Lee, lea na saunia i le tulimatai atu i le amataga o le vasega. Inisinia Fa'amaumauga mai OTUS.

Su'e i le Delta Lake: Fa'amalosia ma le Evolution

Faʻamatalaga, pei o lo tatou poto masani, o loʻo faʻaputuina pea ma faʻaleleia. Ina ia faʻaauau, o tatou mafaufau faʻataʻitaʻiga o le lalolagi e tatau ona faʻafetaui i faʻamaumauga fou, o nisi o ia mea o loʻo i ai ni fua fou - o auala fou e matauina ai mea tatou te leʻi iloa muamua. O nei faʻataʻitaʻiga mafaufau e leʻo ese tele mai le faʻasologa o laulau e fuafua ai pe faʻafefea ona tatou faʻavasegaina ma faʻagasolo faʻamatalaga fou.

O lenei mea e aumaia ai i tatou i le mataupu o le pulega o fuafuaga. A'o suia lu'itau pisinisi ma mana'oga ile taimi, e fa'apea fo'i le fa'atulagaina o au fa'amaumauga. Delta Lake fa'afaigofie ona fa'ailoa mai fua fou pe a suia fa'amaumauga. E mafai e tagata fa'aoga ona maua semantics faigofie e fa'atautaia a latou fa'asologa o laulau. O nei meafaigaluega e aofia ai le Faʻamalosia o le Schema, lea e puipuia ai tagata faʻaoga mai le faʻaleagaina o a latou laulau i mea sese poʻo faʻamatalaga le manaʻomia, ma le Schema Evolution, lea e faʻatagaina ai koluma fou o faʻamatalaga taua e otometi ona faʻaopoopo i nofoaga talafeagai. I totonu o lenei tusiga, o le a tatou suʻesuʻe atili i le faʻaaogaina o nei meafaigaluega.

Malamalama i Fuafuaga Laulau

O DataFrame taʻitasi i Apache Spark o loʻo i ai se faʻataʻitaʻiga e faʻamalamalamaina ai foliga o faʻamaumauga, e pei o ituaiga faʻamaumauga, koluma, ma metadata. Faatasi ai ma Delta Lake, o loʻo teuina le faʻasologa o le laulau i le JSON format i totonu o le faʻamaumauga o fefaʻatauaiga.

O le a le fa'amalosia o polokalame?

Schema Enforcement, lea e ta'ua foi o le Schema Validation, ose faiga malu puipuia i Delta Lake e fa'amautinoaina le lelei o fa'amaumauga e ala i le teenaina o fa'amaumauga e le fetaui ma le fa'asologa o le laulau. E pei o le talimalo i le pito i luma o se faleaiga lauiloa-naʻo le faleaiga, na te siakiina pe o koluma taʻitasi o faʻamaumauga o loʻo tuʻuina i totonu o le laulau o loʻo i totonu o le lisi tutusa o koluma faʻamoemoeina (i se isi faaupuga, pe iai se "faʻaagaga" mo i latou taʻitasi. ), ma teena soʻo se faʻamaumauga e iai koluma e le o iai i le lisi.

E fa'afefea ona galue le fa'amalosia o fuafuaga?

E fa'aoga e Delta Lake le siaki-i-tusi, o lona uiga e siaki uma tusitusiga fou i le laulau mo le fetaui ma le fa'asologa o le laulau fa'atatau ile taimi tusitusi. Afai e le fetaui le fuafuaga, Delta Lake e faʻaumatia atoa le fefaʻatauaiga (leai ni faʻamatalaga e tusia) ma faʻatupuina se tuusaunoaga e logoina ai le tagata faʻaoga i le le tutusa.
E fa'aoga e Delta Lake tulafono nei e fa'amautu ai pe fetaui se fa'amaumauga ma se laulau. Fa'amaumauga e mafai ona tusia:

  • e le mafai ona iai ni koluma fa'aopoopo e le o iai i le sikola o le laulau fa'atatau. I le isi itu, e lelei mea uma pe a fai o faʻamatalaga o loʻo oʻo mai e le o aofia uma ai koluma mai le laulau - o nei koluma o le a naʻo le tuʻuina atu o tau aoga.
  • e le mafai ona i ai ituaiga fa'amatalaga koluma e ese mai ituaiga fa'amaumauga o koluma i le laulau fa'atatau. Afai o le koluma laulau fa'atatau e iai fa'amatalaga StringType, ae o le koluma tutusa i le DataFrame o lo'o i ai fa'amatalaga IntegerType, o le fa'amalosia o fuafuaga o le a lafo ai se fa'alavelave ma taofia ai le fa'agaioiga tusitusi mai le faia.
  • e le mafai ona aofia ai igoa koluma e ese na'o le tulaga. O lona uiga e le mafai ona e fa'auigaina koluma 'Foo' ma le 'foo' ile laulau e tasi. A'o mafai ona fa'aoga Spark i le fa'aogaina o le mata'upu po'o le fa'aletonu (fa'aletonu), o le Delta Lake o lo'o fa'asao-fa'asao ae e le maaleale i totonu o le fa'aputuga o polokalame. Parquet e fa'aletonu mata'upu pe a teu ma toe fa'afo'i fa'amatalaga koluma. Ina ia aloese mai mea sese e ono tupu mai, faʻaletonu o faʻamatalaga, poʻo le leiloa o faʻamaumauga (o se mea na matou oʻo i ai i Databricks), na matou filifili e faʻaopoopo lenei tapulaʻa.

Ina ia faʻaalia lenei mea, seʻi o tatou vaʻavaʻai i le mea e tupu i le faʻailoga o loʻo i lalo pe a tatou taumafai e faʻaopoopo nisi koluma fou fou i se laulau Delta Lake e leʻi faʻatulagaina e talia ai.

# Сгенерируем DataFrame ссуд, который мы добавим в нашу таблицу Delta Lake
loans = sql("""
            SELECT addr_state, CAST(rand(10)*count as bigint) AS count,
            CAST(rand(10) * 10000 * count AS double) AS amount
            FROM loan_by_state_delta
            """)

# Вывести исходную схему DataFrame
original_loans.printSchema()

root
  |-- addr_state: string (nullable = true)
  |-- count: integer (nullable = true)
 
# Вывести новую схему DataFrame
loans.printSchema()
 
root
  |-- addr_state: string (nullable = true)
  |-- count: integer (nullable = true)
  |-- amount: double (nullable = true) # new column
 
# Попытка добавить новый DataFrame (с новым столбцом) в существующую таблицу
loans.write.format("delta") 
           .mode("append") 
           .save(DELTALAKE_PATH)

Returns:

A schema mismatch detected when writing to the Delta table.
 
To enable schema migration, please set:
'.option("mergeSchema", "true")'
 
Table schema:
root
-- addr_state: string (nullable = true)
-- count: long (nullable = true)
 
Data schema:
root
-- addr_state: string (nullable = true)
-- count: long (nullable = true)
-- amount: double (nullable = true)
 
If Table ACLs are enabled, these options will be ignored. Please use the ALTER TABLE command for changing the schema.

Nai lo le fa'aopoopoina otometi ni koluma fou, ua fa'atūina e Delta Lake se fa'ailoga ma taofi le tusitusi. Ina ia fesoasoani e iloa po o fea koluma (po o seti o koluma) o loʻo mafua ai le eseesega, Spark e faʻaalia ata uma e lua mai le faʻasologa o faʻasologa mo faʻatusatusaga.

O le a le aoga o le faʻamalosia o se fuafuaga?

Talu ai o le faʻamalosia o le faʻatonuga o se siaki saʻo, o se meafaigaluega sili ona lelei e faʻaoga e fai ma leoleo faitotoʻa i se seti faʻamaumauga mama, suia atoatoa ua sauni mo le gaosiga poʻo le faʻaaogaina. E masani ona fa'aoga i laulau e fafaga sa'o ai fa'amaumauga:

  • Algoritimi a'oa'oga masini
  • BI dashboards
  • Fa'amaumauga o fa'amaumauga ma mea faigaluega fa'aaliga
  • So'o se faiga fa'akomepiuta e mana'omia ai le fa'atulagaina lelei, ma le malosi o le taina o fa'ata'ita'iga semantic.

Ina ia saunia a latou faʻamatalaga mo lenei faʻalavelave mulimuli, o le tele o tagata faʻaoga e faʻaogaina se fausaga faigofie "multi-hop" lea e faasolosolo malie ona faʻafeiloaʻi le fausaga i totonu oa latou laulau. Mo nisi faʻamatalaga e uiga i lenei mea, e mafai ona e vaʻai i le tusiga A'oa'oga masini fa'akomepiuta fa'atasi ma Delta Lake.

O le mea moni, e mafai ona fa'aogaina le fa'amalosia o fuafuaga i so'o se mea i lau paipa, ae ia manatua o le tafe atu i se laulau i lenei tulaga e mafai ona fa'anoanoa aua, mo se fa'ata'ita'iga, na galo ia te oe na e fa'aopoopoina se isi koluma i fa'amatalaga o lo'o sau.

Puipuia o fa'amatalaga fa'amuta

I le taimi nei atonu o lo'o e mafaufau, o le a le mea o lo'o vevesi ai? A uma mea uma, o nisi taimi o se faʻalavelave faʻafuaseʻi "schema mismatch" e mafai ona faʻalavelaveina oe i lau faʻasologa o galuega, aemaise lava pe afai e te fou i Delta Lake. Aisea e le tu'u ai na'o le suiga o le fuafuaga pe a mana'omia ina ia mafai ai ona ou tusia la'u DataFrame tusa lava po o le a?

E pei ona fai mai le muagagana, "o le aunese o le puipuiga e aoga i le pauna o togafitiga." I se taimi, afai e te le faʻaeteete e faʻamalosia lau fuafuaga, faʻafitauli o fesoʻotaʻiga ituaiga faʻamatalaga o le a faʻatupuina ai o latou ulu mataga - foliga tutusa faʻamatalaga mataʻutia e mafai ona i ai ni faʻailoga pito, koluma leaga, faʻafanua leaga, poʻo isi mea taufaafefe e moemiti i ai miti leaga. O le auala sili o le taofi lea o nei fili i le faitotoʻa - faʻatasi ai ma le faʻamalosia o fuafuaga - ma faʻafeiloaʻi i latou i le malamalama, nai lo le taimi mulimuli ane pe a amata ona latou lafi i le loloto o le pogisa o lau code gaosiga.

O le fa'amalosia o se fa'ata'ita'iga e te maua ai le fa'amautinoaga e le suia le fuafuaga a lau laulau se'i vagana ua e talia le suiga. Ole mea lea e taofia ai le fa'aitiitia o fa'amatalaga, lea e mafai ona tupu pe a fa'aopoopo fa'atasi koluma fou e fa'apea e le'i maua ai le uiga ma le aoga o laulau sa iai muamua ona o fa'amaumauga. E ala i le fa'amalosia o oe ina ia fa'amoemoe, fa'atulaga tulaga maualuluga, ma fa'amoemoe e maualuga le tulaga, o le fa'amalosia o fuafuaga e faia tonu lava le mea na fa'atulaga e fai—fesoasoani ia te oe e tumau ma le fa'amaoni ma mama au ripoti.

Afai i luga o nisi iloiloga e te filifili e moni lava manaʻomia fa'aopoopo se koluma fou - leai se fa'afitauli, o lo'o i lalo se laina e tasi. O le fofo o le evolusione o le matagaluega!

O le a le schema evolution?

Schema evolution o se vaega e mafai ai e tagata faʻaoga ona faigofie ona suia le faʻasologa o laulau o loʻo i ai nei e tusa ai ma faʻamaumauga e suia i le taimi. E masani ona fa'aoga pe a fa'atino se fa'aopoopoga po'o le toe tusi fa'agaioiga e otometi ona fa'afetaui le fa'asologa e aofia ai se tasi pe sili atu koluma fou.

E fa'afefea ona galue le fa'aleleia o le polokalame?

I le mulimuli ai i le faʻataʻitaʻiga mai le vaega muamua, e faigofie ona faʻaogaina e le au atinaʻe le faʻaleleia o le schema e faʻaopoopo ai koluma fou na teʻena muamua ona o le le fetaui o le polokalame. Ua fa'agaoioia le fa'aleleia o le li'o e ala i le fa'aopoopo .option('mergeSchema', 'true') i lau 'au Spark .write или .writeStream.

# Добавьте параметр mergeSchema
loans.write.format("delta") 
           .option("mergeSchema", "true") 
           .mode("append") 
           .save(DELTALAKE_SILVER_PATH)

Ina ia va'ai i le kalafi, fa'agasolo le fesili Spark SQL lea

# Создайте график с новым столбцом, чтобы подтвердить, что запись прошла успешно
%sql
SELECT addr_state, sum(`amount`) AS amount
FROM loan_by_state_delta
GROUP BY addr_state
ORDER BY sum(`amount`)
DESC LIMIT 10

Su'e i le Delta Lake: Fa'amalosia ma le Evolution
I le isi itu, e mafai ona e setiina lenei filifiliga mo le sauniga Spark atoa e ala i le faʻaopoopoina spark.databricks.delta.schema.autoMerge = True i le faatulagaga Spark. Ae fa'aoga ma le fa'aeteete, aua o le fa'amalosia o le fa'atonuga o le a le toe fa'ailoaina oe i fa'alavelave fa'afuase'i.

E ala i le aofia ai o le parakalafa i le talosaga mergeSchema, o koluma uma o loʻo i ai i le DataFrame ae le o totonu o le laulau faʻatatau e otometi lava ona faʻaopoopo i le pito o le fuafuaga o se vaega o se fefaʻatauaiga tusitusi. E mafai fo'i ona fa'aopoopoina fa'aputuga ma o le a fa'aopoopoina fo'i i le pito o koluma fa'atusa.

E mafai e enisinia o aso ma tagata su'esu'e fa'amaumauga ona fa'aoga lenei filifiliga e fa'aopoopo ai koluma fou (atonu o se fua fa'atatau talu ai nei po'o le koluma o fa'atauga o lenei masina) i a latou laulau o lo'o iai a'oa'oga masini e aunoa ma le talepeina o fa'ata'ita'iga o iai e fa'atatau i koluma tuai.

O ituaiga nei o suiga o fuafuaga e fa'atagaina e avea o se vaega o le fa'aleleia o le fa'asologa i le taimi o le fa'aopoopoina o le laulau po'o le toe tusi:

  • Fa'aopoopo koluma fou (o le fa'aaliga sili lea ona taatele)
  • Suia ituaiga faʻamatalaga mai NullType -> soʻo se isi ituaiga poʻo le faʻalauiloaina mai ByteType -> ShortType -> IntegerType

O isi suiga e le'o fa'atagaina i totonu o le fa'aleleia o le si'osi'omaga e mana'omia ai le toe tusia o fa'amaumauga ma fa'amaumauga e ala i le fa'aopoopoina .option("overwriteSchema", "true"). Mo se faʻataʻitaʻiga, i le tulaga o le koluma "Foo" na muamua faʻatasi ma o le faʻasologa fou o se manoa faʻamaumauga, ona manaʻomia lea ona toe tusi uma faila Parquet(data). O ia suiga e aofia ai:

  • tapeina o se koluma
  • suia le ituaiga fa'amatalaga o se koluma o iai (i le nofoaga)
  • toe fa'aigoaina koluma e na'o le tulaga e ese ai (mo se fa'ata'ita'iga, "Foo" ma le "foo")

Mulimuli ane, faʻatasi ai ma le isi faʻasalalauga o Spark 3.0, o le a lagolagoina atoatoa le DDL (faʻaaogaina ALTER TABLE), faʻatagaina tagata faʻaoga e faʻatino gaioiga nei i luga o le laulau:

  • fa'aopoopo koluma
  • suiga o fa'amatalaga koluma
  • fa'atulaga mea totino o le laulau e pulea ai le amio a le laulau, e pei o le setiina o le umi o le taimi e teu ai se fa'amaumauga o fefa'atauaiga.

O le ā le aogā o le evolusione matagaluega?

E mafai ona fa'aogaina le fa'aleleia o fuafuaga i so'o se taimi fa'amoemoe sui le ata o lau laulau (e ese mai le taimi na e faʻafuaseʻi ona faʻaopoopoina koluma i lau DataFrame e le tatau ona i ai iina). Ole auala pito sili lea ona faigofie e fa'asolo ai lau fuafuaga aua e otometi lava ona fa'aopoopo igoa koluma sa'o ma ituaiga fa'amaumauga e aunoa ma le fa'ailoa manino atu.

iʻuga

O le fa'amalosia o fuafuaga e te'ena so'o se koluma fou po'o isi suiga ole fuafuaga e le fetaui ma lau laulau. E ala i le faʻatulagaina ma le tausisia o nei tulaga maualuga, e mafai e tagata suʻesuʻe ma inisinia ona talitonuina o latou faʻamaumauga o loʻo i ai le maualuga maualuga o le faʻamaoni, faʻafesoʻotaʻi manino ma manino, e mafai ai ona latou faia ni filifiliga sili atu pisinisi.

I le isi itu, schema evolution e faʻapipiʻi le faʻamalosia e ala i le faʻafaigofie tuuaia suiga otometi fuafuaga. A uma mea uma, e le tatau ona faigata le faʻaopoopoina o se koluma.

O le faʻaaogaina faʻamalosi o le polokalame o le yang, lea o le faʻaleleia o le polokalame o le yin. A fa'aoga fa'atasi, o nei vaega e fa'afaigofie ai le taofiofia o le pisa ma fa'alogo fa'ailoga nai lo se isi lava taimi.

Matou te fia faafetai atu foi ia Mukul Murthy ma Pranav Anand mo a latou sao i lenei tusiga.

O isi tala i lenei faasologa:

Maulu i Delta Lake: Tatala le Fa'amaumauga o Fefaatauaiga

Fesootai Tusitusiga

A'oa'oga masini fa'akomepiuta fa'atasi ma Delta Lake

O le a le vaituloto fa'amatalaga?

Saili atili e uiga i le kosi

puna: www.habr.com

Faaopoopo i ai se faamatalaga