ڈیلٹا لیک ڈائیو: نفاذ اور اسکیم ارتقاء

ارے حبر! مضمون کا ترجمہ آپ کی توجہ میں پیش کرتا ہوں۔ "ڈیلٹا جھیل میں غوطہ لگانا: اسکیما نفاذ اور ارتقاء" مصنفین Burak Yavuz، Brenner Heintz اور Denny Lee، جو کورس کے آغاز کی توقع میں تیار کیا گیا تھا۔ ڈیٹا انجینئر OTUS سے

ڈیلٹا لیک ڈائیو: نفاذ اور اسکیم ارتقاء

ڈیٹا، ہمارے تجربے کی طرح، مسلسل جمع اور تیار ہو رہا ہے۔ جاری رکھنے کے لیے، دنیا کے ہمارے ذہنی ماڈلز کو نئے اعداد و شمار کے مطابق ڈھالنا چاہیے، جن میں سے کچھ نئی جہتوں پر مشتمل ہیں — چیزوں کو دیکھنے کے نئے طریقے جن کے بارے میں ہمیں پہلے کوئی اندازہ نہیں تھا۔ یہ ذہنی ماڈل ٹیبل اسکیموں سے زیادہ مختلف نہیں ہیں جو اس بات کا تعین کرتے ہیں کہ ہم نئی معلومات کو کس طرح درجہ بندی اور پروسیس کرتے ہیں۔

یہ ہمیں اسکیما مینجمنٹ کے مسئلے پر لاتا ہے۔ جیسے جیسے کاروباری چیلنجز اور تقاضے وقت کے ساتھ بدلتے ہیں، اسی طرح آپ کے ڈیٹا کی ساخت بھی بدل جاتی ہے۔ ڈیلٹا جھیل ڈیٹا میں تبدیلی کے ساتھ نئی پیمائشیں متعارف کروانا آسان بناتی ہے۔ صارفین کو اپنے ٹیبل اسکیموں کو منظم کرنے کے لیے سادہ سیمنٹکس تک رسائی حاصل ہے۔ ان ٹولز میں اسکیما انفورسمنٹ شامل ہے، جو صارفین کو غلطیوں یا غیر ضروری ڈیٹا کے ساتھ ان کے ٹیبلز کو غیر ارادی طور پر آلودہ کرنے سے بچاتا ہے، اور اسکیما ایوولوشن، جو قیمتی ڈیٹا کے نئے کالموں کو مناسب جگہوں پر خودکار طور پر شامل کرنے کی اجازت دیتا ہے۔ اس مضمون میں، ہم ان ٹولز کو استعمال کرنے میں گہرائی میں ڈوبیں گے۔

ٹیبل اسکیموں کو سمجھنا

اپاچی اسپارک میں ہر ڈیٹا فریم میں ایک اسکیما ہوتا ہے جو ڈیٹا کی شکل کی وضاحت کرتا ہے، جیسے ڈیٹا کی اقسام، کالم اور میٹا ڈیٹا۔ ڈیلٹا لیک کے ساتھ، ٹیبل سکیما JSON فارمیٹ میں ٹرانزیکشن لاگ کے اندر محفوظ کیا جاتا ہے۔

اسکیم کا نفاذ کیا ہے؟

اسکیما انفورسمنٹ، جسے اسکیما توثیق کے نام سے بھی جانا جاتا ہے، ڈیلٹا جھیل میں ایک حفاظتی طریقہ کار ہے جو ٹیبل کے اسکیما سے مماثل نہ ہونے والے ریکارڈ کو مسترد کرکے ڈیٹا کے معیار کو یقینی بناتا ہے۔ صرف ریزرویشن والے ایک مشہور ریستوراں کی فرنٹ ڈیسک پر موجود ہوسٹس کی طرح، وہ چیک کرتی ہے کہ آیا ٹیبل میں درج ڈیٹا کا ہر کالم متوقع کالموں کی متعلقہ فہرست میں ہے یا نہیں (دوسرے لفظوں میں، آیا ان میں سے ہر ایک کے لیے "ریزرویشن" موجود ہے۔ )، اور کالموں والے کسی بھی ریکارڈ کو مسترد کرتا ہے جو فہرست میں نہیں ہیں۔

اسکیما کا نفاذ کیسے کام کرتا ہے؟

ڈیلٹا لیک اسکیما آن رائٹ چیکنگ کا استعمال کرتی ہے، جس کا مطلب ہے کہ ٹیبل پر تمام نئی تحریریں لکھنے کے وقت ہدف ٹیبل کے اسکیما کے ساتھ مطابقت کے لیے چیک کی جاتی ہیں۔ اگر اسکیما متضاد ہے تو، ڈیلٹا لیک ٹرانزیکشن کو مکمل طور پر ختم کر دیتا ہے (کوئی ڈیٹا نہیں لکھا جاتا) اور صارف کو عدم مطابقت کے بارے میں مطلع کرنے کے لیے ایک استثنا پیدا کرتا ہے۔
ڈیلٹا لیک درج ذیل اصولوں کا استعمال اس بات کا تعین کرنے کے لیے کرتی ہے کہ آیا کوئی ریکارڈ میز کے ساتھ مطابقت رکھتا ہے۔ قابل تحریر ڈیٹا فریم:

  • اضافی کالم پر مشتمل نہیں ہو سکتا جو ٹارگٹ ٹیبل کے سکیما میں نہیں ہیں۔ اس کے برعکس، سب کچھ ٹھیک ہے اگر آنے والے ڈیٹا میں ٹیبل کے بالکل تمام کالم شامل نہ ہوں - ان کالموں کو صرف null قدریں تفویض کی جائیں گی۔
  • کالم ڈیٹا کی قسمیں نہیں ہوسکتی ہیں جو ٹارگٹ ٹیبل میں کالم کے ڈیٹا کی اقسام سے مختلف ہیں۔ اگر ٹارگٹ ٹیبل کالم StringType ڈیٹا پر مشتمل ہے، لیکن DataFrame میں متعلقہ کالم IntegerType ڈیٹا پر مشتمل ہے، تو اسکیما انفورسمنٹ ایک استثنا دے گا اور تحریری کارروائی کو ہونے سے روکے گا۔
  • کالم کے ناموں پر مشتمل نہیں ہو سکتا جو صرف صورت میں مختلف ہوں۔ اس کا مطلب ہے کہ آپ ایک ہی ٹیبل میں 'فو' اور 'فو' نامی کالم نہیں رکھ سکتے۔ جب کہ اسپارک کو کیس حساس یا کیس غیر حساس (پہلے سے طے شدہ) موڈ میں استعمال کیا جا سکتا ہے، ڈیلٹا لیک کیس کو محفوظ کرنے والی ہے لیکن اسکیما اسٹوریج میں غیر حساس ہے۔ کالم کی معلومات کو ذخیرہ کرنے اور واپس کرتے وقت پارکیٹ کیس حساس ہوتا ہے۔ ممکنہ غلطیوں، ڈیٹا کی بدعنوانی، یا ڈیٹا کے نقصان سے بچنے کے لیے (جس کا ہم نے ذاتی طور پر ڈیٹا برکس میں تجربہ کیا ہے)، ہم نے اس حد کو شامل کرنے کا فیصلہ کیا۔

اس کی وضاحت کرنے کے لیے، آئیے ایک نظر ڈالتے ہیں کہ نیچے دیے گئے کوڈ میں کیا ہوتا ہے جب ہم ڈیلٹا لیک ٹیبل میں کچھ نئے تخلیق کردہ کالموں کو شامل کرنے کی کوشش کرتے ہیں جو ابھی تک ان کو قبول کرنے کے لیے ترتیب نہیں دی گئی ہے۔

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

خود بخود نئے کالم شامل کرنے کے بجائے، ڈیلٹا لیک ایک اسکیما لگاتی ہے اور لکھنا بند کردیتی ہے۔ اس بات کا تعین کرنے میں مدد کرنے کے لیے کہ کون سا کالم (یا کالموں کا سیٹ) تفاوت کا سبب بن رہا ہے، Spark موازنہ کے لیے اسٹیک ٹریس سے دونوں اسکیموں کو آؤٹ پٹ کرتا ہے۔

اسکیما کو نافذ کرنے کا کیا فائدہ ہے؟

چونکہ اسکیما کا نفاذ کافی سخت چیک ہے، یہ ایک صاف ستھرا، مکمل طور پر تبدیل شدہ ڈیٹا سیٹ کے لیے گیٹ کیپر کے طور پر استعمال کرنے کا ایک بہترین ٹول ہے جو کہ پیداوار یا استعمال کے لیے تیار ہے۔ عام طور پر ان میزوں پر لاگو ہوتا ہے جو ڈیٹا کو براہ راست فیڈ کرتے ہیں:

  • مشین لرننگ الگورتھم
  • BI ڈیش بورڈز
  • ڈیٹا اینالیٹکس اور ویژولائزیشن ٹولز
  • کوئی بھی پیداواری نظام جس کے لیے انتہائی ساختہ، مضبوطی سے ٹائپ شدہ سیمنٹک اسکیموں کی ضرورت ہوتی ہے۔

اس آخری رکاوٹ کے لیے اپنا ڈیٹا تیار کرنے کے لیے، بہت سے صارفین ایک سادہ "ملٹی ہاپ" فن تعمیر کا استعمال کرتے ہیں جو آہستہ آہستہ ان کی میزوں میں ساخت کو متعارف کراتا ہے۔ اس کے بارے میں مزید جاننے کے لیے، آپ مضمون کو دیکھ سکتے ہیں۔ ڈیلٹا لیک کے ساتھ پروڈکشن گریڈ مشین لرننگ۔

بلاشبہ، اسکیما انفورسمنٹ کو آپ کی پائپ لائن میں کہیں بھی استعمال کیا جا سکتا ہے، لیکن یاد رکھیں کہ اس معاملے میں ٹیبل پر اسٹریم کرنا مایوس کن ہو سکتا ہے کیونکہ، مثال کے طور پر، آپ بھول گئے کہ آپ نے آنے والے ڈیٹا میں ایک اور کالم شامل کیا ہے۔

ڈیٹا کی کمی کو روکنا

اب تک آپ سوچ رہے ہوں گے کہ یہ سب ہنگامہ کیا ہے؟ بہر حال، بعض اوقات ایک غیر متوقع "اسکیما مماثلت" کی خرابی آپ کو آپ کے ورک فلو میں ٹرپ کر سکتی ہے، خاص طور پر اگر آپ ڈیلٹا لیک میں نئے ہیں۔ کیوں نہ صرف اسکیما کو ضرورت کے مطابق تبدیل کرنے دیا جائے تاکہ میں اپنا ڈیٹا فریم لکھ سکوں چاہے کچھ بھی ہو؟

جیسا کہ پرانی کہاوت ہے، "روک تھام کا ایک آونس ایک پاؤنڈ علاج کے قابل ہے۔" کسی وقت، اگر آپ اپنی اسکیما کو نافذ کرنے کا خیال نہیں رکھتے ہیں، تو ڈیٹا کی قسم کی مطابقت کے مسائل ان کے بدصورت سروں کو پیچھے چھوڑ دیں گے - بظاہر یکساں خام ڈیٹا کے ذرائع میں کنارے کے کیسز، خراب کالم، خراب نقشہ جات، یا دیگر خوفناک چیزیں شامل ہو سکتی ہیں جن کے بارے میں خواب دیکھنا ہے۔ ڈراؤنے خواب بہترین طریقہ یہ ہے کہ ان دشمنوں کو گیٹ پر روکا جائے - اسکیما کے نفاذ کے ساتھ - اور ان کے ساتھ روشنی میں نمٹا جائے، بجائے اس کے کہ بعد میں جب وہ آپ کے پروڈکشن کوڈ کی تاریک گہرائیوں میں چھپنا شروع کر دیں۔

اسکیما کو نافذ کرنے سے آپ کو یہ یقین دہانی ملتی ہے کہ آپ کے ٹیبل کا اسکیما تب تک تبدیل نہیں ہوگا جب تک آپ اس تبدیلی کو منظور نہیں کرتے ہیں۔ یہ ڈیٹا کی کمی کو روکتا ہے، جو اس وقت ہو سکتا ہے جب نئے کالم اتنی کثرت سے شامل کیے جاتے ہیں کہ پہلے کی قیمتی، کمپریسڈ ٹیبلز ڈیٹا ڈوبنے کی وجہ سے اپنا معنی اور افادیت کھو دیتے ہیں۔ آپ کو جان بوجھ کر، اعلیٰ معیار قائم کرنے، اور اعلیٰ معیار کی توقع کرنے کی ترغیب دے کر، سکیما کا نفاذ بالکل وہی کرتا ہے جو اسے کرنے کے لیے ڈیزائن کیا گیا تھا — آپ کو باضمیر رہنے اور آپ کی اسپریڈ شیٹس کو صاف رکھنے میں مدد ملتی ہے۔

اگر مزید غور کرنے پر آپ فیصلہ کرتے ہیں کہ آپ واقعی کرنے کی ضرورت ہے ایک نیا کالم شامل کریں - کوئی مسئلہ نہیں، ذیل میں ایک لائن فکس ہے۔ حل سرکٹ کا ارتقاء ہے!

اسکیما ارتقاء کیا ہے؟

سکیما ارتقاء ایک خصوصیت ہے جو صارفین کو موجودہ ٹیبل سکیما کو وقت کے ساتھ تبدیل ہونے والے ڈیٹا کے مطابق آسانی سے تبدیل کرنے کی اجازت دیتی ہے۔ یہ اکثر اس وقت استعمال ہوتا ہے جب ایک یا زیادہ نئے کالموں کو شامل کرنے کے لیے اسکیما کو خود بخود ڈھالنے کے لیے ضمیمہ یا دوبارہ لکھنے کا عمل انجام دیا جاتا ہے۔

سکیما ارتقاء کیسے کام کرتا ہے؟

پچھلے حصے کی مثال کے بعد، ڈویلپرز آسانی سے اسکیما ارتقاء کا استعمال کرکے نئے کالم شامل کرسکتے ہیں جو پہلے اسکیما کی عدم مطابقت کی وجہ سے مسترد کردیئے گئے تھے۔ سرکٹ ارتقاء کو شامل کرکے چالو کیا جاتا ہے۔ .option('mergeSchema', 'true') آپ کی اسپارک ٹیم کو .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.databricks.delta.schema.autoMerge = True چنگاری کی ترتیب میں۔ لیکن اسے احتیاط کے ساتھ استعمال کریں، کیونکہ اسکیما نافذ کرنے والا آپ کو غیر ارادی اسکیما کی عدم مطابقتوں سے مزید آگاہ نہیں کرے گا۔

درخواست میں پیرامیٹر شامل کرکے mergeSchema, تمام کالم جو ڈیٹا فریم میں موجود ہیں لیکن ٹارگٹ ٹیبل میں نہیں ہیں خود بخود اسکیما کے آخر میں تحریری لین دین کے حصے کے طور پر شامل ہو جاتے ہیں۔ نیسٹڈ فیلڈز کو بھی شامل کیا جا سکتا ہے اور ان کو متعلقہ ڈھانچے کے کالموں کے آخر میں بھی شامل کیا جائے گا۔

ڈیٹ انجینئرز اور ڈیٹا سائنس دان اس اختیار کا استعمال پرانے کالموں کی بنیاد پر موجودہ ماڈلز کو توڑے بغیر اپنے موجودہ مشین لرننگ پروڈکشن ٹیبلز میں نئے کالمز (شاید حال ہی میں ٹریک کیا گیا میٹرک یا اس ماہ کا سیلز پرفارمنس کالم) شامل کرنے کے لیے کر سکتے ہیں۔

ٹیبل کے اضافے یا دوبارہ لکھنے کے دوران سکیما ارتقاء کے حصے کے طور پر درج ذیل قسم کی سکیما تبدیلیوں کی اجازت ہے۔

  • نئے کالم شامل کرنا (یہ سب سے عام منظر ہے)
  • NullType -> کسی دوسری قسم سے ڈیٹا کی قسموں کو تبدیل کرنا یا ByteType -> ShortType -> IntegerType سے فروغ دینا

اسکیما ارتقاء کے اندر دیگر تبدیلیوں کی اجازت نہیں ہے جس کی ضرورت ہے کہ اسکیما اور ڈیٹا کو شامل کرکے دوبارہ لکھا جائے۔ .option("overwriteSchema", "true"). مثال کے طور پر، اس صورت میں جہاں کالم "Foo" اصل میں ایک عدد تھا اور نیا اسکیما سٹرنگ ڈیٹا کی قسم تھی، تو تمام Parquet(data) فائلوں کو دوبارہ لکھنے کی ضرورت ہوگی۔ اس طرح کی تبدیلیوں میں شامل ہیں:

  • کالم کو حذف کرنا
  • موجودہ کالم کے ڈیٹا کی قسم کو تبدیل کرنا (جگہ میں)
  • کالموں کا نام تبدیل کرنا جو صرف صورت میں مختلف ہوں (مثال کے طور پر، "Foo" اور "foo")

آخر میں، Spark 3.0 کی اگلی ریلیز کے ساتھ، واضح DDL کو مکمل طور پر سپورٹ کیا جائے گا (ALTER TABLE کا استعمال کرتے ہوئے)، صارفین کو ٹیبل اسکیموں پر درج ذیل اعمال انجام دینے کی اجازت دی جائے گی:

  • کالم شامل کرنا
  • کالم کے تبصرے تبدیل کرنا
  • ٹیبل کی خصوصیات کو ترتیب دینا جو ٹیبل کے رویے کو کنٹرول کرتی ہے، جیسے کہ لین دین کے لاگ کو ذخیرہ کرنے کے وقت کا تعین کرنا۔

سرکٹ ارتقاء کا کیا فائدہ ہے؟

جب بھی آپ اسکیما ارتقاء استعمال کرسکتے ہیں۔ ارادہ اپنے ٹیبل کا اسکیما تبدیل کریں (اس کے برعکس جب آپ نے غلطی سے اپنے ڈیٹا فریم میں کالم شامل کیے جو وہاں نہیں ہونے چاہئیں)۔ یہ آپ کے اسکیما کو منتقل کرنے کا سب سے آسان طریقہ ہے کیونکہ یہ خود بخود درست کالم کے نام اور ڈیٹا کی اقسام کو واضح طور پر اعلان کیے بغیر شامل کر دیتا ہے۔

حاصل يہ ہوا

اسکیما انفورسمنٹ کسی بھی نئے کالم یا اسکیما کی دیگر تبدیلیوں کو مسترد کرتی ہے جو آپ کے ٹیبل کے ساتھ مطابقت نہیں رکھتی ہیں۔ ان اعلیٰ معیارات کو ترتیب دینے اور برقرار رکھنے سے، تجزیہ کار اور انجینئر اس بات پر بھروسہ کر سکتے ہیں کہ ان کے ڈیٹا میں اعلیٰ سطح کی سالمیت ہے، یہ واضح اور واضح طور پر بات چیت کرتے ہوئے انہیں بہتر کاروباری فیصلے کرنے کی اجازت دیتا ہے۔

دوسری طرف، اسکیما ارتقاء کو آسان بنا کر نفاذ کی تکمیل کرتا ہے۔ الزام لگایا خودکار اسکیما تبدیلیاں۔ آخر کار، کالم شامل کرنا مشکل نہیں ہونا چاہیے۔

اسکیم کا جبری اطلاق یانگ ہے، جہاں اسکیم کا ارتقاء ین ہے۔ جب ایک ساتھ استعمال کیا جائے تو یہ خصوصیات شور کو دبانے اور سگنل ٹیوننگ کو پہلے سے کہیں زیادہ آسان بنا دیتی ہیں۔

ہم اس مضمون میں تعاون کے لیے مکل مورتی اور پرناو آنند کا بھی شکریہ ادا کرنا چاہیں گے۔

اس سلسلے کے دیگر مضامین:

ڈیلٹا جھیل میں غوطہ لگانا: ٹرانزیکشن لاگ کو کھولنا

متعلقہ مضامین

ڈیلٹا لیک کے ساتھ پروڈکشن گریڈ مشین لرننگ

ڈیٹا لیک کیا ہے؟

کورس کے بارے میں مزید معلومات حاصل کریں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں