ڊيلٽا ڍنڍ ۾ ڊيو: اسڪيما نافذ ڪرڻ ۽ ارتقاء

اي حبر! مان توهان جي ڌيان ۾ مضمون جو ترجمو پيش ڪريان ٿو "ڊيلٽا ڍنڍ ۾ ڊائيونگ: اسڪيما نافذ ڪرڻ ۽ ارتقاء" ليکڪ برڪ يووز، برنر هينٽز ۽ ڊيني لي، جيڪو ڪورس جي شروعات جي توقع ۾ تيار ڪيو ويو هو. ڊيٽا انجنيئر OTUS کان.

ڊيلٽا ڍنڍ ۾ ڊيو: اسڪيما نافذ ڪرڻ ۽ ارتقاء

ڊيٽا، اسان جي تجربي وانگر، مسلسل جمع ۽ ترقي ڪري رهيو آهي. جاري رکڻ لاءِ، دنيا جي اسان جي ذهني ماڊلز کي نئين ڊيٽا سان مطابقت پيدا ڪرڻ گهرجي، جن مان ڪجهه نوان طول و عرض تي مشتمل آهن- شين کي ڏسڻ جا نوان طريقا جن بابت اسان کي اڳي ڪا به خبر نه هئي. اهي ذهني ماڊل ٽيبل اسڪيمن کان گهڻو مختلف نه آهن جيڪي اهو طئي ڪن ٿا ته اسان نئين معلومات کي ڪيئن درجه بندي ۽ پروسيس ڪريون ٿا.

هي اسان کي اسڪيما انتظام جي مسئلي ڏانهن آڻيندو آهي. جيئن ته ڪاروباري چئلينج ۽ گهرجون وقت سان تبديل ٿيندا آهن، تنهنڪري توهان جي ڊيٽا جي جوڙجڪ. ڊيلٽا ڍنڍ ڊيٽا جي تبديلين جي طور تي نئين ماپن کي متعارف ڪرائڻ آسان بڻائي ٿي. صارفين کي انهن جي ٽيبل اسڪيمن کي منظم ڪرڻ لاء سادي سيمينٽڪس تائين رسائي آهي. انهن اوزارن ۾ اسڪيما انفورسمينٽ شامل آهي، جيڪو صارفين کي غير ارادي طور تي انهن جي ٽيبلن کي غلطين يا غير ضروري ڊيٽا سان آلودگي کان بچائيندو آهي، ۽ اسڪيما ارتقا، جيڪا اجازت ڏئي ٿي قيمتي ڊيٽا جا نوان ڪالمن پاڻمرادو مناسب هنڌن تي شامل ڪرڻ جي. هن مقالي ۾، اسان انهن اوزارن کي استعمال ڪرڻ ۾ تمام گهڻي ڳڻي ڪنداسين.

ٽيبل اسڪيمن کي سمجھڻ

Apache Spark ۾ هر DataFrame هڪ اسڪيما تي مشتمل آهي جيڪا ڊيٽا جي شڪل کي بيان ڪري ٿي، جهڙوڪ ڊيٽا جا قسم، ڪالمن، ۽ ميٽا ڊيٽا. ڊيلٽا ڍنڍ سان، ٽيبل اسڪيما JSON فارميٽ ۾ ٽرانزيڪشن لاگ اندر محفوظ ٿيل آهي.

اسڪيم لاڳو ڪرڻ ڇا آهي؟

اسڪيما انفورسمينٽ، جنهن کي اسڪيما جي تصديق جي نالي سان پڻ سڃاتو وڃي ٿو، ڊيلٽا ڍنڍ ۾ هڪ حفاظتي ميکانيزم آهي، جيڪا ڊيٽا جي معيار کي يقيني بڻائي ٿي رڪارڊ کي رد ڪندي جيڪي ٽيبل جي اسڪيما سان نه ٿا ملن. صرف هڪ مشهور رزرويشن ريسٽورنٽ جي فرنٽ ڊيسڪ تي ميزبان وانگر، هوءَ چيڪ ڪري ٿي ته ڇا ٽيبل ۾ داخل ڪيل ڊيٽا جو هر ڪالم متوقع ڪالمن جي لاڳاپيل فهرست ۾ آهي (ٻين لفظن ۾، ڇا انهن مان هر هڪ لاءِ ”رزرويشن“ آهي. )، ۽ ڪالمن سان ڪنهن به رڪارڊ کي رد ڪري ٿو جيڪي فهرست ۾ نه آهن.

اسڪيما نافذ ڪرڻ وارو ڪم ڪيئن آهي؟

ڊيلٽا ڍنڍ اسڪيما-آن-لکڻ جي چڪاس استعمال ڪري ٿي، جنهن جو مطلب آهي ته ٽيبل تي سڀ نيون لکڻيون لکڻ جي وقت ٽارگيٽ ٽيبل جي اسڪيما سان مطابقت لاءِ چيڪ ڪيون وينديون آهن. جيڪڏهن اسڪيما متضاد آهي، ڊيلٽا ڍنڍ ٽرانزيڪشن کي مڪمل طور تي ختم ڪري ٿو (ڪو به ڊيٽا نه لکيو ويو آهي) ۽ غير مطابقت جي صارف کي مطلع ڪرڻ لاء هڪ استثنا پيدا ڪري ٿو.
ڊيلٽا ڍنڍ هيٺ ڏنل قاعدن کي استعمال ڪندي اهو طئي ڪرڻ لاءِ ته ڇا رڪارڊ ٽيبل سان مطابقت رکي ٿو. لکڻ جي قابل ڊيٽا فريم:

  • اضافي ڪالمن تي مشتمل نه ٿي سگھي جيڪي ٽارگيٽ ٽيبل جي اسڪيما ۾ نه آھن. برعڪس، سڀ ڪجھ ٺيڪ آهي جيڪڏهن ايندڙ ڊيٽا ۾ ٽيبل مان بلڪل سڀئي ڪالمن شامل نه آهن - انهن ڪالمن کي صرف null قدر مقرر ڪيو ويندو.
  • ڪالمن جي ڊيٽا جا قسم نٿا ٿي سگهن جيڪي ٽارگيٽ ٽيبل ۾ ڪالمن جي ڊيٽا جي قسمن کان مختلف آهن. جيڪڏهن ٽارگيٽ ٽيبل ڪالمن ۾ StringType ڊيٽا شامل آهي، پر DataFrame ۾ لاڳاپيل ڪالمن ۾ IntegerType ڊيٽا شامل آهي، اسڪيما لاڳو ڪندڙ هڪ استثنا اڇلائي ڇڏيندو ۽ لکڻ جي عمل کي ٿيڻ کان روڪيندو.
  • ڪالمن جا نالا شامل نه ٿي سگھن جيڪي صرف صورت ۾ مختلف آھن. ان جو مطلب اهو آهي ته توهان هڪ ئي ٽيبل ۾ 'فو' ۽ 'فو' نالي ڪالمن جي وضاحت نٿا ڪري سگهو. جڏهن ته اسپارڪ کي ڪيس-حساس يا ڪيس-حساس (ڊفالٽ) موڊ ۾ استعمال ڪري سگهجي ٿو، ڊيلٽا ڍنڍ ڪيس-محفوظ آهي پر اسڪيما اسٽوريج ۾ غير حساس آهي. ڪالمن جي معلومات کي محفوظ ڪرڻ ۽ واپس ڪرڻ وقت پارڪٽ ڪيس حساس هوندو آهي. ممڪن غلطين، ڊيٽا ڪرپشن، يا ڊيٽا جي نقصان کان بچڻ لاءِ (جيڪو اسان ذاتي طور تي Databricks تي تجربو ڪيو آهي)، اسان هن حد کي شامل ڪرڻ جو فيصلو ڪيو.

هن کي واضع ڪرڻ لاءِ، اچو ته هڪ نظر وجهون ته هيٺ ڏنل ڪوڊ ۾ ڇا ٿئي ٿو جڏهن اسان ڪوشش ڪريون ٿا ته ڪجهه نوان ٺاهيل ڪالمن کي ڊيلٽا ڍنڍ جي ٽيبل تي شامل ڪريو جيڪي اڃا تائين انهن کي قبول ڪرڻ لاءِ ترتيب ڏنل نه آهن.

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

گراف کي ڏسڻ لاءِ، ھيٺ ڏنل 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, سڀئي ڪالمن جيڪي ڊيٽا فريم ۾ موجود آهن پر ٽارگيٽ ٽيبل ۾ نه آهن خودڪار طور تي شامل ڪيا ويا آهن اسڪيما جي آخر ۾ لکڻ جي ٽرانزيڪشن جي حصي طور. Nested fields پڻ شامل ڪري سگھجن ٿا ۽ اھي پڻ لاڳاپيل ڍانچي جي ڪالمن جي آخر ۾ شامل ڪيا ويندا.

تاريخ جا انجنيئر ۽ ڊيٽا سائنسدان هي اختيار استعمال ڪري سگھن ٿا نوان ڪالمن شامل ڪرڻ لاءِ (شايد تازو ٽريڪ ٿيل ميٽرڪ يا هن مهيني جي سيلز پرفارمنس ڪالمن) انهن جي موجوده مشين لرننگ پروڊڪشن جدولن ۾ پراڻن ڪالمن جي بنياد تي موجوده ماڊل کي ٽوڙڻ کان سواءِ.

هيٺ ڏنل قسم جي اسڪيما تبديلين کي اجازت ڏني وئي آهي اسڪيما ارتقاء جي حصي جي طور تي ٽيبل جي اضافي يا ٻيهر لکڻ دوران:

  • نون ڪالمن کي شامل ڪرڻ (هي سڀ کان عام منظر آهي)
  • NullType مان ڊيٽا جي قسمن کي تبديل ڪرڻ -> ڪنهن ٻئي قسم يا ByteType مان واڌاري -> مختصر ٽائپ -> IntegerType

ٻين تبديلين جي اجازت نه آهي اسڪيما ارتقاء جي اندر جي ضرورت آهي ته اسڪيما ۽ ڊيٽا کي شامل ڪندي ٻيهر لکجي .option("overwriteSchema", "true"). مثال طور، ان صورت ۾ جتي ڪالم "Foo" اصل ۾ هڪ انٽيجر هو ۽ نئين اسڪيما هڪ اسٽرنگ ڊيٽا جو قسم هو، ته پوءِ سڀني Parquet(data) فائلن کي ٻيهر لکڻ جي ضرورت پوندي. اهڙيون تبديليون شامل آهن:

  • ڪالمن کي ختم ڪرڻ
  • موجوده ڪالمن جي ڊيٽا جي قسم کي تبديل ڪرڻ (جڳ ۾)
  • ڪالمن جو نالو تبديل ڪرڻ جيڪي صرف صورت ۾ مختلف آهن (مثال طور، "فو" ۽ "فو")

آخرڪار، Spark 3.0 جي ايندڙ رليز سان، واضح DDL مڪمل طور تي سپورٽ ڪئي ويندي (ALTER TABLE استعمال ڪندي)، صارفين کي ٽيبل اسڪيمن تي هيٺيان عمل ڪرڻ جي اجازت ڏئي ٿي:

  • ڪالمن شامل ڪرڻ
  • ڪالم تبصرا تبديل ڪرڻ
  • سيٽنگ ٽيبل جا خاصيتون جيڪي ٽيبل جي رويي کي سنڀاليندا آهن، جهڙوڪ ٽرانزيڪشن لاگ محفوظ ٿيل وقت جي ڊيگهه کي ترتيب ڏيڻ.

سرڪٽ جي ارتقا جو فائدو ڇا آهي؟

اسڪيما ارتقاء استعمال ڪري سگهجي ٿو جڏهن توهان ارادو ڪرڻ پنھنجي ٽيبل جي اسڪيما کي تبديل ڪريو (جڏھن توھان غلطيءَ سان پنھنجي DataFrame ۾ ڪالم شامل ڪيا آھن جيڪي اتي نه ھجن). هي توهان جي اسڪيما کي منتقل ڪرڻ جو آسان طريقو آهي ڇو ته اهو خودڪار طور تي صحيح ڪالمن جا نالا ۽ ڊيٽا جي قسمن کي شامل ڪري ٿو بغير واضح طور تي بيان ڪرڻ جي.

ٿڪل

اسڪيما لاڳو ڪندڙ ڪنهن به نئين ڪالمن يا ٻين اسڪيما تبديلين کي رد ڪري ٿو جيڪي توهان جي ٽيبل سان مطابقت نه رکن ٿيون. انهن اعلي معيارن کي ترتيب ڏيڻ ۽ برقرار رکڻ سان، تجزيه نگار ۽ انجنيئر ڀروسو ڪري سگهن ٿا ته انهن جي ڊيٽا ۾ اعليٰ سطحي سالميت آهي، ان کي صاف ۽ واضح طور تي گفتگو ڪندي، انهن کي بهتر ڪاروباري فيصلا ڪرڻ جي اجازت ڏئي ٿي.

ٻئي طرف، اسڪيما ارتقاء کي لاڳو ڪرڻ کي آسان بڻائي ٿو الزام خودڪار اسڪيما تبديليون. آخرڪار، ڪالم شامل ڪرڻ ڏکيو نه هجڻ گهرجي.

اسڪيم جي زبردستي درخواست يانگ آهي، جتي اسڪيم جي ارتقا ين آهي. جڏهن گڏجي استعمال ڪيو وڃي، اهي خاصيتون شور دٻائڻ ۽ سگنل ٽيوننگ کي هميشه کان وڌيڪ آسان بڻائي ٿو.

اسان کي به شڪريو ڪرڻ چاهيون ٿا مکول مورتي ۽ پرانو آنند جي هن مضمون ۾ سندن تعاون لاءِ.

هن سلسلي ۾ ٻيا مضمون:

ڊيلٽا ڍنڍ ۾ ٽپو: ٽرانزيڪشن لاگ ان پيڪنگ

موضوع تي مضمون

ڊيلٽا ڍنڍ سان پيداوار-گريڊ مشين سکيا

ڊيٽا ڍنڍ ڇا آهي؟

ڪورس بابت وڌيڪ ڄاڻو

جو ذريعو: www.habr.com

تبصرو شامل ڪريو