Дельта көлүнө чөмүлүү: схемаларды ишке ашыруу жана эволюция

Эй Хабр! Сиздердин назарыңыздарга макаланын котормосун сунуштайм "Дельта көлүнө сууга түшүү: схемаларды ишке ашыруу жана эволюция" Курстун башталышын утурлай даярдалган авторлор Бурак Явуз, Бреннер Хайнц жана Денни Ли Маалымат инженери OTUSдан.

Дельта көлүнө чөмүлүү: схемаларды ишке ашыруу жана эволюция

Маалыматтар, биздин тажрыйбабыз сыяктуу, дайыма топтолуп, өнүгүп турат. Биздин дүйнөнүн менталдык моделдери жаңы маалыматтарга көнүшү керек, алардын кээ бирлери жаңы өлчөмдөрдү — биз мурда эч кандай түшүнүксүз нерселерди байкоонун жаңы жолдорун камтыйт. Бул психикалык моделдер жаңы маалыматты кантип классификациялоону жана иштетүүнү аныктаган таблица схемаларынан анча деле айырмаланбайт.

Бул бизди схемаларды башкаруу маселесине алып келет. Бизнестин кыйынчылыктары жана талаптары убакыттын өтүшү менен өзгөргөн сайын, маалыматтарыңыздын структурасы да өзгөрөт. Delta Lake маалыматтар өзгөргөн сайын жаңы өлчөөлөрдү киргизүүнү жеңилдетет. Колдонуучулар таблица схемаларын башкаруу үчүн жөнөкөй семантикага мүмкүнчүлүк алышат. Бул куралдарга колдонуучуларды өз таблицаларын каталар же керексиз маалыматтар менен кокусунан булгап алуудан коргогон Schema Enforcement жана баалуу маалыматтардын жаңы тилкелерин автоматтык түрдө тиешелүү жерлерге кошууга мүмкүндүк берген Schema Evolution кирет. Бул макалада биз бул куралдарды колдонууну тереңирээк карайбыз.

Таблица схемаларын түшүнүү

Apache Spark ичиндеги ар бир DataFrame маалымат түрлөрү, мамычалар жана метадайындар сыяктуу маалыматтардын формасын аныктаган схеманы камтыйт. Delta Lake менен стол схемасы транзакциялар журналынын ичинде JSON форматында сакталат.

Схеманы ишке ашыруу деген эмне?

Схеманы күчтөндүрүү, ошондой эле схеманы текшерүү деп аталат, бул Дельта көлүндөгү коопсуздук механизми, ал таблицанын схемасына дал келбеген жазууларды четке кагуу менен маалыматтардын сапатын камсыз кылат. Популярдуу бронь үчүн гана жасалган ресторандын алдыңкы партасында отурган кожоюнга окшоп, ал таблицага киргизилген маалыматтардын ар бир тилкеси күтүлгөн тилкелердин тиешелүү тизмесинде (башкача айтканда, алардын ар бири үчүн "эзерв" бар же жок экенин текшерет. ) жана тизмеде жок мамычалары бар жазууларды четке кагат.

Схеманы аткаруу кантип иштейт?

Delta Lake схема боюнча жазууну текшерүүнү колдонот, бул таблицага бардык жаңы жазуулар жазуу учурунда максаттуу таблица схемасы менен шайкештиги текшерилет дегенди билдирет. Эгерде схема шайкеш келбесе, Delta Lake транзакцияны толугу менен токтотот (эч кандай маалымат жазылбайт) жана колдонуучуга дал келбестик жөнүндө билдирүү үчүн өзгөчө кырдаалды жаратат.
Delta Lake жазуусу таблицага туура келерин аныктоо үчүн төмөнкү эрежелерди колдонот. Жазылуучу DataFrame:

  • максаттуу таблицанын схемасында жок кошумча мамычаларды камтышы мүмкүн эмес. Тескерисинче, эгерде келип түшкөн маалыматтарда таблицадагы бардык мамычалар такыр камтылбаса, баары жакшы болот - бул мамычалар жөн эле нөл маанилери менен ыйгарылат.
  • максаттуу таблицадагы мамычалардын маалымат түрлөрүнөн айырмаланган мамычанын маалымат түрлөрүнө ээ боло албайт. Эгерде максаттуу таблица тилкесинде StringType маалыматтары камтылса, бирок DataFrame ичиндеги тиешелүү тилке IntegerType маалыматтарын камтыса, схеманы аткаруу өзгөчө кырдаалды жаратып, жазуу операциясынын ишке ашуусуна жол бербейт.
  • учурда гана айырмаланган тилке аттарын камтышы мүмкүн эмес. Бул бир таблицада аныкталган 'Foo' жана 'foo' аттуу тилкелерге ээ боло албайсыз дегенди билдирет. Spark регистрди сезгич же регистрге сезгич эмес (демейки) режимде колдонулса да, Delta Lake регистрди сактайт, бирок схема сактагычында сезгич эмес. Паркет мамычанын маалыматын сактоодо жана кайтарууда регистрге сезимтал болот. Мүмкүн болгон каталарды, маалыматтардын бузулушун же маалыматтарды жоготуп албаш үчүн (биз Databricksте жеке башынан өткөргөн нерсебиз), биз бул чектөөнү кошууну чечтик.

Муну көргөзүү үчүн, келгиле, Delta Lake таблицасына жаңы түзүлгөн тилкелерди кошууга аракет кылганда, төмөндөгү коддо эмне болорун карап көрөлү, аларды кабыл алуу үчүн конфигурациялана элек.

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

Жаңы тилкелерди автоматтык түрдө кошуунун ордуна, Delta Lake схеманы киргизип, жазууну токтотот. Кайсы тилке (же мамычалар топтому) дал келбестикке себеп болуп жатканын аныктоого жардам берүү үчүн, Spark салыштыруу үчүн стек изинен эки схеманы тең чыгарат.

Схеманы ишке ашыруунун кандай пайдасы бар?

Схеманы ишке ашыруу өтө катуу текшерүү болгондуктан, бул өндүрүшкө же керектөөгө даяр болгон таза, толугу менен өзгөртүлгөн маалымат топтомуна дарбазачы катары колдонуу үчүн эң сонун курал. Демейде дайындарды түздөн-түз берүүчү таблицаларга колдонулат:

  • Машина үйрөнүү алгоритмдери
  • BI башкаруу такталары
  • Маалыматтарды талдоо жана визуалдаштыруу куралдары
  • Жогорку структураланган, катуу терилген семантикалык схемаларды талап кылган ар кандай өндүрүш системасы.

Бул акыркы тоскоолдукка өз маалыматтарын даярдоо үчүн, көптөгөн колдонуучулар жөнөкөй "көп хоп" архитектурасын колдонушат, ал акырындык менен өз таблицаларына структураны киргизет. Бул тууралуу көбүрөөк билүү үчүн, сиз макаланы текшере аласыз Delta Lake менен өндүрүштүк деңгээлдеги машинаны үйрөнүү.

Албетте, схеманы аткарууну конвейериңиздин каалаган жеринде колдонсо болот, бирок бул учурда таблицага агып чыгуу көңүлүңүздү чөгүшү мүмкүн экенин унутпаңыз, анткени, мисалы, сиз келген маалыматтарга башка тилке кошконуңузду унутуп калгансыз.

Маалыматтын суюлушун алдын алуу

Азырынча ызы-чуу эмнеде деп ойлонуп жаткандырсыз? Анткени, кээде күтүлбөгөн "схема дал келбегендик" катасы жумуш процессиңизди бузуп коюшу мүмкүн, айрыкча сиз Delta Lake менен жаңы болсоңуз. Эмне үчүн мен DataFrame-ди эч нерсеге карабай жаза алышым үчүн схеманын өзгөрүшүнө жол бербейли?

Байыркы макалда айтылгандай, "алдын алуу үчүн бир унция бир фунт айыктырууга арзыйт". Кайсы бир учурда, сиз схемаңызды ишке ашырууга кам көрбөсөңүз, маалымат түрлөрүнүн шайкештик маселелери алардын башын айлантат - бир тектүү көрүнгөн чийки маалымат булактары четки учурларды, бузулган мамычаларды, туура эмес форматталган карталарды же кыялданган башка коркунучтуу нерселерди камтышы мүмкүн. коркунучтуу түштөр. Эң жакшы ыкма - бул душмандарды дарбазада токтотуу - схеманы колдонуу менен - ​​жана алар өндүрүш кодуңуздун караңгы тереңдигинде жашынып баштаганда эмес, алар менен жарыкта күрөшүү.

Схеманы күчтөндүрүү, сиз өзгөртүүнү жактырмайынча, таблицаңыздын схемасы өзгөрбөй тургандыгына кепилдик берет. Бул жаңы мамычалар ушунчалык тез-тез кошулганда пайда болушу мүмкүн болгон маалыматтарды суюлтуунун алдын алат, андыктан мурда баалуу, кысылган таблицалар маалыматтардын каптап кетишинен улам өз маанисин жана пайдалуулугун жоготот. Сизди атайылап болууга, жогорку стандарттарды коюуга жана жогорку сапатты күтүүгө үндөп, схеманын аткарылышы так аткарылганын аткарат — абийирдүү болууга жана электрондук жадыбалдарыңызды таза сактоого жардам берет.

Эгер андан ары карап чыгып, сиз чын эле деп чечсеңиз керек жаңы тилке кошуу - көйгөй жок, төмөндө бир саптан турган оңдоо бар. Чечим - бул схеманын эволюциясы!

Схема эволюциясы деген эмне?

Схема эволюциясы – бул колдонуучуларга убакыттын өтүшү менен өзгөргөн маалыматтарга ылайык учурдагы таблица схемасын оңой өзгөртүүгө мүмкүндүк берген функция. Ал көбүнчө схеманы бир же бир нече жаңы тилкелерди камтууга автоматтык түрдө ыңгайлаштыруу үчүн кошумчалоо же кайра жазуу операциясын аткарууда колдонулат.

Схема эволюциясы кантип иштейт?

Мурунку бөлүмдөгү мисалдан кийин, иштеп чыгуучулар схеманын ыраатсыздыгынан улам мурда четке кагылган жаңы тилкелерди кошуу үчүн схеманын эволюциясын оңой колдоно алышат. Circuit эволюциясы кошуу менен иштетилет .option('mergeSchema', 'true') Сиздин Spark командасына .write или .writeStream.

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

Графикти көрүү үчүн төмөнкү 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

Дельта көлүнө чөмүлүү: схемаларды ишке ашыруу жана эволюция
Же болбосо, бул параметрди кошуу менен бүт Spark сеансы үчүн орното аласыз spark.databricks.delta.schema.autoMerge = True Spark конфигурациясына. Бирок муну этияттык менен колдонуңуз, анткени схеманын аткарылышы мындан ары сизге схеманын атайылап келишпестиктери жөнүндө эскертпейт.

Сурамга параметрди кошуу менен mergeSchema, DataFrameде бар, бирок максаттуу таблицада жок бардык мамычалар жазуу транзакциясынын бөлүгү катары схеманын аягына автоматтык түрдө кошулат. Уюшкан талааларды да кошууга болот жана алар да тиешелүү структура мамычаларынын аягына кошулат.

Дата инженерлери жана маалымат таануучулар бул параметрди эски тилкелерге негизделген учурдагы моделдерди бузбастан, жаңы тилкелерди (балким, жакында байкалган метрика же ушул айдын сатуу көрсөткүчтөрү тилкеси) кошуу үчүн колдоно алышат.

Таблицаны кошуу же кайра жазуу учурунда схеманын эволюциясынын бир бөлүгү катары схеманы өзгөртүүнүн төмөнкү түрлөрүнө жол берилет:

  • Жаңы тилкелерди кошуу (бул эң кеңири таралган сценарий)
  • NullType -> каалаган башка типтен берилиштердин түрлөрүн өзгөртүү же ByteType -> ShortType -> IntegerType'ден жылдыруу

Схема эволюциясында уруксат берилбеген башка өзгөртүүлөр схеманы жана маалыматтарды кошуу менен кайра жазууну талап кылат .option("overwriteSchema", "true"). Мисалы, "Foo" тилкеси башында бүтүн сан болгон жана жаңы схема сап маалымат түрү болгон учурда, бардык Parket(маалымат) файлдарын кайра жазуу керек болот. Мындай өзгөртүүлөр төмөнкүлөрдү камтыйт:

  • тилкени жок кылуу
  • учурдагы тилкенин маалымат түрүн өзгөртүү (жеринде)
  • учурда гана айырмаланган мамычалардын атын өзгөртүү (мисалы, "Foo" жана "foo")

Акыр-аягы, Spark 3.0 кийинки чыгарылышы менен, ачык DDL толук колдоого алынат (ALTER TABLE колдонуу менен), колдонуучулар стол схемаларында төмөнкү аракеттерди аткарууга мүмкүндүк берет:

  • мамычаларды кошуу
  • тилке комментарийлерин өзгөртүү
  • транзакциялар журналы сакталган убакыттын узактыгын орнотуу сыяктуу таблицанын жүрүм-турумун башкарган таблица касиеттерин орнотуу.

Айлананын эволюциясынын кандай пайдасы бар?

Схема эволюциясын каалаган убакта колдонсо болот ниет кылуу таблицаңыздын схемасын өзгөртүңүз (сиз DataFrame'иңизге кокустан мамычаларды кошсоңуз, алар ал жерде болбошу керек). Бул сиздин схемаңызды көчүрүүнүн эң оңой жолу, анткени ал автоматтык түрдө туура мамычанын аталыштарын жана маалымат түрлөрүн ачык жарыялабастан кошот.

жыйынтыктоо

Схеманы күчтөндүрүү жадыбалыңызга туура келбеген бардык жаңы тилкелерди же башка схема өзгөртүүлөрдү четке кагат. Бул жогорку стандарттарды коюу жана сактоо менен, аналитиктер жана инженерлер алардын маалыматтары эң жогорку деңгээлде бүтүндүккө ээ экенине ишенип, аны так жана так жеткирип, аларга жакшыраак бизнес чечимдерин кабыл алууга мүмкүндүк берет.

Башка жагынан алганда, схема эволюциясы жөнөкөйлөтүү аркылуу аткарууну толуктайт болжолдонгон схемаларды автоматтык түрдө өзгөртүү. Анткени, тилке кошуу кыйын болбосо керек.

Схеманы мажбурлап колдонуу ян, мында схеманын эволюциясы инь болуп саналат. Бул функциялар чогуу колдонулганда ызы-чуу басууну жана сигналды тууралоону болуп көрбөгөндөй жеңилдетет.

Ошондой эле бул макалага кошкон салымы үчүн Мукул Мурти менен Пранав Анандга ыраазычылык билдиргибиз келет.

Бул сериядагы башка макалалар:

Дельта көлүнө чөмүлүү: транзакция журналын ачуу

Окшош макалалар

Delta Lake менен өндүрүштүк деңгээлдеги машинаны үйрөнүү

Маалымат көлү деген эмне?

Курс тууралуу көбүрөөк билиңиз

Source: www.habr.com

Комментарий кошуу