ภูเขาน้ำแข็งอะปาเช่
| ภูเขาน้ำแข็งอะปาเช่ | |
|---|---|
| ผู้เขียนต้นฉบับ | ไรอัน บลู, แดเนียล วีคส์ |
| ปล่อย | 10 สิงหาคม 2560 |
| เวอร์ชันเสถียร | 1.10.0 / 11 กันยายน 2025 |
| เขียนเป็น | Java , Scala , Python |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| พิมพ์ | คลังข้อมูล , ทะเลสาบข้อมูล |
| ใบอนุญาต | ใบอนุญาต Apache 2.0 |
| เว็บไซต์ |
|
| ที่เก็บข้อมูล |
|
Apache Iceberg เป็นรูปแบบ โอเพนซอร์สประสิทธิภาพสูงสำหรับตารางวิเคราะห์ ขนาดใหญ่ Iceberg ช่วยให้สามารถใช้ ตาราง SQLสำหรับข้อมูลขนาดใหญ่ ในขณะเดียวกันก็ทำให้เอ็นจิ้นต่างๆ เช่นSpark , Trino , Flink , Presto , Hive , ImpalaและPigสามารถทำงานกับตารางเดียวกันได้อย่างปลอดภัยในเวลาเดียวกัน[ 1 ] Iceberg ได้รับการเผยแพร่ภายใต้Apache License [ 2 ] Iceberg แก้ไขปัญหาด้านประสิทธิภาพและความสามารถในการใช้งานของตาราง Apache Hive ในสภาพแวดล้อมดาต้าเลคขนาดใหญ่และมีความต้องการสูง Iceberg ได้รับการพัฒนาขึ้นครั้งแรกที่Netflixในปี 2017 เพื่อเอาชนะข้อจำกัดด้านความสามารถในการปรับขนาดและความสม่ำเสมอของ ตาราง Apache Hiveและได้บริจาคให้กับApache Software Foundationในปี 2018 โดยได้รับการยกระดับเป็นโครงการระดับสูงสุดของ Apache ในปี 2020 [ 3 ] [ 4 ] ผู้จำหน่ายที่สนับสนุนตาราง Apache Iceberg ได้แก่Cloudera , IBM Watsonx , Oracle , [ 5 ] Snowflake , Teradata , [ 6 ] AWS , [ 7 ] Google Cloud , [ 8 ]และDatabricks [ 9 ]
ประวัติศาสตร์
Iceberg เริ่มต้นขึ้นที่Netflixโดย Ryan Blue และ Dan Weeks Apache Hiveถูกใช้โดยบริการและกลไกต่างๆ มากมายในโครงสร้างพื้นฐานของ Netflix Hive ไม่สามารถรับประกันความถูกต้องและไม่ได้ให้ธุรกรรมอะตอมิกที่เสถียร[ 4 ]หลายคนใน Netflix หลีกเลี่ยงการใช้บริการเหล่านี้และทำการเปลี่ยนแปลงข้อมูลเพื่อหลีกเลี่ยงผลกระทบที่ไม่พึงประสงค์จากรูปแบบของ Hive [ 4 ] Ryan Blue ตั้งเป้าที่จะแก้ไขปัญหา 3 ประการที่ตาราง Hive เผชิญโดยการสร้าง Iceberg: [ 4 ] [ 10 ]
- ตรวจสอบความถูกต้องของข้อมูลและรองรับธุรกรรมACID
- ปรับปรุงประสิทธิภาพโดยการเปิดใช้งานการดำเนินการที่ละเอียดกว่าในระดับไฟล์ เพื่อการเขียนข้อมูลที่เหมาะสมที่สุด
- ลดความซับซ้อนและสรุปขั้นตอนการทำงานและการบำรุงรักษาตารางโดยทั่วไป
การพัฒนา Iceberg เริ่มขึ้นในปี 2017 [ 11 ]โครงการนี้เปิดเป็นโอเพนซอร์สและบริจาคให้กับมูลนิธิซอฟต์แวร์ Apacheในเดือนพฤศจิกายน 2018 [ 12 ]ในเดือนพฤษภาคม 2020 โครงการ Iceberg ได้รับการยกระดับให้เป็นโครงการระดับสูงสุดของ Apache [ 12 ]
Iceberg ถูกใช้โดยบริษัทหลายแห่งรวมถึง Airbnb [ 13 ] Apple [ 4 ] Expedia [ 14 ] LinkedIn [ 15 ] Adobe [ 16 ] Lyft [ 17 ]
รายละเอียดทางเทคนิค
Apache Iceberg ทำงานโดยแยกข้อมูลเมตาของตารางออกจากที่เก็บข้อมูลพื้นฐาน โดยจะรักษาไฟล์ข้อมูลเมตาที่ติดตามสแนปช็อต ข้อมูลสคีมา รูปแบบพาร์ติชัน และตำแหน่งไฟล์ข้อมูล ทำให้สามารถดำเนินการกับตารางได้อย่างมีประสิทธิภาพและเป็นอะตอม[ 18 ]
โดยทั่วไป Iceberg จะจัดระเบียบข้อมูลตารางเป็นสแนปช็อต แต่ละสแนปช็อตแสดงถึงสถานะของตาราง ณ จุดเวลาใดเวลาหนึ่ง ทำให้ Iceberg สามารถมอบ ความสามารถในการทำธุรกรรมที่สอดคล้อง กับ ACIDได้ รวมถึงการแยกสแนปช็อต การเขียนพร้อมกัน และฟังก์ชันการย้อนกลับ เมตาเดต้าของสแนปช็อตได้รับการจัดการเป็นโครงสร้างแบบต้นไม้ของไฟล์รายการและไฟล์เมตาเดต้าที่จัดเก็บไว้ภายในระบบไฟล์[ 19 ]
Iceberg ใช้ รูปแบบไฟล์ Apache Parquetสำหรับจัดเก็บข้อมูลจริงเนื่องจากโครงสร้างการจัดเก็บแบบคอลัมน์ที่มีประสิทธิภาพ ซึ่งได้รับการปรับให้เหมาะสมสำหรับการสืบค้นเชิงวิเคราะห์ ไฟล์ Parquet ใน Iceberg จัดเก็บแถวตารางในรูปแบบที่บีบอัดและเน้นคอลัมน์ ซึ่งช่วยลดต้นทุนการจัดเก็บและปรับปรุงประสิทธิภาพการอ่านอย่างมากผ่านเทคนิคต่างๆ เช่น การผลักดันเงื่อนไขและการตัดแต่งคอลัมน์ Iceberg อ้างอิงไฟล์ Parquet ในไฟล์ manifest ซึ่งช่วยให้ระบุและเข้าถึงข้อมูลที่เกี่ยวข้องได้อย่างรวดเร็วในระหว่างการดำเนินการสืบค้น[ 20 ]
Apache Iceberg ใช้ลำดับชั้นเมตาเดตาหลายระดับสำหรับการติดตามเนื้อหาของตาราง[ 21 ]ที่ด้านบนสุด ไฟล์เมตาเดตาของตาราง (มักจะเป็น metadata.json) จะจัดเก็บข้อมูลระดับตาราง เช่น สคีมา ข้อมูลจำเพาะของพาร์ติชัน รายการสแนปช็อต และตัวชี้ไปยังสแนปช็อต "รูท" ปัจจุบัน[ 22 ]สแนปช็อตแต่ละรายการแสดงถึงมุมมองที่สอดคล้องกันของตารางและเชื่อมโยงกับรายการไฟล์ Manifest ( ไฟล์ Avro ) ที่แสดงรายการไฟล์ Manifest ทั้งหมดสำหรับสแนปช็อตนั้น ไฟล์ Manifest คือดัชนีที่แสดงรายการชุดไฟล์ข้อมูล (เช่น ไฟล์ Parquet) พร้อมกับเมตาเดตาเกี่ยวกับแต่ละไฟล์ รวมถึงจำนวนแถว ค่าพาร์ติชัน และสถิติคอลัมน์ เช่น ค่าต่ำสุดและสูงสุด ไฟล์ Manifest เหล่านี้เป็นไฟล์เมตาเดตาขนาดเล็ก (มักอยู่ในรูปแบบ Avro) ที่แบ่งส่วนเมตาเดตาของตาราง ทำให้สามารถออกแบบแบบกระจายได้ โดยสามารถตัดไฟล์ Manifest ทั้งหมดออกได้เมื่อสอบถามตามพาร์ติชัน แทนที่จะต้องใช้ไฟล์ขนาดใหญ่ไฟล์เดียวที่แสดงรายการไฟล์ข้อมูลทั้งหมด ยิ่งไปกว่านั้น โครงสร้างเมตาเดต้าของ Iceberg ยังบันทึกประวัติการเปลี่ยนแปลงของตาราง โดยเก็บรักษาภาพรวมและรายการข้อมูลเก่าๆ (ทำให้สามารถย้อนเวลากลับไปได้) จนกว่าจะหมดอายุ และสามารถวางแผนการค้นหาได้อย่างรวดเร็วโดยการอ่านเฉพาะไฟล์รายการข้อมูลที่เกี่ยวข้อง แทนที่จะสแกนไฟล์ข้อมูลหรือไดเร็กทอรีทั้งหมด วิธีนี้ช่วยหลีกเลี่ยงการดำเนินการที่สิ้นเปลือง เช่น การแสดงรายการไดเร็กทอรี และทำให้การเข้าถึงเมตาเดต้ามีประสิทธิภาพแม้กับตารางขนาดใหญ่