Ikakhele ka setotsoana Delta Lake: Schema Enforcement le Evolution

Hey Habr! Ke fana ka tlhokomelo ea hau phetolelo ea sehlooho "Ho qoela Letšeng la Delta: Ts'ebetso ea Schema & Evolution" bangoli Burak Yavuz, Brenner Heintz le Denny Lee, e neng e lokiselitsoe ka tebello ea ho qala ha thupelo. Moenjiniere oa Boitsebiso ho tloha OTUS.

Ikakhele ka setotsoana Delta Lake: Schema Enforcement le Evolution

Lintlha, joalo ka boiphihlelo ba rona, li lula li bokellana le ho fetoha. Ho tsoela pele, mehlala ea rona ea kelello ea lefatše e tlameha ho ikamahanya le lintlha tse ncha, tseo tse ling tsa tsona li nang le litekanyo tse ncha—mekhoa e mecha ea ho shebella lintho tseo re neng re sa li tsebe pele. Mefuta ena ea kelello ha e fapane haholo le meralo ea litafole e rerang hore na re arola le ho sebetsana le tlhahisoleseling e ncha joang.

Sena se re tlisa tabeng ea tsamaiso ea schema. Ha mathata le litlhoko tsa khoebo li fetoha ha nako e ntse e ea, le sebopeho sa data ea hau. Delta Lake e etsa hore ho be bonolo ho hlahisa litekanyo tse ncha ha data e fetoha. Basebelisi ba na le phihlello ea li-semantics tse bonolo ho laola meralo ea bona ea litafole. Lisebelisoa tsena li kenyelletsa Schema Enforcement, e sireletsang basebelisi hore ba se ke ba silafatsa litafole tsa bona ka phoso kapa lintlha tse sa hlokahaleng, le Schema Evolution, e lumellang likholomo tse ncha tsa data ea bohlokoa hore li eketsoe ka bo eona libakeng tse nepahetseng. Sehloohong sena, re tla teba haholoanyane ho sebelisa lisebelisoa tsena.

Ho Utloisisa Tafole Schemas

DataFrame ka 'ngoe ho Apache Spark e na le schema e hlalosang mofuta oa data, joalo ka mefuta ea data, likholomo le metadata. Ka Delta Lake, schema ea tafole e bolokiloe ka sebopeho sa JSON ka har'a log ea transaction.

Ts'ebetso ea merero ke eng?

Schema Enforcement, e tsejoang hape e le Schema Validation, ke mochini oa ts'ireletso ho Delta Lake o netefatsang boleng ba data ka ho hana lirekoto tse sa lumellaneng le schema ea tafole. Joalo ka moamoheli deskeng e ka pele ea reschorente e tsebahalang ea peheletso feela, o hlahloba hore na kholumo ka 'ngoe ea data e kentsoeng tafoleng e lethathamong le ts'oanang la likholomo tse lebelletsoeng (ka mantsoe a mang, hore na ho na le "pehelo" bakeng sa e 'ngoe le e 'ngoe ea tsona. ), mme e hana direkoto dife kapa dife tse nang le dikholomo tse siko lenaneng.

Ts'ebetso ea schema e sebetsa joang?

Delta Lake e sebelisa tlhahlobo ea schema-on-write, ho bolelang hore lingoloa tsohle tse ncha tafoleng li hlahlojoa hore na li lumellana le schema ea tafole eo u batlang ho e ngola ka nako ea ho ngola. Haeba schema e sa tsitsane, Delta Lake e hlakola transaction ka botlalo (ha ho na data e ngotsoeng) mme e hlahisa mokhelo ho tsebisa mosebelisi ka ho se lumellane.
Delta Lake e sebelisa melao e latelang ho fumana hore na rekoto e lumellana le tafole. DataFrame e Ngoloang:

  • e ke ke ea ba le litšiea tse ling tse sieo ho schema sa tafole e reretsoeng. Ka lehlakoreng le leng, ntho e 'ngoe le e' ngoe e hantle haeba data e kenang e se na litšiea tsohle tse tsoang tafoleng - litšiea tsena li tla fuoa feela litekanyetso tse se nang thuso.
  • e ke ke ea ba le mefuta ea data ea kholomo e fapaneng le mefuta ea data ea likholomo tse lethathamong la sepheo. Haeba kholumo ea tafole e shebiloeng e na le data ea StringType, empa kholomo e tsamaellanang ho DataFrame e na le data ea IntegerType, ts'ebetso ea schema e tla etsa mokhelo mme e thibele ts'ebetso ea ho ngola ho etsahala.
  • e ke ke ea ba le mabitso a kholomo a fapaneng feela. Sena se bolela hore o ka se be le likholomo tse bitsoang 'Foo' le 'foo' tse hlalosoang tafoleng e le 'ngoe. Le ha Spark e ka sebelisoa ka mokhoa o sa tsotelleng kapa o sa tsotelleng (ka ho sa feleng), Delta Lake e boloka linyeoe empa ha e tsotelle ka har'a polokelo ea schema. Parquet e na le kutloelo-bohloko ha u boloka le ho khutlisetsa lintlha tsa kholomo. Ho qoba liphoso tse ka bang teng, bobolu ba data, kapa tahlehelo ea data (ntho eo re bileng le eona ho Databricks), re nkile qeto ea ho eketsa moeli ona.

Ho etsa mohlala oa sena, a re shebeng se etsahalang khoutu e ka tlase ha re leka ho kenyelletsa litšiea tse sa tsoa hlahisoa tafoleng ea Delta Lake e e-so lokisetsoe ho e amohela.

# Сгенерируем 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.

Sebakeng sa ho eketsa likholomo tse ncha, Delta Lake e beha schema mme e emisa ho ngola. Ho thusa ho fumana hore na ke kholomo efe (kapa sete ea likholomo) e bakang phapang, Spark e hlahisa meralo ka bobeli ho tsoa ho sekepeng sa ho bapisa.

Molemo oa ho sebelisa schema ke ofe?

Hobane ts'ebetso ea schema ke cheke e thata, ke sesebelisoa se setle haholo seo u ka se sebelisang e le molebeli oa heke ho sete ea data e hloekileng, e fetotsoeng ka botlalo e loketseng tlhahiso kapa tšebeliso. E sebelisoa ho litafole tse fanang ka lintlha ka kotloloho:

  • Mekhoa ea ho ithuta ka mochini
  • BI li-dashboards
  • Lisebelisoa tsa ho hlahloba lintlha le lisebelisoa tsa pono
  • Sistimi efe kapa efe ea tlhahiso e hlokang meralo ea semantic e hlophisitsoeng hantle, e thaepetsoeng ka matla.

Ho lokisa lintlha tsa bona bakeng sa tšitiso ena ea ho qetela, basebelisi ba bangata ba sebelisa meralo e bonolo ea "multi-hop" eo butle-butle e kenyang sebopeho litafoleng tsa bona. Ho ithuta ho eketsehileng ka sena, o ka sheba sehlooho se reng Ho ithuta ka mochini oa boemo ba tlhahiso le Delta Lake.

Ehlile, ts'ebetso ea schema e ka sebelisoa kae kapa kae pompong ea hau, empa hopola hore ho phallela tafoleng tabeng ena ho ka ferekanya hobane, ka mohlala, u lebetse hore u kentse kholomo e 'ngoe ho data e kenang.

Ho thibela ho hlapolla ha data

Hona joale u ka 'na ua ipotsa hore na ke eng? Ntle le moo, ka linako tse ling phoso e sa lebelloang ea "schema mismatch" e ka u khopisa mosebetsing oa hau, haholo haeba u le mocha Delta Lake. Hobaneng o sa lumelle schema feela hore e fetohe kamoo ho hlokahalang hore ke ngole DataFrame ea ka ho sa tsotelehe?

Joalokaha maele a boholo-holo a bolela, "ho thibela tšoaetso ho lekana le ponto ea phekolo." Ka nako e 'ngoe, haeba u sa hlokomele ho tiisa schema ea hau, mathata a ho lumellana le mofuta oa data a tla hlahisa lihlooho tse mpe - mehloli ea data e tala e ka 'na ea e-ba le linyeoe tse thata, litšiea tse senyehileng, limmapa tse sa sebetseng hantle, kapa lintho tse ling tse tšosang tseo u ka lorang ka tsona. ditoro tse tshosang. Mokhoa o motle ke ho emisa lira tsena hekeng - ka ts'ebetso ea schema - le ho sebetsana le tsona leseling, ho fapana le hamorao ha li qala ho lalla bolibeng bo lefifi ba khoutu ea hau ea tlhahiso.

Ho tiisa schema ho u fa tiisetso ea hore schema ea tafole ea hau e ke ke ea fetoha ntle le haeba u amohela phetoho. Sena se thibela ho hlapolloa ha data, ho ka etsahalang ha litšiea tse ncha li eketsoa khafetsa hoo litafole tse neng li le bohlokoa, tse petelitsoeng li lahleheloang ke moelelo le molemo ka lebaka la ho ts'oaroa ha data. Ka ho u khothaletsa ho etsa ka boomo, ho beha litekanyetso tse phahameng, le ho lebella boleng bo holimo, ts'ebetso ea schema e etsa hantle seo e neng e reretsoe ho se etsa - ho u thusa ho lula u le seli le hore li-spreadsheets tsa hau li hloekile.

Haeba u nahana ka ho eketsehileng u etsa qeto ea hore u hlile u hloka ho eketsa kholomo e ncha - ha ho bothata, ka tlase ke tokiso ea mohala o le mong. Tharollo ke ho iphetola ha potoloho!

schema evolution ke eng?

Schema evolution ke tšobotsi e lumellang basebelisi ho fetola habonolo schema ea hajoale ea tafole ho latela data e fetohang ha nako e ntse e feta. E sebelisoa hangata ha ho etsoa ts'ebetso kapa ho ngola bocha ho ikamahanya le schema ka bo eona ho kenyelletsa kholomo e le 'ngoe kapa ho feta.

schema evolution e sebetsa joang?

Ho latela mohlala o tsoang karolong e fetileng, bahlahisi ba ka sebelisa schema evolution habonolo ho eketsa likholomo tse ncha tse neng li hanoa pele ka lebaka la ho se lumellane ha schema. Phetoho ea potoloho e etsoa ka ho eketsa .option('mergeSchema', 'true') ho sehlopha sa hau sa Spark .write или .writeStream.

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

Ho sheba kerafo, tsamaisa potso e latelang ea Spark SQL

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

Ikakhele ka setotsoana Delta Lake: Schema Enforcement le Evolution
Ntle le moo, o ka beha khetho ena bakeng sa nako eohle ea Spark ka ho eketsa spark.databricks.delta.schema.autoMerge = True ho tlhophiso ea Spark. Empa sebelisa sena ka hloko, kaha ts'ebetsong ea schema ha e sa tla hlola e u hlokomelisa ka ho se lumellane ha schema ka boomo.

Ka ho kenyelletsa parameter kopong mergeSchema, litšiea tsohle tse teng ho DataFrame empa li se tafoleng ea sepheo li kenyelletsoa qetellong ea schema e le karolo ea transaction ea ho ngola. Mabala a Nested le ona a ka eketsoa 'me tsena li tla ekeletsoa qetellong ea litšiea tsa sebopeho tse tsamaellanang.

Baenjiniere ba datha le bo-ramahlale ba data ba ka sebelisa khetho ena ho kenya likholomo tse ncha (mohlomong metric e sa tsoa lateloa kapa kholomo ea tšebetso ea thekiso ea khoeli ena) litafoleng tsa bona tsa tlhahiso ea mochini oa ho ithuta ntle le ho roba mefuta e teng ho latela likholomo tsa khale.

Mefuta e latelang ea liphetoho tsa schema e lumelloa e le karolo ea phetoho ea schema nakong ea kenyelletso ea tafole kapa ho ngola hape:

  • Ho kenya likholomo tse ncha (ena ke boemo bo atileng haholo)
  • Ho fetola mefuta ea data ho tsoa ho NullType -> mofuta ofe kapa ofe kapa ho khothaletsoa ho tsoa ho ByteType -> ShortType -> IntegerType

Liphetoho tse ling tse sa lumelloeng ka har'a schema evolution li hloka hore schema le data li ngoloe bocha ka ho eketsa .option("overwriteSchema", "true"). Ka mohlala, tabeng eo "Foo" qalong e neng e le palo e feletseng 'me schema e ncha e ne e le mofuta oa data ea likhoele, joale lifaele tsohle tsa Parquet(data) li tla hloka ho ngoloa bocha. Liphetoho tse joalo li kenyelletsa:

  • ho phumula kholomo
  • ho fetola mofuta oa data oa kholomo e teng (sebakeng)
  • ho reha mabitso a litšiea tse fapaneng feela molemong oa (mohlala, "Foo" le "foo").

Qetellong, ka tokollo e latelang ea Spark 3.0, DDL e hlakileng e tla tšehetsoa ka botlalo (ho sebelisoa ALTER TABLE), ho lumella basebelisi ho etsa liketso tse latelang ho schemas ea tafole:

  • ho eketsa litšiea
  • ho fetola maikutlo a kholomo
  • ho seta thepa ea tafole e laolang boitšoaro ba tafole, joalo ka ho beha bolelele ba nako eo log ea transaction e bolokoang.

Molemo oa ho iphetola ha potoloho ke ofe?

Schema evolution e ka sebelisoa neng kapa neng ha u le teng rera fetola schema ea tafole ea hau (ho fapana le ha ka phoso u kentse likholomo ho DataFrame ea hau e sa lokelang ho ba teng). Ena ke eona tsela e bonolo ka ho fetesisa ea ho tsamaisa schema ea hau hobane ka bo eona e eketsa mabitso a likholomo le mefuta ea data ntle le ho li phatlalatsa ka ho hlaka.

fihlela qeto e

Ts'ebetso ea schema e hana likholomo leha e le life tse ncha kapa liphetoho tse ling tsa schema tse sa lumellaneng le tafole ea hau. Ka ho beha le ho boloka litekanyetso tsena tse phahameng, bahlahlobisisi le baenjiniere ba ka tšepa hore boitsebiso ba bona bo na le boemo bo phahameng ka ho fetisisa ba botšepehi, ba bo buisana ka mokhoa o hlakileng le ka mokhoa o hlakileng, ho ba lumella ho etsa liqeto tse molemo tsa khoebo.

Ka lehlakoreng le leng, schema evolution e tlatselletsa ts'ebetsong ka ho nolofatsa qosoa liphetoho tsa schema ka boiketsetso. Etsoe, ha hoa lokela ho ba thata ho eketsa kholomo.

Tšebeliso e qobelloang ea morero ke yang, moo phetoho ea morero e leng yin. Ha li sebelisoa hammoho, likarolo tsena li etsa hore khatello ea lerata le tokiso ea mats'oao e be bonolo ho feta pele.

Re boetse re rata ho leboha Mukul Murthy le Pranav Anand bakeng sa tlatsetso ea bona sehloohong sena.

Lingoliloeng tse ling letotong lena:

Ikakhele ka setotsoana Letšeng la Delta: Ho notlolla Log ea Transaction

Lingoloa tse amanang

Ho ithuta ka mochini oa boemo ba tlhahiso le Delta Lake

Letša la data ke eng?

Fumana ho eketsehileng ka thupelo

Source: www.habr.com

Eketsa ka tlhaloso