Ruku ki roto i te moana o Delta: Te Whakaaetanga Kaupapa me te Evolution

Hei Habr! Ka whakaatu ahau ki a koutou te whakamaoritanga o te tuhinga "Te ruku ki roto i te moana o Delta: te whakakaha kaupapa me te whanaketanga" Ko nga kaituhi a Burak Yavuz, Brenner Heintz me Denny Lee, i whakaritea mo te timatanga o te akoranga. Kaihanga Raraunga mai i OTUS.

Ruku ki roto i te moana o Delta: Te Whakaaetanga Kaupapa me te Evolution

Ko nga raraunga, penei i o maatau wheako, kei te kohikohi tonu me te tipu haere. Kia mau tonu, ko o tatou tauira hinengaro o te ao me urutau ki nga raraunga hou, ko etahi o enei he waahanga hou—he huarahi hou mo te mataki i nga mea kaore i maarama i mua. Ko enei tauira hinengaro kaore i tino rereke mai i nga mahere ripanga e whakatau ana me pehea te wehewehe me te tukatuka i nga korero hou.

Ka kawea mai e tatou ki te take o te whakahaeretanga aronuinga. Ka huri nga wero pakihi me nga whakaritenga i roto i te waa, ka pera ano te hanganga o to raraunga. Ko Delta Lake he ngawari ki te whakauru i nga inenga hou ka huri nga raraunga. Ka whai waahi nga kaiwhakamahi ki nga tohutoro ngawari ki te whakahaere i a raatau kaupapa ripanga. Kei roto i enei taputapu ko te Whakaaetanga Kaupapa, e tiaki ana i nga kaiwhakamahi mai i te pohehe pohehe i o raatau ripanga ki nga hapa, ki nga raraunga kore ranei, me te Schema Evolution, e tuku ana i nga pou hou o nga raraunga utu nui ki te taapiri aunoa ki nga waahi e tika ana. I roto i tenei tuhinga, ka ruku hohonu tatou ki te whakamahi i enei taputapu.

Te Maramatanga ki nga Kaupapa Ripanga

Kei ia Raraunga Raraunga i Apache Spark he aronuinga e tautuhi ana i te ahua o te raraunga, penei i nga momo raraunga, nga pou, me nga metadata. Ki Delta Lake, ka penapenahia te aronuinga tepu ki te whakatakotoranga JSON i roto i te raarangi tauwhitinga.

He aha te whakatinana kaupapa?

Ko te Whakaaetanga Kaupapa, e mohiotia ana ano ko te Whakamana Kaupapa, he tikanga haumaru i Delta Lake e whakarite ana i te kounga o nga raraunga ma te whakakore i nga rekoata kaore e rite ki te aronuinga o te ripanga. Pērā i te kaiāwhina i te tēpu o mua o te wharekai rahui rongonui-anake, ka tirohia e ia mehemea kei roto ia rarangi raraunga ka uru ki te ripanga ki te rarangi e pa ana ki nga pou e tumanakohia ana (i etahi atu kupu, mena he "rahui" mo ia tangata. ). me te whakakore i nga rekoata me nga pou kaore i te rarangi.

He pehea te mahi uruhi kaupapa?

Kei te whakamahi a Delta Lake i te arowhai arowhai-a-tuhi, ko te tikanga ka tirohia nga tuhi hou katoa ki te ripanga mo te hototahitanga ki te aronuinga o te ripanga whaainga i te wa tuhi. Mena kaore i te rite te kaupapa, ka whakakorehia e Delta Lake te tauwhitinga katoa (kaore he raraunga i tuhia) ka whakaara ake i tetahi tuunga hei whakamohio ki te kaiwhakamahi mo te koretake.
Ka whakamahia e Delta Lake nga ture e whai ake nei hei whakatau mena he hototahi te rekoata ki te ripanga. Anga Raraunga Tuhituhi:

  • kaore e taea te whakauru i etahi atu pou karekau i roto i te aronuinga o te ripanga whaainga. Engari, he pai nga mea katoa mena karekau i roto i nga raraunga taumai nga pou katoa mai i te ripanga - ka tautapa noa enei pou nga uara kore.
  • kaore e taea te whai momo raraunga tīwae he rereke mai i nga momo raraunga o nga pou kei te ripanga whaainga. Mēnā he raraunga StringType te tīwae ripanga ūnga, engari kei roto i te tīwae e hāngai ana i te Anga Raraunga he raraunga IntegerType, ka tukuna e te whakakaha aronuinga he okotahi ka aukati i te mahi tuhi.
  • kaore e taea te whakauru i nga ingoa tīwae he rereke noa i te keehi. Ko te tikanga tenei kaore e taea e koe te tautuhi i nga pou kua whakaingoatia ko 'Foo' me te 'foo' ki te ripanga kotahi. Ahakoa ka taea te whakamahi i te Spark i roto i te aratau-a-ira, i te aratau-kore ranei (taunoa), ko Delta Lake te tiaki i nga keehi engari he koretake i roto i te rokiroki kaupapa. Ko te Parquet he take tairongo i te wa e rongoa ana me te whakahoki korero mo te pou. Hei karo i nga hapa ka taea, te pirau raraunga, te ngaronga raraunga ranei (he mea i pa ki a matou i te Databricks), i whakatau matou ki te taapiri i tenei here.

Hei whakaatu i tenei, me titiro tatou ki nga mea e tupu ana i roto i te waehere i raro nei ka ngana ana tatou ki te taapiri i etahi pou katahi ano ka hangaia ki te teepu Delta Lake kaore ano kia whirihorahia kia whakaaehia.

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

Engari ki te taapiri aunoa i nga pou hou, ka whakatauhia e Delta Lake tetahi kaupapa ka mutu te tuhi. Hei awhina i te whakatau ko tehea te pou (he huinga pou ranei) kei te puta te rereketanga, ka whakaputahia e Spark nga aronuinga e rua mai i te papa taapu hei whakatairite.

He aha te painga o te uruhi kaupapa?

Na te mea he tino arowhai te whakakaha i te kaupapa, he taputapu tino pai ki te whakamahi hei kaitiaki tatau ki tetahi huinga raraunga ma, kua tino huri kua reri mo te whakaputa, mo te kai ranei. Ka whakamahia ki nga ripanga e whangai tika ana i nga raraunga:

  • Hatepe ako miihini
  • Papatohu BI
  • Te tātari raraunga me nga taputapu tirohanga
  • Ko nga punaha whakaputa e hiahia ana kia tino hangai, kia tino patohia nga aronuinga kupu.

Hei whakarite i o raatau raraunga mo tenei arai whakamutunga, he maha nga kaiwhakamahi e whakamahi ana i te hoahoanga "maha-hop" ngawari e whakauru ana i te hanganga ki o raatau ripanga. Hei ako atu mo tenei, ka taea e koe te tirotiro i te tuhinga Te ako miihini whakangao me te Delta Lake.

Ae ra, ka taea te whakamahi i te whakakaha aronuinga ki nga waahi katoa i roto i to paipa, engari kia mahara ko te rere ki te ripanga i tenei keehi ka raru pea na te mea, hei tauira, i wareware koe i taapirihia e koe tetahi atu pou ki nga raraunga taumai.

Te aukati i te waimehatanga raraunga

I tenei wa ka whakaaro pea koe, he aha te ngangau? Ka mutu, i etahi wa ka raru koe i te hapa "hoahoa kore" i roto i to rerenga mahi, ina koa he hou koe ki Delta Lake. He aha e kore ai e tuku noa i te kaupapa kia huri ina hiahiatia kia taea e au te tuhi i taku DataFrame ahakoa te aha?

E ai ki nga korero tawhito, "he utu mo te kotahi pauna o te rongoa." I etahi wa, ki te kore koe e aro ki te whakakaha i to aronuinga, ka ara ake nga take hototahi momo raraunga - he ahua rite tonu nga puna raraunga mata kei roto pea nga keehi o te taha, nga pou kua kino, nga mahere kua hee, me etahi atu mea whakamataku hei moemoea nga moemoeā. Ko te huarahi tino pai ko te aukati i enei hoariri i te kuaha - me te whakakaha kaupapa - me te mahi ki a ratou i roto i te marama, kaua ki muri ka tiimata ana ratou ki te piri ki te hohonutanga pouri o to waehere whakaputa.

Ma te whakakaha i te aronuinga ka tino mohio koe kaore e huri te aronuinga o to ripanga mena ka whakaaetia e koe te huringa. Ma tenei ka aukati i te waimehatanga raraunga, tera pea ka puta ina taapirihia nga pou hou i te nuinga o te waa ka ngaro te tikanga me te whaihua o nga ripanga whai hua o mua, na te waipuketanga o te raraunga. Ma te whakatenatena i a koe ki te whai whakaaro, ki te whakatakoto i nga paerewa teitei, me te tumanako ki te kounga kairangi, ka rite te mahi a te whakakaha kaupapa i te mea i hoahoatia—ka awhina koe ki te noho maataki me te ma o au ripanga.

Mena ka whakaarohia e koe ka whakatau koe ko koe tonu hiahia tāpirihia he tīwae hōu - kāre he raru, kei raro ko te whakatika raina kotahi. Ko te otinga ko te kukuwhatanga o te ara iahiko!

He aha te whanaketanga aronuinga?

Ko te whanaketanga aronuinga he ahuatanga e taea ai e nga kaiwhakamahi te whakarereke ngawari i te aronuinga ripanga o naianei e ai ki nga raraunga ka huri i te waa. I te nuinga o te wa ka whakamahia i te wa e mahi ana i te mahi taapiri, tuhi ano ranei hei urutau aunoa i te aronuinga hei whakauru i tetahi pou hou.

He pehea te mahi whanaketanga aronuinga?

Ka whai i te tauira mai i te waahanga o mua, ka taea e nga kaiwhakawhanake te whakamahi i te whanaketanga aronuinga ki te taapiri i nga pou hou i paopaohia i mua na te koretake o te aronuinga. Ka whakahohehia te whanaketanga iahiko ma te taapiri .option('mergeSchema', 'true') ki to roopu Spark .write или .writeStream.

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

Hei tiro i te kauwhata, whakahaeretia te patai Spark SQL e whai ake nei

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

Ruku ki roto i te moana o Delta: Te Whakaaetanga Kaupapa me te Evolution
Hei tauira, ka taea e koe te whakarite i tenei whiringa mo te huihuinga Spark katoa ma te taapiri spark.databricks.delta.schema.autoMerge = True ki te whirihoranga korakora. Engari kia tupato tenei, na te mea ka kore koe e whakamohiotia e te whakakaha aronuinga ki nga koretake o te aronuinga pohehe.

Ma te whakauru i te tawhā i roto i te tono mergeSchema, ko nga pou katoa kei roto i te Anga Raraunga engari karekau i te ripanga whaainga ka taapiri aunoatia ki te mutunga o te aronuinga hei waahanga o te tauwhitinga tuhi. Ka taea hoki te taapiri i nga mara kohanga, ka taapirihia hoki enei ki te mutunga o nga pou hanganga e rite ana.

Ka taea e nga miihini o te ra me nga kaiputaiao raraunga te whakamahi i tenei whiringa ki te taapiri i nga pou hou (penei he inenga kua tirohia tata nei, ko te pou mahi hoko o tenei marama ranei) ki o raatau tepu whakangao ako miihini me te kore e pakaru nga tauira o mua i runga i nga pou tawhito.

Ko nga momo huringa aronuinga e whakaaetia ana hei waahanga o te whanaketanga aronuinga i te wa o te taapiri ripanga, te tuhi ano ranei:

  • Te taapiri i nga pou hou (koinei te ahuatanga tino noa)
  • Te huri i nga momo raraunga mai i NullType -> tetahi atu momo, whakatairanga ranei mai i ByteType -> ShortType -> IntegerType

Ko etahi atu huringa kaore e whakaaetia i roto i te whanaketanga aronuinga me tuhi ano te aronuinga me te raraunga ma te taapiri .option("overwriteSchema", "true"). Hei tauira, ki te mea he tauoti te pou "Foo" me te aronuinga hou he momo raraunga aho, katahi me tuhi ano nga konae Parquet(raraunga). Ko enei huringa ko:

  • te whakakore i te tīwae
  • te huri i te momo raraunga o te tīwae tīariari (i roto i te waahi)
  • whakaingoa anō i ngā tīwae he rerekē anake i roto i te take (hei tauira, "Foo" me "foo")

Ka mutu, me te tukunga e whai ake nei o Spark 3.0, ka tino tautokohia te DDL (ma te whakamahi i te ALTER TABLE), ka taea e nga kaiwhakamahi te mahi i nga mahi e whai ake nei i runga i nga kaupapa ripanga:

  • te taapiri pou
  • te huri i nga korero poupou
  • te whakarite i nga ahuatanga ripanga e whakahaere ana i te whanonga o te ripanga, penei i te whakatakoto i te roanga o te wa e penapenahia ai te raarangi tauwhitinga.

He aha te painga o te whanaketanga iahiko?

Ka taea te whakamahi i te whanaketanga kaupapa i nga wa katoa whakaaro Hurihia te aronuinga o to ripanga (he rerekee i te wa i taapiri aitua nga pou ki to Anga Raraunga karekau i kona). Koinei te huarahi ngawari ki te heke i to aronuinga na te mea ka taapiri aunoa i nga ingoa tīwae tika me nga momo raraunga me te kore e whakaatu marama.

mutunga

Ka whakakorehia e te whakakaha aronuinga nga pou hou, etahi atu huringa aronuinga kaore i te hototahi ki to ripanga. Ma te whakarite me te pupuri i enei paerewa teitei, ka taea e nga kaitätari me nga miihini te whakawhirinaki kei a raatau raraunga te taumata o te pono, te korero marama me te marama, ka taea e ratou te whakatau i nga whakataunga pakihi pai ake.

I tetahi atu taha, ka whakakiia e te whanaketanga aronuinga te whakaurunga ma te whakangawari te whakapae huringa aronuinga aunoa. Ina hoki, kaua e uaua ki te taapiri i tetahi pou.

Ko te tono kaha o te kaupapa ko yang, kei reira te whanaketanga o te kaupapa ko yin. Ina whakamahia ngatahi, ka ngawari ake enei ahuatanga ki te whakakore i te haruru me te whakangao tohu.

Ka mihi ano matou ki a Mukul Murthy raua ko Pranav Anand mo o raatau takoha ki tenei tuhinga.

Ko etahi atu tuhinga o tenei raupapa:

Ruku ki roto Delta Lake: Wetewete i te Rangitaki Whakawhitiwhiti

Tuhinga mo te kaupapa

Te ako miihini whakangao me te Delta Lake

He aha te roto raraunga?

Rapua etahi atu korero mo te akoranga

Source: will.com

Tāpiri i te kōrero