Léim isteach i Delta Lake: Forfheidhmiú Scéimre agus Éabhlóid

Hey Habr! Cuirim i láthair d'aistriúchán ar an alt "Tumadóireacht I Loch Delta: Forfheidhmiú Scéimre & Éabhlóid" na húdair Burak Yavuz, Brenner Heintz agus Denny Lee, a ullmhaíodh in oirchill ar thús an chúrsa Innealtóir Sonraí ó OTUS.

Léim isteach i Delta Lake: Forfheidhmiú Scéimre agus Éabhlóid

Tá sonraí, cosúil lenár dtaithí, ag carnadh agus ag athrú i gcónaí. Chun coimeád suas, ní mór ár múnlaí meabhrach den domhan a chur in oiriúint do shonraí nua, a bhfuil gnéithe nua i gcuid acu - bealaí nua chun breathnú ar rudaí nach raibh aon smaoineamh againn faoi roimhe seo. Níl mórán difríochta idir na samhlacha meabhracha seo agus na scéimeanna táblaí a chinneann conas a dhéanaimid faisnéis nua a chatagóiriú agus a phróiseáil.

Tugann sé seo sinn chuig ceist na bainistíochta scéimre. De réir mar a athraíonn dúshláin agus riachtanais ghnó le himeacht ama, is amhlaidh a athraíonn struchtúr do shonraí. Déanann Delta Lake éasca tomhais nua a thabhairt isteach de réir mar a athraíonn sonraí. Tá rochtain ag úsáideoirí ar shéimeantaic shimplí chun a scéimeanna boird a bhainistiú. Áirítear leis na huirlisí seo Forfheidhmiú Scéimre, a chosnaíonn úsáideoirí ó thruailliú neamhbheartaithe a gcuid táblaí le hearráidí nó le sonraí nach bhfuil gá leo, agus Scéim Evolution, a cheadaíonn colúin nua de shonraí luachmhara a chur go huathoibríoch chuig na suíomhanna cuí. San Airteagal seo, beidh muid ag dul níos doimhne ar úsáid a bhaint as na huirlisí seo.

Scéimeanna Tábla a Thuiscint

Tá scéimre i ngach DataFrame in Apache Spark a shainíonn foirm na sonraí, mar chineálacha sonraí, colúin, agus meiteashonraí. Le Delta Lake, stóráiltear an scéimre tábla i bhformáid JSON taobh istigh den loga idirbheart.

Cad is forfheidhmiú scéime ann?

Is meicníocht slándála é Forfheidhmiú Scéimre, ar a dtugtar Bailíochtú Scéimre freisin, i Delta Lake a chinntíonn cáilíocht sonraí trí thaifid nach bhfuil comhoiriúnach le scéimre an tábla a dhiúltú. Cosúil leis an hostess ag deasc tosaigh bialann áirithinte amháin a bhfuil an-tóir uirthi, seiceálann sí cibé an bhfuil gach colún sonraí a chuirtear isteach sa tábla sa liosta comhfhreagrach de na colúin a bhfuiltear ag súil leo (i bhfocail eile, cibé an bhfuil "áirithint" ann do gach ceann acu. ) agus diúltaíonn sé d’aon taifid a bhfuil colúin acu nach bhfuil sa liosta.

Conas a oibríonn forfheidhmiú scéimre?

Úsáideann Delta Lake seiceáil scéimre-ar-scríobh, rud a chiallaíonn go ndéantar gach scríobh nua chuig an tábla a sheiceáil le haghaidh comhoiriúnachta le scéimre an tábla sprice ag am scríofa. Má tá an scéimre ar neamhréir, ginmhilleadh Delta Lake an t-idirbheart go hiomlán (níl aon sonraí scríofa) agus ardaíonn eisceacht chun an t-úsáideoir a chur ar an eolas faoin neamhréireacht.
Úsáideann Delta Lake na rialacha seo a leanas chun a chinneadh an bhfuil taifead comhoiriúnach le tábla. Fráma Sonraí Inscríofa:

  • ní féidir colúin bhreise nach bhfuil i scéimre an tábla sprice a bheith ann. Os a choinne sin, tá gach rud go breá mura bhfuil na colúin go léir ón tábla go hiomlán sna sonraí ag teacht isteach - ní thabharfar ach luachanna nialais do na colúin seo.
  • ní féidir cineálacha sonraí colún a bheith ann atá difriúil ó chineálacha sonraí na gcolún sa tábla sprice. Má tá sonraí StringType sa cholún sprice tábla, ach go bhfuil sonraí IntegerType sa cholún comhfhreagrach sa DataFrame, caithfidh forghníomhú scéimre eisceacht agus cuirfidh sé cosc ​​ar an oibríocht scríofa.
  • ní féidir ainmneacha colúin a bheith ann atá difriúil i gcás amháin. Ciallaíonn sé seo nach féidir colúin darb ainm 'Foo' agus 'foo' a bheith sainithe sa tábla céanna. Cé gur féidir Spark a úsáid i mód cás-íogair nó cás-íogair (réamhshocraithe), tá Delta Lake ag caomhnú cásanna ach tá sé neamhíogair laistigh den stóráil scéimre. Tá iontlaise cásíogair nuair a bhíonn faisnéis colúin á stóráil agus á seoladh ar ais. Chun earráidí féideartha, éilliú sonraí, nó caillteanas sonraí a sheachaint (rud a raibh taithí againn go pearsanta air ag Databricks), shocraigh muid an teorannú seo a chur leis.

Chun é seo a léiriú, déanaimis féachaint ar cad a tharlaíonn sa chód thíos nuair a dhéanaimid iarracht roinnt colúin nua-ghinte a chur le tábla Delta Lake nach bhfuil cumraithe fós chun glacadh leo.

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

In ionad colúin nua a chur leis go huathoibríoch, cuireann Delta Lake scéimre i bhfeidhm agus stopann sé ag scríobh. Chun cuidiú a fháil amach cén colún (nó sraith colún) is cúis leis an neamhréireacht, aschuir Spark an dá scéimre as rian an chruach chun comparáid a dhéanamh.

Cad é an buntáiste a bhaineann le scéimre a fhorfheidhmiú?

Toisc gur seiceáil sách dian é forghníomhú scéimre, is uirlis iontach é le húsáid mar choimeádaí geataí ar thacar sonraí atá glan, lánchlaochlaithe agus atá réidh le táirgeadh nó le caitheamh. De ghnáth cuirtear i bhfeidhm é ar tháblaí a chothaíonn sonraí go díreach:

  • Algartam foghlama meaisín
  • Deais BI
  • Uirlisí anailísíochta agus léirshamhlaithe sonraí
  • Aon chóras táirgthe a éilíonn scéimre shéimeantacha ard-struchtúrtha, clóscríofa go láidir.

Chun a gcuid sonraí a ullmhú don chonstaic dheireanach seo, úsáideann go leor úsáideoirí ailtireacht shimplí “il-hop” a thugann struchtúr isteach ina gcuid táblaí de réir a chéile. Chun níos mó a fhoghlaim faoi seo, is féidir leat seiceáil amach an t-alt Foghlaim meaisín de ghrád táirgeachta le Delta Lake.

Ar ndóigh, is féidir forghníomhú scéimre a úsáid áit ar bith ar do phíblíne, ach cuimhnigh gur féidir le sruthú chuig tábla sa chás seo a bheith frustrachas mar, mar shampla, rinne tú dearmad gur chuir tú colún eile leis na sonraí a tháinig isteach.

Caolú sonraí a chosc

Faoin am seo b'fhéidir go bhfuil tú ag smaoineamh, cad é an fuss ar fad faoi? Tar éis an tsaoil, uaireanta féadann earráid "neamhréir scéimre" gan choinne tú a thurais suas i do shreabhadh oibre, go háirithe má tá tú nua i Delta Lake. Cén fáth nach ligfidh tú don scéimre athrú de réir mar is gá ionas gur féidir liom mo DataFrame a scríobh is cuma cad é?

Mar a deir an seanfhocal, "is fiú punt de leigheas an unsa coiscthe." Ag pointe éigin, mura ndéanann tú cúram do scéimre a fhorfheidhmiú, tógfaidh saincheisteanna comhoiriúnachta de chineál sonraí a gcinn ghránna - d’fhéadfadh cásanna imeallacha, colúin truaillithe, mapálacha míchumtha, nó rudaí scanrúla eile a bheith i bhfoinsí sonraí amh aonchineálacha. tromluithe. Is é an cur chuige is fearr ná na naimhde seo a stopadh ag an ngeata - le forfheidhmiú scéimre - agus déileáil leo sa solas, seachas níos déanaí nuair a thosaíonn siad ag lurking i ndoimhneacht dorcha do chód táirgthe.

Má dhéantar scéimre a fhorfheidhmiú, gheobhaidh tú dearbhú nach n-athróidh scéimre do bhoird mura gceadaíonn tú an t-athrú. Cuireann sé seo cosc ​​​​ar chaolú sonraí, rud a d'fhéadfadh tarlú nuair a chuirtear colúin nua leis chomh minic sin go gcaillfidh táblaí comhbhrúite luachmhara roimhe seo a gciall agus a n-úsáidí de bharr bá sonraí. Trí spreagadh a thabhairt duit a bheith d'aon ghnó, caighdeáin arda a shocrú, agus a bheith ag súil le hardchaighdeán, déanann forfheidhmiú scéime go díreach an rud a dearadh é - cabhrú leat fanacht coinsiasach agus do scarbhileoga a ghlanadh.

Más rud é ar bhreithniú breise a shocraíonn tú go bhfuil tú i ndáiríre go cuir colún nua leis - gan aon fhadhb, thíos tá socrú aon-líne. Is é an réiteach ná éabhlóid an chuaird!

Cad is éabhlóid scéimre ann?

Is gné é éabhlóid scéimre a ligeann d’úsáideoirí an scéimre tábla reatha a athrú go héasca de réir sonraí a athraíonn le himeacht ama. Is minic a úsáidtear é nuair a bhíonn oibríocht aguisín nó athscríobh ar siúl chun an scéimre a oiriúnú go huathoibríoch chun colún nua amháin nó níos mó a chur san áireamh.

Conas a oibríonn éabhlóid scéimre?

Tar éis an sampla ón alt roimhe seo, is féidir le forbróirí éabhlóid scéimre a úsáid go héasca chun colúin nua a diúltaíodh roimhe seo a chur leis mar gheall ar neamhréireacht scéimre. Cuirtear éabhlóid chuaird i ngníomh trí chur leis .option('mergeSchema', 'true') do fhoireann Spark .write или .writeStream.

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

Chun an graf a fheiceáil, rith an cheist Spark SQL seo a leanas

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

Léim isteach i Delta Lake: Forfheidhmiú Scéimre agus Éabhlóid
Nó, is féidir leat an rogha seo a shocrú don seisiún Spark iomlán trí chur leis spark.databricks.delta.schema.autoMerge = True chuig an chumraíocht Spark. Ach bain úsáid as seo go cúramach, mar ní chuirfidh forfheidhmiú scéimre foláireamh duit a thuilleadh maidir le neamhréireachtaí scéimre neamhbheartaithe.

Trí an paraiméadar a áireamh san iarratas mergeSchema, cuirtear go huathoibríoch na colúin go léir atá sa DataFrame ach nach bhfuil sa tábla sprice go dtí deireadh an scéimre mar chuid d'idirbheart scríofa. Is féidir réimsí neadaithe a chur leis freisin agus cuirfear iad seo le deireadh na gcolún struchtúr comhfhreagrach freisin.

Is féidir le hinnealtóirí dáta agus eolaithe sonraí an rogha seo a úsáid chun colúin nua (b'fhéidir méadrach a rianaíodh le déanaí nó colún feidhmíochta díolacháin na míosa seo) a chur lena dtáblaí táirgeachta meaisínfhoghlama atá ann cheana féin gan múnlaí atá ann cheana féin a bhriseadh bunaithe ar sheancholúin.

Ceadaítear na cineálacha athruithe scéimre seo a leanas mar chuid den éabhlóid scéimre le linn tábla a shuimiú nó a athscríobh:

  • Colúin nua á gcur leis (seo an cás is coitianta)
  • Cineálacha sonraí a athrú ó NullType -> aon chineál eile nó cur chun cinn ó ByteType -> ShortType -> IntegerType

Éilíonn athruithe eile nach gceadaítear laistigh d'éabhlóid scéimre go ndéanfaí an scéimre agus na sonraí a athscríobh trí chur leo .option("overwriteSchema", "true"). Mar shampla, sa chás gur slánuimhir a bhí sa cholún "Foo" ar dtús agus gur cineál sonraí teaghrán a bhí sa scéimre nua, ansin ba ghá gach comhad Parquet(sonraí) a athscríobh. Áirítear le hathruithe den sórt sin:

  • ag scriosadh colún
  • ag athrú cineál sonraí colúin reatha (i bhfeidhm)
  • ag athainmniú colúin atá difriúil i gcás amháin (mar shampla, "Foo" agus "foo")

Ar deireadh, leis an gcéad eisiúint eile de Spark 3.0, tabharfar lántacaíocht do DDL sainráite (ag úsáid ALTER TABLE), rud a ligeann d’úsáideoirí na gníomhartha seo a leanas a dhéanamh ar scéimeanna boird:

  • ag cur colúin
  • ag athrú tuairimí colúin
  • socrú airíonna tábla a rialaíonn iompar an tábla, mar shampla an fad ama a stóráiltear logáil idirbheart a shocrú.

Cad é an leas a bhaineann le héabhlóid chiorcaid?

Is féidir éabhlóid scéimre a úsáid aon uair a dhéanann tú intinn athraigh scéimre do tábla (seachas nuair a chuir tú colúin le do DataFrame nár cheart a bheith ann de thaisme). Is é seo an bealach is éasca chun do scéimre a aistriú mar go gcuireann sé na hainmneacha colún agus na cineálacha sonraí cearta leis go huathoibríoch gan a bheith ort iad a dhearbhú go sainráite.

Conclúid

Diúltaíonn forghníomhú scéimre aon cholúin nua nó athruithe scéimre eile nach bhfuil ag luí le do tábla. Trí na caighdeáin arda seo a shocrú agus a chothabháil, féadfaidh anailísithe agus innealtóirí muinín a bheith acu go bhfuil an leibhéal sláine is airde ag a gcuid sonraí, agus iad á gcur in iúl go soiléir agus go soiléir, rud a ligeann dóibh cinntí gnó níos fearr a dhéanamh.

Ar an láimh eile, comhlánaíonn éabhlóid scéimre forfheidhmiú trí shimpliú líomhnaithe athruithe scéimre uathoibríoch. Tar éis an tsaoil, níor cheart go mbeadh sé deacair colún a chur leis.

Is é yang cur i bhfeidhm éigeantach na scéime, áit a bhfuil éabhlóid na scéime ceann. Nuair a úsáidtear iad le chéile, déanann na gnéithe seo cosc ​​torainn agus tiúnadh comhartha níos éasca ná riamh.

Ba mhaith linn buíochas a ghabháil freisin le Mukul Murthy agus Pranav Anand as an méid a chuir siad leis an Airteagal seo.

Ailt eile sa tsraith seo:

Léim isteach i Delta Lake: Ag Díphacáil an Loga Idirbheart

Ailt Ghaolmhara

Foghlaim meaisín de ghrád táirgeachta le Delta Lake

Cad is loch sonraí ann?

Faigh tuilleadh eolais faoin gcúrsa

Foinse: will.com

Add a comment