ډیلټا جهيل کې ډوب کړئ: د سکیما پلي کول او تکامل

اې حبره! زه ستاسو پام ته د مقالې ژباړه وړاندې کوم "په ډیلټا جهيل کې ډوبېدل: د سکیما پلي کول او ارتقا" د بوراک یاووز، برینر هینټز او ډیني لی لخوا، کوم چې د کورس د پیل په تمه چمتو شوی و د معلوماتو انجنیر له OTUS څخه.

ډیلټا جهيل کې ډوب کړئ: د سکیما پلي کول او تکامل

معلومات، لکه زموږ د تجربې، په دوامداره توګه راټولیږي او وده کوي. د دوام لپاره، زموږ د نړۍ ذهني ماډلونه باید د نوي معلوماتو سره تطابق وکړي، چې ځینې یې نوي ابعاد لري - د هغه شیانو د لیدلو نوې لارې چې موږ یې دمخه هیڅ نظر نه درلود. دا ذهني ماډلونه په سپریډ شیټونو کې د سکیماګانو برعکس ندي چې دا ټاکي چې موږ څنګه نوي معلومات طبقه بندي کوو او پروسس کوو.

دا موږ د سکیما مدیریت مسلې ته رسوي. لکه څنګه چې د سوداګرۍ اهداف او اړتیاوې د وخت په تیریدو سره وده کوي، ستاسو د معلوماتو جوړښت هم همداسې کیږي. ډیلټا لیک د معلوماتو بدلون سره نوي ابعاد معرفي کول اسانه کوي. کاروونکي د خپلو جدول سکیماګانو اداره کولو لپاره ساده سیمانټیکونو ته لاسرسی لري. پدې وسیلو کې د سکیما پلي کول شامل دي، کوم چې کاروونکي په ناڅاپي ډول د دوی میزونو د غلطیو یا غیر ضروري معلوماتو سره ګډوډولو څخه ساتي، او د سکیما ارتقا، کوم چې په اتوماتيک ډول نوي کالمونه اضافه کوي چې په مناسب ځایونو کې ارزښتناکه معلومات لري. پدې مقاله کې، موږ به د دې وسیلو کارولو ته ژوره کتنه وکړو.

د جدول سکیما پوهیدل

په اپاچي سپارک کې هر ډیټا فریم یو سکیما لري چې د ډیټا بڼه تعریفوي، لکه د ډیټا ډولونه، کالمونه، او میټاډاټا. د ډیلټا لیک سره، د جدول سکیما د لیږد لاګ دننه د JSON بڼه کې زیرمه کیږي.

د سکیم پلي کول څه شی دی؟

د سکیما تطبیق، چې د سکیما اعتبار په نوم هم پیژندل کیږي، په ډیلټا لیک کې یو امنیتي میکانیزم دی چې د معلوماتو کیفیت د هغو ریکارډونو ردولو سره تضمینوي چې د میز سکیما سره سمون نه لري. د یو مشهور رستورانت کې د کوربه په څیر چې یوازې ریزرویشنونه مني، د سکیما تطبیق ګوري چې ایا په جدول کې داخل شوي د معلوماتو هر کالم د تمه شوي کالمونو په ورته لیست کې دی (په بل عبارت، ایا د هر یو لپاره "ریزرویشن" شتون لري) او هر هغه ریکارډونه ردوي چې هغه کالمونه لري چې په لیست کې ندي.

د سکیما تطبیق څنګه کار کوي؟

ډیلټا لیک د لیکلو پر مهال د سکیما چک کاروي، پدې معنی چې په جدول کې ټول نوي لیکل د لیکلو په وخت کې د هدف میز د سکیما سره د مطابقت لپاره چک کیږي. که سکیما مطابقت ونلري، ډیلټا لیک معامله په بشپړه توګه لغوه کوي (هیڅ معلومات نه لیکل کیږي) او یو استثنا راپورته کوي ترڅو کارونکي ته د ناانصافي خبر ورکړي.
ډیلټا لیک لاندې قوانین کاروي ترڅو معلومه کړي چې ایا ریکارډ د میز سره مطابقت لري. د ډیټا چوکاټ لیکل کیږي:

  • دا نشي کولی اضافي ستنې ولري چې د هدف جدول په سکیما کې شتون نلري. برعکس، دا سمه ده که چیرې راتلونکی معلومات د جدول څخه هر ستون ونه لري - هغه ستونونه به په ساده ډول خالي ارزښتونه وټاکل شي.
  • د کالم ډیټا ډولونه نشي کولی چې د هدف جدول کې د کالم ډیټا ډولونو څخه توپیر ولري. که چیرې د هدف جدول کې یو کالم د سټرینګ ټایپ ډیټا ولري، مګر د ډیټا فریم کې اړونده کالم د انټیجر ټایپ ډیټا ولري، د سکیما پلي کول به یو استثنا راولي او د لیکلو عملیات به د پیښیدو مخه ونیسي.
  • د کالم نومونه نشي کولی چې یوازې په قضیه کې توپیر ولري. دا پدې مانا ده چې تاسو نشئ کولی په ورته جدول کې د 'Foo' او 'foo' په نوم کالمونه تعریف کړئ. پداسې حال کې چې سپارک د قضیې حساس یا قضیې غیر حساس (په ډیفالټ ډول) کې کارول کیدی شي، ډیلټا لیک قضیه ساتي مګر د سکیما ذخیره کولو پرمهال د قضیې غیر حساس دی. پارکیټ د کالم معلوماتو ذخیره کولو او ترلاسه کولو پرمهال د قضیې حساس دی. د احتمالي غلطیو، معلوماتو فساد، یا د معلوماتو ضایع کیدو څخه مخنیوي لپاره (کوم چې موږ په شخصي توګه په ډیټابریکس کې تجربه کړې)، موږ پریکړه وکړه چې دا محدودیت اضافه کړو.

د دې د روښانه کولو لپاره، راځئ چې وګورو چې په لاندې کوډ کې څه پیښیږي کله چې موږ هڅه کوو چې ځینې نوي تولید شوي کالمونه د ډیلټا لیک جدول ته اضافه کړو چې لا تر اوسه د دوی د منلو لپاره تنظیم شوي ندي.

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

د نوي کالمونو په اتوماتيک ډول اضافه کولو پرځای، ډیلټا لیک سکیما پلي کوي او لیکل ودروي. د دې لپاره چې معلومه شي چې کوم کالم (یا د کالمونو سیټونه) د توپیر لامل کیږي، سپارک د پرتله کولو لپاره د سټیک ټریس څخه دواړه سکیماګانې ښیې.

د دې طرحې د پلي کولو ګټه څه ده؟

ځکه چې د سکیما تطبیق یو څه سخت چیک دی، دا د تولید یا مصرف لپاره چمتو شوي پاک، بشپړ بدل شوي ډیټاسیټ ته د دروازې ساتونکي په توګه کارولو لپاره یوه غوره وسیله ده. دا معمولا په هغو جدولونو کې پلي کیږي چې مستقیم معلومات تغذیه کوي:

  • د ماشین زده کړې الګوریتمونه
  • د BI ډشبورډونه
  • د معلوماتو تحلیل او لید وسیلې
  • هر هغه تولیدي سیسټم چې په کلکه جوړښت شوي، په کلکه ټایپ شوي سیمانټیک سکیما ته اړتیا لري.

د دې وروستي خنډ لپاره د دوی معلوماتو چمتو کولو لپاره، ډیری کاروونکي یو ساده "ملټي هاپ" جوړښت کاروي چې ورو ورو جوړښت په خپلو جدولونو کې معرفي کوي. د نورو معلوماتو لپاره، تاسو کولی شئ مقاله ولولئ. د ډیلټا لیک سره د تولید درجې ماشین زده کړه.

البته، تاسو کولی شئ د خپل پایپ لاین په هر ځای کې د سکیما پلي کولو څخه کار واخلئ، مګر په یاد ولرئ چې پدې حالت کې میز ته لیکل کیدی شي مایوسه کونکي وي، د بیلګې په توګه، ځکه چې تاسو هیر کړی چې تاسو راتلونکو معلوماتو ته بل کالم اضافه کړی.

د معلوماتو د مایع کیدو مخنیوی

په دې مرحله کې، تاسو شاید حیران یاست چې دا ټول ګډوډي د څه په اړه ده؟ بالاخره، ځینې وختونه د "سکیما بې مطابقت" ناڅاپي تېروتنه کولی شي ستاسو په کاري جریان کې خنډ شي، په ځانګړې توګه که تاسو دیلټا لیک ته نوي یاست. ولې یوازې سکیما ته اجازه نه ورکوئ چې د اړتیا سره سم بدلون ومومي ترڅو زه خپل ډیټا فریم ولیکم پرته له دې چې څه وي؟

لکه څنګه چې پخوانۍ خبره ده، "یو اونس مخنیوی د یو پونډ درملنې ارزښت لري." په یو وخت کې، که تاسو د خپل سکیما پلي کولو ته پاملرنه ونکړئ، د معلوماتو ډول مطابقت مسلې به خپل بدصورت سرونه راوباسي - ظاهرا یو شان خام ډیټا سرچینې ممکن د څنډې قضیې، فاسد کالمونه، خراب شوي نقشې، یا نور خوبونه ولري. غوره لاره دا ده چې دا دښمنان په دروازه کې ودروئ - د سکیما پلي کولو سره - او د دوی سره په خلاص کې معامله وکړئ، نه وروسته، کله چې دوی ستاسو د تولید کوډ په تیاره ژورو کې پټیدل پیل کړي.

د سکیما تطبیق ډاډ ورکوي چې ستاسو د میز سکیما به بدلون ونلري تر هغه چې تاسو په واضح ډول بدلون تصویب نه کړئ. دا د معلوماتو د کمولو مخه نیسي، کوم چې هغه وخت پیښ کیدی شي کله چې نوي کالمونه دومره ډیر اضافه شي چې دمخه ارزښتناکه، کمپیکٹ میزونه د معلوماتو د سیلاب له امله خپل معنی او ګټورتوب له لاسه ورکوي. د هڅولو سره چې تاسو اراده لرئ، لوړ معیارونه وټاکئ، او د لوړ کیفیت تمه وکړئ، د سکیما تطبیق په سمه توګه هغه څه کوي چې موخه یې وه - تاسو سره د بشپړتیا ساتلو او ستاسو میزونو پاک ساتلو کې مرسته کوي.

که چیرې د لا زیاتو غورونو وروسته تاسو پریکړه وکړئ چې تاسو واقعیا کوئ اړتیا لري د نوي ستون اضافه کول کومه ستونزه نه ده؛ لاندې د یوې کرښې حل چمتو شوی دی. حل د سکیما ارتقا ده!

د سکیما ارتقا څه شی دی؟

د سکیما ارتقا یوه ځانګړتیا ده چې کاروونکو ته اجازه ورکوي چې په اسانۍ سره د جدول اوسنی سکیما تعدیل کړي ترڅو د وخت په تیریدو سره بدلیدونکي معلومات ځای په ځای کړي. دا ډیری وختونه د داخلولو یا بیا لیکلو عملیاتو په جریان کې کارول کیږي ترڅو سکیما په اتوماتيک ډول د یو یا ډیرو نوي ستنو شاملولو لپاره تطبیق کړي.

د سکیما ارتقا څنګه کار کوي؟

د پخوانۍ برخې د مثال په تعقیب، پراختیا کونکي کولی شي په اسانۍ سره د سکیما ارتقا څخه کار واخلي ترڅو نوي کالمونه اضافه کړي چې دمخه د سکیما د نه اطاعت له امله رد شوي وو. د سکیما ارتقا د اضافه کولو سره فعال کیږي .option('mergeSchema', 'true') ستاسو د سپارک ټیم ته .write или .writeStream.

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

د ګراف لیدلو لپاره، لاندې سپارک ایس کیو ایل پوښتنه پرمخ بوځئ

# Создайте график с новым столбцом, чтобы подтвердить, что запись прошла успешно
%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.databricks.delta.schema.autoMerge = True د سپارک ترتیب ته. په هرصورت، دا په احتیاط سره وکاروئ، ځکه چې د سکیما پلي کول به نور تاسو ته د غیر ارادي سکیما ناانډولیو په اړه خبرداری ورنکړي.

په غوښتنه کې د پیرامیټر په شاملولو سره mergeSchemaټول هغه ستنې چې په ډیټا فریم کې شتون لري مګر د هدف جدول څخه ورک دي د لیکلو معاملې په جریان کې په اتوماتيک ډول سکیما سره ضمیمه کیږي. نیست شوي ساحې هم اضافه کیدی شي، او دوی به هم په جوړښت کې اړوندو ستنو سره ضمیمه شي.

د معلوماتو انجنیران او ساینس پوهان کولی شي د دې اختیار څخه کار واخلي ترڅو نوي ستنې (شاید پدې وروستیو کې تعقیب شوي میټریک یا د دې میاشتې لپاره د پلور ارقامو کالم) د دوی د موجوده ماشین زده کړې تولید جدولونو کې اضافه کړي پرته لدې چې د زړو ستنو پراساس موجوده ماډلونه مات کړي.

د جدول داخلولو یا بیا لیکلو پرمهال د سکیما ارتقاء د یوې برخې په توګه د سکیما لاندې ډولونو بدلونونو ته اجازه ورکول کیږي:

  • د نویو ستنو اضافه کول (دا تر ټولو عام سناریو ده)
  • د NullType -> کوم بل ډول څخه د معلوماتو ډولونه بدلول یا د ByteType -> ShortType -> IntegerType څخه ترویج کول

نور بدلونونه چې د سکیما ارتقاء کې اجازه نلري د سکیما او معلوماتو اضافه کولو سره د بیا لیکلو ته اړتیا لري .option("overwriteSchema", "true")د مثال په توګه، که چیرې د "Foo" کالم په اصل کې یو بشپړ عدد وي، او نوی سکیما د تار ډیټا ډول وي، نو بیا به د پارکیټ (ډاټا) ټولې فایلونه بیا لیکلو ته اړتیا ولري. دا ډول بدلونونه پدې کې شامل دي:

  • د ستون ړنګول
  • د موجوده ستون د معلوماتو ډول بدلول (په ځای کې)
  • د هغو ستنو نومونه بدلول چې یوازې په قضیه کې توپیر لري (د مثال په توګه "Foo" او "foo")

په پای کې، د راتلونکي نسخې سره، سپارک ۳.۰، واضح DDL (د ALTER TABLE په کارولو سره) به په بشپړ ډول ملاتړ شي، چې کاروونکو ته اجازه ورکوي چې د میز سکیما کې لاندې کړنې ترسره کړي:

  • د ستنو اضافه کول
  • د ستون تبصرې بدلول
  • د جدول د ځانګړتیاوو تنظیم کول چې دا ټاکي چې جدول څنګه چلند کوي، لکه د راکړې ورکړې د لاګ د ساتلو موده ټاکل.

د سکیما ارتقا ګټه څه ده؟

د سکیما ارتقاء هرکله کارول کیدی شي کله چې تاسو آیا تاسو اراده لرئ چې د خپل جدول سکیما بدل کړئ (د دې پر ځای چې په ناڅاپي ډول ستاسو ډیټا فریم ته هغه کالمونه اضافه کړئ چې باید هلته نه وي). دا ستاسو د سکیما د مهاجرت کولو ترټولو اسانه لاره ده ځکه چې دا په اتوماتيک ډول د کالم سم نومونه او د معلوماتو ډولونه اضافه کوي پرته لدې چې دوی په واضح ډول اعلان کړي.

پایلې

د سکیما تطبیق هر هغه نوي کالمونه یا نور سکیما بدلونونه ردوي چې ستاسو د میز سره مطابقت نلري. د دې لوړ معیارونو په ټاکلو او ساتلو سره، شنونکي او انجینران کولی شي ډاډه وي چې د دوی معلومات د بشپړتیا لوړه کچه لري، د هغې په اړه په روښانه او لنډ ډول استدلال کوي، دوی ته وړتیا ورکوي چې ډیر اغیزمن سوداګریز پریکړې وکړي.

له بلې خوا، د دې طرحې ارتقا د ساده کولو له لارې د تطبیق بشپړوي ادعا شوې اتوماتیک سکیما بدلیږي. بالاخره، د ستون اضافه کول باید دومره ستونزمن نه وي.

د سرکټ تطبیق د یانګ څخه تر سرکټ ارتقا ین دی. په ګډه کارول شوي، دا ځانګړتیاوې د شور فشار او د سیګنال ټونینګ تر بل هر وخت اسانه کوي.

موږ غواړو د مکول مورتي او پرانو آنند څخه هم مننه وکړو چې پدې مقاله کې یې ونډه اخیستې ده.

په دې لړۍ کې نورې مقالې:

د ډیلټا جهيل ته ننوتل: د راکړې ورکړې لاګ خلاصول

ویډیو پلی کړئ

اړونده مقالې

د ډیلټا لیک سره د تولید درجې ماشین زده کړه

د معلوماتو جهيل څه شی دی؟

د کورس په اړه نور معلومات ترلاسه کړئ

سرچینه: www.habr.com

Add a comment