ทําความเข้าใจเกี่ยวกับที่เก็บข้อมูลสําหรับแบบจําลองความหมาย Direct Lake
บทความนี้แนะนําแนวคิดการจัดเก็บ Direct Lake ซึ่งอธิบายตาราง Delta และไฟล์ Parquet นอกจากนี้ยังอธิบายวิธีที่คุณสามารถปรับตาราง Delta ให้เหมาะสมสําหรับแบบจําลองความหมาย Direct Lake และวิธีที่คุณสามารถบํารุงรักษาเพื่อช่วยส่งมอบประสิทธิภาพการคิวรีที่เชื่อถือได้และรวดเร็ว
ตาราง Delta
มีตาราง Delta อยู่ใน OneLake พวกเขาจัดระเบียบข้อมูลตามไฟล์เป็นแถวและคอลัมน์และพร้อมใช้งานสําหรับเครื่องคํานวณ Microsoft Fabric เช่นสมุดบันทึก Kustoและ ของเลคเฮ้าส์ และ คลังสินค้า คุณสามารถคิวรีตาราง Delta ได้โดยใช้ Data Analysis Expressions (DAX), Multidimensional Expressions (MDX), T-SQL (Transact-SQL), Spark SQL และแม้แต่ Python
โน้ต
Delta—หรือ Delta Lake—เป็นรูปแบบพื้นที่จัดเก็บข้อมูลโอเพนซอร์ส ซึ่งหมายความว่า Fabric ยังสามารถคิวรีตาราง Delta ที่สร้างขึ้นโดยเครื่องมือและผู้ขายรายอื่นได้
ตาราง Delta จัดเก็บข้อมูลของพวกเขาในไฟล์ Parquet ซึ่งโดยทั่วไปแล้วจะถูกจัดเก็บไว้ใน lakehouse ที่แบบจําลองความหมาย Direct Lake ใช้เพื่อโหลดข้อมูล อย่างไรก็ตามไฟล์ Parquet ยังสามารถจัดเก็บภายนอกได้ ไฟล์ Parquet ภายนอกสามารถอ้างอิงได้โดยใช้ทางลัด OneLakeซึ่งชี้ไปยังตําแหน่งที่เก็บข้อมูลเฉพาะ เช่น Azure Data Lake Storage (ADLS) Gen2บัญชีที่เก็บข้อมูล Amazon S3 หรือ Dataverse ในเกือบทุกกรณี กลไกการคํานวณจะเข้าถึงไฟล์ Parquet โดยการคิวรีตาราง Delta อย่างไรก็ตาม โดยทั่วไปแล้วแบบจําลองความหมาย Direct Lake จะโหลดข้อมูลคอลัมน์โดยตรงจากไฟล์ Parquet ที่ปรับให้เหมาะสมใน OneLake โดยใช้กระบวนการที่เรียกว่า การแปลงรหัส
การกําหนดรุ่นข้อมูล
ตาราง Delta ประกอบด้วยไฟล์ Parquet อย่างน้อยหนึ่งไฟล์ ไฟล์เหล่านี้จะมาพร้อมกับชุดของไฟล์ลิงก์ที่ใช้ JSON ซึ่งติดตามลําดับและลักษณะของไฟล์ Parquet แต่ละรายการที่เชื่อมโยงกับตาราง Delta
สิ่งสําคัญคือต้องเข้าใจว่าไฟล์ Parquet พื้นฐานนั้นเป็นไฟล์แบบเพิ่มหน่วย ดังนั้นชื่อ Delta เป็นการอ้างอิงถึงการปรับเปลี่ยนข้อมูลแบบเพิ่มหน่วย ทุกครั้งที่มีการดําเนินการเขียนไปยังตาราง Delta เช่น เมื่อมีการแทรก ปรับปรุง หรือลบข้อมูลใหม่ ไฟล์ Parquet ใหม่จะถูกสร้างขึ้นซึ่งแสดงการแก้ไขข้อมูลเป็นเวอร์ชัน ไฟล์ Parquet จึง ที่ไม่สามารถเปลี่ยนแปลงได้หมายความว่าจะไม่มีการแก้ไข ดังนั้นจึงเป็นไปได้สําหรับข้อมูลที่จะทําซ้ําหลายครั้งในชุดของไฟล์ Parquet สําหรับตาราง Delta เฟรมเวิร์ก Delta อาศัยไฟล์ลิงก์เพื่อกําหนดไฟล์ Parquet จริงที่จําเป็นในการสร้างผลลัพธ์คิวรีที่ถูกต้อง
พิจารณาตัวอย่างง่าย ๆ ของตาราง Delta ที่บทความนี้ใช้เพื่ออธิบายการดําเนินการแก้ไขข้อมูลที่แตกต่างกัน ตารางมีสองคอลัมน์และจัดเก็บสามแถว
ProductID | StockOnHand |
---|---|
A | 1 |
B | 2 |
C | 3 |
ข้อมูลตาราง Delta ถูกเก็บไว้ในไฟล์ Parquet เดียวที่มีข้อมูลทั้งหมด และมีไฟล์ลิงก์เดียวที่มีเมตาดาต้าเกี่ยวกับเมื่อแทรกข้อมูล (ต่อท้าย)
- ไฟล์ Parquet 1:
- ProductID: A, B, C
- StockOnHand: 1, 2, 3
- ไฟล์ลิงก์ 1:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 1
และบันทึกข้อมูลที่ถูกผนวก
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
แทรกการดําเนินการ
พิจารณาสิ่งที่เกิดขึ้นเมื่อมีการแทรกการดําเนินการ: แถวใหม่สําหรับผลิตภัณฑ์ C
ที่มีมูลค่าสต็อกคงเหลือของ 4
ถูกแทรก การดําเนินการนี้ส่งผลให้เกิดการสร้างไฟล์ Parquet ใหม่และไฟล์ลิงก์ ดังนั้นจึงมีไฟล์ Parquet สองไฟล์และไฟล์ลิงก์สองไฟล์ตอนนี้
- ไฟล์ Parquet 1:
- ProductID: A, B, C
- StockOnHand: 1, 2, 3
- ไฟล์ Parquet 2:
- ProductID: D
- สต็อกอนัน: 4
- ไฟล์ลิงก์ 1:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 1
และบันทึกข้อมูลที่ถูกผนวก
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
- ไฟล์ลิงก์ 2:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 2
และบันทึกข้อมูลที่ถูกผนวก
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
ในตอนนี้ คิวรีของตาราง Delta จะส่งกลับผลลัพธ์ต่อไปนี้ ไม่สําคัญว่าผลลัพธ์จะมาจากไฟล์ Parquet หลายไฟล์
ProductID | StockOnHand |
---|---|
A | 1 |
B | 2 |
C | 3 |
D | 4 |
ทุก ๆ การดําเนินการแทรกที่ตามมาจะสร้างไฟล์ Parquet และไฟล์ลิงก์ใหม่ ซึ่งหมายความว่า จํานวนของไฟล์ Parquet และไฟล์ลิงก์จะเพิ่มขึ้นทุกการดําเนินการแทรก
อัปเดตการดําเนินการ
ตอนนี้ให้พิจารณาว่าจะเกิดอะไรขึ้นเมื่อการดําเนินการอัปเดตเกิดขึ้น: แถวสําหรับผลิตภัณฑ์ D
มีค่าสต็อกคงเหลือเปลี่ยนเป็น 10
การดําเนินการนี้ส่งผลให้เกิดการสร้างไฟล์ Parquet ใหม่และไฟล์ลิงก์ดังนั้นจึงมีไฟล์ Parquet สามไฟล์และไฟล์ลิงก์สามไฟล์ตอนนี้
- ไฟล์ Parquet 1:
- ProductID: A, B, C
- StockOnHand: 1, 2, 3
- ไฟล์ Parquet 2:
- ProductID: D
- สต็อกอนัน: 4
- ไฟล์ Parquet 3:
- ProductID: C
- สต็อกสินค้า: 10
- ไฟล์ลิงก์ 1:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 1
และบันทึกข้อมูลที่ถูกผนวก
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
- ไฟล์ลิงก์ 2:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 2
และบันทึกข้อมูลที่ถูกผนวก
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
- ไฟล์ลิงก์ 3:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 3
และบันทึกข้อมูลที่อัปเดต
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
ในตอนนี้ คิวรีของตาราง Delta จะส่งกลับผลลัพธ์ต่อไปนี้
ProductID | StockOnHand |
---|---|
A | 1 |
B | 2 |
C | 10 |
D | 4 |
ขณะนี้ข้อมูลสําหรับผลิตภัณฑ์ C
มีอยู่ในไฟล์ Parquet หลายไฟล์ อย่างไรก็ตาม คิวรีไปยังตาราง Delta รวมไฟล์ลิงก์เพื่อกําหนดว่าควรใช้ข้อมูลใดเพื่อให้ผลลัพธ์ที่ถูกต้อง
ลบการดําเนินการ
ตอนนี้ให้พิจารณาสิ่งที่เกิดขึ้นเมื่อการดําเนินการลบเกิดขึ้น: แถวสําหรับผลิตภัณฑ์ B
จะถูกลบ การดําเนินการนี้ส่งผลให้ไฟล์ Parquet ใหม่และไฟล์เชื่อมโยงดังนั้นขณะนี้มีไฟล์ Parquet สี่ไฟล์และไฟล์ลิงก์สี่ไฟล์
- ไฟล์ Parquet 1:
- ProductID: A, B, C
- StockOnHand: 1, 2, 3
- ไฟล์ Parquet 2:
- ProductID: D
- สต็อกอนัน: 4
- ไฟล์ Parquet 3:
- ProductID: C
- สต็อกสินค้า: 10
- ไฟล์ Parquet 4:
- ProductID: A, C, D
- StockOnHand: 1, 10, 4
- ไฟล์ลิงก์ 1:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 1
และบันทึกข้อมูลที่ถูกผนวก
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
- ไฟล์ลิงก์ 2:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 2
และบันทึกข้อมูลที่ถูกผนวก
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
- ไฟล์ลิงก์ 3:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 3
และบันทึกข้อมูลที่อัปเดต
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
- ไฟล์ลิงก์ 4:
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
Parquet file 4
และบันทึกข้อมูลที่ถูกลบ
- ประกอบด้วยประทับเวลาเมื่อมีการสร้าง
โปรดสังเกตว่า Parquet file 4
ไม่มีข้อมูลสําหรับผลิตภัณฑ์ B
อีกต่อไป แต่จะมีข้อมูลสําหรับแถวอื่น ๆ ทั้งหมดในตาราง
ในตอนนี้ คิวรีของตาราง Delta จะส่งกลับผลลัพธ์ต่อไปนี้
ProductID | StockOnHand |
---|---|
A | 1 |
C | 10 |
D | 4 |
โน้ต
ตัวอย่างนี้ง่ายเพราะเกี่ยวข้องกับตารางขนาดเล็ก เพียงไม่กี่การดําเนินการ และการแก้ไขเพียงเล็กน้อยเท่านั้น ตารางขนาดใหญ่ที่ประสบกับการดําเนินการเขียนจํานวนมากและประกอบด้วยแถวของข้อมูลจํานวนมากจะสร้างไฟล์ Parquet มากกว่าหนึ่งไฟล์ต่อเวอร์ชัน
สําคัญ
ขึ้นอยู่กับวิธีที่คุณกําหนดตาราง Delta ของคุณและความถี่ของการดําเนินการแก้ไขข้อมูล อาจส่งผลให้มีไฟล์ Parquet จํานวนมาก โปรดทราบว่าแต่ละสิทธิ์การใช้งานความจุ Fabric มี guardrails ถ้าจํานวนของไฟล์ Parquet สําหรับตาราง Delta เกินขีดจํากัดสําหรับ SKU ของคุณ คิวรีจะ กลับไปใช้ DirectQueryซึ่งอาจทําให้ประสิทธิภาพการคิวรีช้าลง
หากต้องการจัดการจํานวนไฟล์ Parquet โปรดดู การบํารุงรักษาตาราง Delta ภายหลังในบทความนี้
การเดินทางเวลาเดลต้า
ไฟล์ลิงก์เปิดใช้งานการสอบถามข้อมูล ณ จุดเวลาก่อนหน้า ความสามารถนี้เรียกว่า เวลาDelta เวลาก่อนหน้านี้อาจเป็นการประทับเวลาหรือเวอร์ชัน
พิจารณาตัวอย่างคิวรีต่อไปนี้
SELECT * FROM Inventory TIMESTAMP AS OF '2024-04-28T09:15:00.000Z';
SELECT * FROM Inventory AS OF VERSION 2;
ปลาย
คุณยังสามารถคิวรีตารางโดยใช้ไวยากรณ์แบบย่อ @
เพื่อระบุการประทับเวลาหรือเวอร์ชันเป็นส่วนหนึ่งของชื่อตาราง ประทับเวลาต้องอยู่ในรูปแบบ yyyyMMddHHmmssSSS
คุณสามารถระบุเวอร์ชันหลังจาก @
แล้วได้โดยการรอ v
ไปยังเวอร์ชัน
นี่คือตัวอย่างคิวรีก่อนหน้านี้ที่เขียนใหม่ด้วยไวยากรณ์แบบย่อ
SELECT * FROM Inventory@20240428091500000;
SELECT * FROM Inventory@v2;
สําคัญ
เวอร์ชันตารางที่สามารถเข้าถึงได้ด้วยการเดินทางเวลาจะถูกกําหนดโดยการรวมกันของขีดจํากัดการเก็บรักษาสําหรับไฟล์บันทึกธุรกรรมและความถี่และการเก็บข้อมูลที่ระบุสําหรับการดําเนินการสูญญากาศ (อธิบายไว้ในส่วนการบํารุงรักษาตาราง Delta ) หากคุณเรียกใช้สูญญากาศทุกวันตามค่าเริ่มต้น ข้อมูลเจ็ดวันจะพร้อมใช้งานสําหรับการเดินทางในเวลา
กรอบ
Framing เป็นการดําเนินการ Direct Lake ที่ตั้งค่าเวอร์ชันของตาราง Delta ที่ควรใช้ในการโหลดข้อมูลลงในคอลัมน์แบบจําลองเชิงความหมาย สิ่งสําคัญเท่ากัน เวอร์ชันยังกําหนดสิ่งที่ควรแยกออกเมื่อโหลดข้อมูล
การดําเนินการเฟรมสแตมป์การประทับเวลา/เวอร์ชันของแต่ละตาราง Delta ลงในตารางแบบจําลองเชิงความหมาย จากจุดนี้ เมื่อแบบจําลองความหมายจําเป็นต้องโหลดข้อมูลจากตาราง Delta การประทับเวลา/เวอร์ชันที่เชื่อมโยงกับการดําเนินการเฟรมมิ่งล่าสุดจะถูกใช้เพื่อกําหนดว่าจะโหลดข้อมูลใด การปรับเปลี่ยนข้อมูลที่ตามมาใดๆ ที่เกิดขึ้นสําหรับตาราง Delta เนื่องจากการดําเนินการเฟรมล่าสุดจะถูกละเว้น (จนกว่าจะมีการดําเนินการเฟรมถัดไป)
สําคัญ
เนื่องจากแบบจําลองความหมายที่มีกรอบอ้างอิงเวอร์ชันตาราง Delta เฉพาะ แหล่งข้อมูลต้องตรวจสอบให้แน่ใจว่าเวอร์ชันตาราง Delta ยังคงรักษาไว้จนกว่าการเฟรมมิ่งของเวอร์ชันใหม่จะเสร็จสมบูรณ์ มิฉะนั้น ผู้ใช้จะพบข้อผิดพลาดเมื่อไฟล์ตาราง Delta ต้องสามารถเข้าถึงได้โดยแบบจําลองและถูกดูดฝุ่นหรือถูกลบโดยปริมาณงานของผู้ผลิต
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการเฟรมมิ่ง โปรดดูภาพรวมของ Direct Lake
การแบ่งพาร์ติชันตาราง
ตาราง Delta สามารถแบ่งพาร์ติชันเพื่อให้ชุดย่อยของแถวถูกจัดเก็บร่วมกันในชุดไฟล์ Parquet เดียว พาร์ติชันสามารถเพิ่มความเร็วคิวรีรวมถึงการดําเนินการเขียนได้
พิจารณาตาราง Delta ที่มีข้อมูลยอดขายนับพันล้านแถวสําหรับระยะเวลาสองปี ในขณะที่เป็นไปได้ที่จะจัดเก็บข้อมูลทั้งหมดไว้ในไฟล์ Parquet เพียงชุดเดียว สําหรับไดรฟ์ข้อมูลนี้มันไม่เหมาะสมสําหรับการดําเนินการอ่านและเขียน แต่สามารถปรับปรุงประสิทธิภาพการทํางานโดยการเผยแพร่แถวพันล้านแถวของข้อมูลในหลายชุดไฟล์ Parquet
ต้องกําหนด คีย์พาร์ติชัน เมื่อตั้งค่าการแบ่งพาร์ติชันตาราง คีย์พาร์ติชันจะกําหนดแถวที่จะจัดเก็บในชุดข้อมูลใด สําหรับตาราง Delta สามารถกําหนดคีย์พาร์ติชันตามค่าที่แตกต่างกันของคอลัมน์ที่ระบุ (หรือคอลัมน์) เช่น คอลัมน์เดือน/ปีของตารางวันที่ ในกรณีนี้ ข้อมูลสองปีจะถูกกระจายไปทั่วทั้ง 24 พาร์ติชัน (2 ปี x 12 เดือน)
กลไกการคํานวณ Fabric ไม่ทราบพาร์ติชันตาราง เมื่อมีการแทรกค่าคีย์พาร์ติชันใหม่ พาร์ติชันใหม่จะถูกสร้างขึ้นโดยอัตโนมัติ ใน OneLake คุณจะพบโฟลเดอร์ย่อยหนึ่งโฟลเดอร์สําหรับแต่ละค่าคีย์พาร์ติชันที่ไม่ซ้ํากัน และโฟลเดอร์ย่อยแต่ละโฟลเดอร์จะจัดเก็บไฟล์ Parquet และไฟล์ลิงก์ชุดของตัวเอง ต้องมีไฟล์ Parquet อย่างน้อยหนึ่งไฟล์และไฟล์ลิงก์หนึ่งไฟล์อยู่ แต่จํานวนไฟล์จริงในแต่ละโฟลเดอร์ย่อยอาจแตกต่างกันไป เมื่อการดําเนินการแก้ไขข้อมูลเกิดขึ้น แต่ละพาร์ติชันจะรักษาชุดไฟล์ Parquet และไฟล์ลิงก์ของตัวเองเพื่อติดตามสิ่งที่จะส่งคืนสําหรับการประทับเวลาหรือเวอร์ชันที่กําหนด
ถ้าคิวรีของตาราง Delta ที่มีการแบ่งพาร์ติชันถูกกรองไปยังเฉพาะสามเดือนล่าสุดของข้อมูลยอดขาย ชุดย่อยของไฟล์ Parquet และไฟล์ลิงก์ที่จําเป็นต้องเข้าถึงสามารถระบุได้อย่างรวดเร็ว จากนั้นอนุญาตให้ข้ามไฟล์ Parquet จํานวนมากทั้งหมดส่งผลให้ประสิทธิภาพการอ่านดีขึ้น
อย่างไรก็ตาม คิวรีที่ไม่ได้กรองบนคีย์พาร์ติชันอาจไม่ทํางานได้ดียิ่งขึ้นเสมอไป ซึ่งอาจเป็นปัญหาเมื่อตาราง Delta จัดเก็บข้อมูลทั้งหมดในชุดไฟล์ Parquet ขนาดใหญ่ชุดเดียว และมีไฟล์หรือการกระจายตัวของกลุ่มแถว ในขณะที่เป็นไปได้ที่จะรวมข้อมูลแบบขนานจากไฟล์ Parquet หลายไฟล์ในโหนดคลัสเตอร์หลายโหนด แต่ไฟล์ Parquet ขนาดเล็กจํานวนมากสามารถส่งผลกระทบต่อไฟล์ I / O และดังนั้นประสิทธิภาพของคิวรี ด้วยเหตุผลนี้ จะเป็นการดีที่สุดที่จะหลีกเลี่ยงการแบ่งพาร์ติชันตาราง Delta ในกรณีส่วนใหญ่ เว้นแต่ว่าการดําเนินการเขียนหรือแยก การแปลง และกระบวนการโหลด (ETL) จะเป็นประโยชน์อย่างชัดเจนจากตารางดังกล่าว
ประโยชน์ของการแบ่งพาร์ติชันจะแทรก อัปเดต และลบการดําเนินการด้วย เนื่องจากกิจกรรมของไฟล์จะเกิดขึ้นในโฟลเดอร์ย่อยที่ตรงกับคีย์พาร์ติชันของแถวที่ปรับเปลี่ยนหรือลบเท่านั้น ตัวอย่างเช่น ถ้ามีการแทรกชุดงานข้อมูลลงในตาราง Delta ที่มีการแบ่งพาร์ติชัน ข้อมูลจะถูกประเมินเพื่อพิจารณาว่ามีค่าคีย์พาร์ติชันใดอยู่ในชุดงาน จากนั้นข้อมูลจะถูกนําไปยังโฟลเดอร์ที่เกี่ยวข้องสําหรับพาร์ติชันเท่านั้น
การทําความเข้าใจวิธีการที่ตาราง Delta ใช้พาร์ติชันสามารถช่วยให้คุณออกแบบสถานการณ์ ETL ที่เหมาะสมที่สุดซึ่งลดการดําเนินการเขียนที่จําเป็นต้องเกิดขึ้นเมื่ออัปเดตตาราง Delta ขนาดใหญ่ ประสิทธิภาพการเขียนจะปรับปรุงโดยการลดจํานวนและขนาดของไฟล์ Parquet ใหม่ใด ๆ ที่ต้องสร้างขึ้น สําหรับตาราง Delta ขนาดใหญ่ที่แบ่งพาร์ติชันตามเดือน/ปีตามที่อธิบายไว้ในตัวอย่างก่อนหน้านี้ ข้อมูลใหม่จะเพิ่มไฟล์ Parquet ใหม่ไปยังพาร์ติชันล่าสุดเท่านั้น โฟลเดอร์ย่อยของเดือนปฏิทินก่อนหน้ายังคงไม่ถูกเปิดเผย หากต้องแก้ไขข้อมูลใด ๆ ของเดือนปฏิทินก่อนหน้าเฉพาะโฟลเดอร์พาร์ติชันที่เกี่ยวข้องเท่านั้นที่จะได้รับพาร์ติชันใหม่และไฟล์ลิงก์
สําคัญ
ถ้าวัตถุประสงค์หลักของตาราง Delta คือเพื่อทําหน้าที่เป็นแหล่งข้อมูลสําหรับแบบจําลองเชิงความหมาย (และสํารอง ปริมาณงานคิวรีอื่นๆ) จะเป็นการดีกว่าที่จะหลีกเลี่ยงการแบ่งพาร์ติชันในการปรับให้เหมาะสม โหลดของคอลัมน์ลงในหน่วยความจํา
สําหรับแบบจําลองความหมายของ Direct Lake หรือจุดสิ้นสุดการวิเคราะห์ SQLวิธีที่ดีที่สุดในการเพิ่มประสิทธิภาพพาร์ติชันตาราง Delta คือการให้ Fabric จัดการไฟล์ Parquet โดยอัตโนมัติสําหรับแต่ละเวอร์ชันของตาราง Delta การออกจากการจัดการไปยัง Fabric ควรส่งผลให้ประสิทธิภาพการทํางานของคิวรีสูงผ่านการทํางานแบบขนาน อย่างไรก็ตามอาจไม่จําเป็นต้องให้ประสิทธิภาพการเขียนที่ดีที่สุด
หากคุณต้องปรับให้เหมาะสมสําหรับการดําเนินการเขียน ให้พิจารณาใช้พาร์ติชันเพื่อปรับการดําเนินการเขียนไปยังตาราง Delta ตามคีย์พาร์ติชัน อย่างไรก็ตาม โปรดทราบว่าการแบ่งพาร์ติชันตาราง Delta อาจส่งผลเสียต่อประสิทธิภาพการอ่าน ด้วยเหตุผลนี้ เราขอแนะนําให้คุณทดสอบประสิทธิภาพการอ่านและการเขียนอย่างรอบคอบ โดยการสร้างสําเนาหลายสําเนาของตาราง Delta เดียวกันที่มีการกําหนดค่าที่แตกต่างกันเพื่อเปรียบเทียบการกําหนดเวลา
คำเตือน
ถ้าคุณแบ่งพาร์ติชันในคอลัมน์คาร์ดินาลลิตี้สูง อาจทําให้เกิดจํานวนไฟล์ Parquet มากเกินไป โปรดทราบว่าสิทธิ์การใช้งานความจุ Fabric ทั้งหมดมี guardrails ถ้าจํานวนของไฟล์ Parquet สําหรับตาราง Delta เกินขีดจํากัดสําหรับ SKU ของคุณ คิวรีจะ กลับไปใช้ DirectQueryซึ่งอาจทําให้ประสิทธิภาพการคิวรีช้าลง
ไฟล์ Parquet
ที่เก็บข้อมูลพื้นฐานสําหรับตาราง Delta คือไฟล์ Parquet อย่างน้อยหนึ่งไฟล์ โดยทั่วไปรูปแบบไฟล์ Parquet จะใช้สําหรับแอปพลิเคชัน แบบอ่านได้ครั้งเดียว เขียน ไฟล์ Parquet ใหม่จะถูกสร้างขึ้นทุกครั้งที่มีการปรับเปลี่ยนข้อมูลในตาราง Delta ไม่ว่าจะด้วยการแทรก อัปเดต หรือลบการดําเนินการ
โน้ต
คุณสามารถเข้าถึงไฟล์ Parquet ที่เชื่อมโยงกับตาราง Delta ได้โดยใช้เครื่องมือ เช่น OneLake file explorer สามารถดาวน์โหลดคัดลอกหรือย้ายไฟล์ไปยังปลายทางอื่น ๆ ได้อย่างง่ายดายเช่นเดียวกับการย้ายไฟล์อื่น ๆ อย่างไรก็ตามเป็นการผสมผสานของไฟล์ Parquet และไฟล์ลิงก์ที่ใช้ JSON ที่อนุญาตให้กลไกการคํานวณออกคิวรีกับไฟล์เป็นตาราง Delta
รูปแบบไฟล์ Parquet
รูปแบบภายในของไฟล์ Parquet แตกต่างจากรูปแบบพื้นที่จัดเก็บข้อมูลทั่วไปอื่น ๆ เช่น CSV, TSV, XMLA และ JSON รูปแบบเหล่านี้จัดระเบียบข้อมูล แยกตามแถวขณะที่ Parquet จัดระเบียบข้อมูล ตามคอลัมน์ นอกจากนี้รูปแบบไฟล์ Parquet ยังแตกต่างจากรูปแบบเหล่านี้เนื่องจากจัดระเบียบแถวของข้อมูลลงในกลุ่มแถวอย่างน้อยหนึ่ง
โครงสร้างข้อมูลภายในของแบบจําลองความหมายของ Power BI นั้นยึดตามคอลัมน์ ซึ่งหมายความว่าไฟล์ Parquet แชร์ร่วมกันอย่างมากกับ Power BI ความคล้ายคลึงกันนี้หมายความว่าแบบจําลองความหมาย Direct Lake สามารถโหลดข้อมูลจากไฟล์ Parquet ลงในหน่วยความจําได้โดยตรงได้อย่างมีประสิทธิภาพ อันที่จริงแล้ว สามารถโหลดข้อมูลจํานวนมากได้ภายในไม่กี่วินาที เปรียบเทียบความสามารถนี้กับการรีเฟรชแบบจําลองความหมายแบบนําเข้าซึ่งต้องดึงข้อมูลบล็อกหรือข้อมูลต้นฉบับ จากนั้นประมวลผล เข้ารหัส จัดเก็บ และโหลดลงในหน่วยความจํา การดําเนินการรีเฟรชแบบจําลองความหมายการนําเข้าสามารถใช้การคํานวณ (หน่วยความจําและ CPU) จํานวนมาก และใช้เวลามากในการดําเนินการให้เสร็จสมบูรณ์ อย่างไรก็ตามด้วยตาราง Delta ความพยายามส่วนใหญ่ในการเตรียมข้อมูลที่เหมาะสมสําหรับการโหลดโดยตรงลงในแบบจําลองความหมายจะเกิดขึ้นเมื่อสร้างไฟล์ Parquet
วิธีที่ไฟล์ Parquet จัดเก็บข้อมูล
พิจารณาชุดตัวอย่างของข้อมูลต่อไปนี้
วันที่ | ProductID | StockOnHand |
---|---|---|
2024-09-16 | A | 10 |
2024-09-16 | B | 11 |
2024-09-17 | A | 13 |
… |
เมื่อจัดเก็บในรูปแบบไฟล์ Parquet ตามแนวคิดแล้ว ชุดข้อมูลนี้อาจมีลักษณะเหมือนกับข้อความต่อไปนี้
Header:
RowGroup1:
Date: 2024-09-16, 2024-09-16, 2024-09-17…
ProductID: A, B, A…
StockOnHand: 10, 11, 13…
RowGroup2:
…
Footer:
ข้อมูลจะถูกบีบอัดโดยการแทนที่คีย์พจนานุกรมสําหรับค่าทั่วไป และโดยการใช้ การเข้ารหัสลับความยาวการเรียกใช้ (RLE) RLE พยายามบีบอัดชุดข้อมูลของค่าเดียวกันให้เป็นการแสดงที่เล็กลง ในตัวอย่างต่อไปนี้ การแมปพจนานุกรมของคีย์ตัวเลขกับค่าจะถูกสร้างขึ้นในส่วนหัว และใช้ค่าคีย์ที่มีขนาดเล็กกว่าแทนค่าข้อมูล
Header:
Dictionary: [
(1, 2024-09-16), (2, 2024-09-17),
(3, A), (4, B),
(5, 10), (6, 11), (7, 13)
…
]
RowGroup1:
Date: 1, 1, 2…
ProductID: 3, 4, 3…
StockOnHand: 5, 6, 7…
Footer:
เมื่อแบบจําลองความหมาย Direct Lake ต้องการข้อมูลเพื่อคํานวณผลรวมของคอลัมน์ StockOnHand
ที่จัดกลุ่มตาม ProductID
จะต้องมีเฉพาะพจนานุกรมและข้อมูลที่เกี่ยวข้องกับสองคอลัมน์เท่านั้น ในไฟล์ขนาดใหญ่ที่มีหลายคอลัมน์ คุณสามารถข้ามส่วนที่สําคัญของไฟล์ Parquet เพื่อช่วยเร่งความเร็วกระบวนการอ่านได้
โน้ต
เนื้อหาของไฟล์ Parquet ไม่สามารถอ่านได้และดังนั้นจึงไม่เหมาะสมที่จะเปิดในตัวแก้ไขข้อความ อย่างไรก็ตาม มีเครื่องมือโอเพนซอร์สมากมายที่สามารถเปิดและเปิดเผยเนื้อหาของไฟล์ Parquet ได้ เครื่องมือเหล่านี้ยังสามารถช่วยให้คุณตรวจสอบเมตาดาต้า เช่น จํานวนแถวและกลุ่มแถวที่มีอยู่ในไฟล์
สั่งซื้อ V
Fabric สนับสนุนการปรับให้เหมาะสมเพิ่มเติมที่เรียกว่า V-Order V-Order คือการปรับเวลาการเขียนให้เหมาะสมที่สุดสําหรับรูปแบบไฟล์ Parquet เมื่อมีการใช้ V-Order จะส่งผลให้มีขนาดเล็กลงและดังนั้นจึงทําให้ไฟล์เร็วขึ้นในการอ่าน การปรับให้เหมาะสมนี้จะเกี่ยวข้องโดยเฉพาะอย่างยิ่งสําหรับแบบจําลองความหมาย Direct Lake เนื่องจากเป็นการเตรียมข้อมูลสําหรับการโหลดลงในหน่วยความจําอย่างรวดเร็วดังนั้นจึงทําให้ความต้องการใช้ทรัพยากรความจุน้อยลง นอกจากนี้ยังส่งผลให้ประสิทธิภาพการคิวรีเร็วขึ้นเนื่องจากจําเป็นต้องสแกนหน่วยความจําน้อยลง
ตาราง Delta ที่สร้างและโหลดโดยหน่วยข้อมูล Fabric เช่น ไปป์ไลน์ข้อมูลกระแสข้อมูล และ สมุดบันทึก ใช้ V-Order โดยอัตโนมัติ อย่างไรก็ตามไฟล์ Parquet ที่อัปโหลดไปยัง Fabric lakehouse หรือไฟล์ที่อ้างอิงโดยทางลัด อาจไม่มีการปรับให้เหมาะสมนี้ ในขณะที่ไฟล์ Parquet ที่ยังไม่ได้ปรับให้เหมาะสมยังคงสามารถอ่านได้ แต่ประสิทธิภาพการอ่านอาจไม่เร็วเท่ากับไฟล์ Parquet ที่เทียบเท่าที่มีการใช้ V-Order
โน้ต
ไฟล์ Parquet ที่มีการใช้ V-Order ยังคงสอดคล้องกับรูปแบบไฟล์ Parquet โอเพนซอร์ส ดังนั้นสามารถอ่านได้โดยเครื่องมือที่ไม่ใช่ Fabric
สําหรับข้อมูลเพิ่มเติม โปรดดู การปรับตาราง Delta Lake ให้เหมาะสมและV-Order
การปรับตาราง Delta ให้เหมาะสม
ในส่วนนี้จะอธิบายหัวข้อต่าง ๆ สําหรับการปรับตาราง Delta ให้เหมาะสมสําหรับแบบจําลองเชิงความหมาย
ปริมาณข้อมูล
ในขณะที่ตาราง Delta สามารถเพิ่มขนาดได้เพื่อจัดเก็บข้อมูลจํานวนมาก แต่ Fabric capacity guardrails กําหนดขีดจํากัดบนแบบจําลองความหมายที่คิวรีเหล่านั้น เมื่อเกินขีดจํากัดดังกล่าว คิวรีจะ กลับไปใช้ DirectQueryซึ่งอาจส่งผลให้ประสิทธิภาพการทํางานของคิวรีช้าลง
ดังนั้นพิจารณาจํากัดจํานวนแถวของตารางข้อเท็จจริง ขนาดใหญ่ โดยการเพิ่มส่วนประกอบ (ข้อมูลสรุปร้านค้า) ลดมิติข้อมูล หรือจัดเก็บประวัติน้อยลง
นอกจากนี้ ตรวจสอบให้แน่ใจว่า ใช้ V-Order เนื่องจากส่งผลให้มีขนาดไฟล์เล็กลงและดังนั้นจึงทําให้อ่านได้เร็วขึ้น
ชนิดข้อมูลของคอลัมน์
พยายามลดคาร์ดินาลลิตี้ (จํานวนค่าที่ไม่ซ้ํากัน) ในทุกคอลัมน์ของตาราง Delta แต่ละตาราง นั่นเป็นเพราะว่าคอลัมน์ทั้งหมดจะถูกบีบอัดและจัดเก็บไว้โดยใช้ การเข้ารหัสแฮช การเข้ารหัสแฮชจําเป็นต้องมีการเพิ่มประสิทธิภาพ V-Order เพื่อกําหนดตัวระบุตัวเลขสําหรับแต่ละค่าที่ไม่ซ้ํากันที่มีอยู่ในคอลัมน์ ซึ่งเป็นตัวระบุตัวเลขที่ถูกจัดเก็บ ซึ่งจําเป็นต้องมีการค้นหาแฮชในระหว่างการจัดเก็บและคิวรี
เมื่อคุณใช้ ชนิดข้อมูลตัวเลขโดยประมาณ (เช่น เลขทศนิยมและ จริง) ให้พิจารณาการปัดเศษค่าและใช้ความแม่นยําที่ต่ํากว่า
คอลัมน์ที่ไม่จําเป็น
เช่นเดียวกับตารางข้อมูลใด ๆ ตาราง Delta ควรจัดเก็บคอลัมน์ที่จําเป็นเท่านั้น ในบริบทของบทความนี้ ซึ่งหมายความว่าแบบจําลองความหมายต้องการ แม้ว่าอาจมีปริมาณงานวิเคราะห์อื่น ๆ ที่คิวรีตาราง Delta
ตาราง Delta ควรมีคอลัมน์ที่จําเป็นสําหรับแบบจําลองความหมายสําหรับการกรอง การจัดกลุ่ม การเรียงลําดับ และการสรุป นอกเหนือจากคอลัมน์ที่สนับสนุนความสัมพันธ์ของแบบจําลอง ในขณะที่คอลัมน์ที่ไม่จําเป็นจะไม่ส่งผลกระทบต่อประสิทธิภาพการคิวรีแบบจําลองเชิงความหมาย (เนื่องจากคอลัมน์เหล่านั้นจะไม่ถูกโหลดลงในหน่วยความจํา) แต่จะส่งผลให้มีขนาดพื้นที่จัดเก็บขนาดใหญ่ขึ้นและจําเป็นต้องใช้ทรัพยากรในการคํานวณมากขึ้นเพื่อโหลดและบํารุงรักษา
เนื่องจากแบบจําลองความหมาย Direct Lake ไม่รองรับคอลัมน์จากการคํานวณ คุณควรแสดงคอลัมน์ดังกล่าวในตาราง Delta โปรดทราบว่าวิธีการออกแบบนี้เป็นรูปแบบป้องกันสําหรับแบบจําลองความหมายการนําเข้าและ DirectQuery ตัวอย่างเช่น ถ้าคุณมี FirstName
และ LastName
คอลัมน์ และคุณต้องการคอลัมน์ FullName
ให้แสดงค่าสําหรับคอลัมน์นี้เมื่อแทรกแถวลงในตาราง Delta
พิจารณาว่าการสรุปแบบจําลองความหมายบางอย่างอาจขึ้นอยู่กับคอลัมน์มากกว่าหนึ่งคอลัมน์ ตัวอย่างเช่น ในการคํานวณยอดขาย หน่วยวัดในแบบจําลองจะบวกผลคูณของสองคอลัมน์: Quantity
และ Price
หากไม่มีการใช้คอลัมน์ใดอย่างอิสระ มันจะมีประสิทธิภาพมากกว่าในการทําให้การคํานวณยอดขายเป็นคอลัมน์เดียวมากกว่าการจัดเก็บค่าส่วนประกอบในคอลัมน์ที่แยกต่างหาก
ขนาดกลุ่มแถว
ภายใน ไฟล์ Parquet จัดระเบียบแถวของข้อมูลลงในหลายกลุ่มแถวภายในแต่ละไฟล์ ตัวอย่างเช่น ไฟล์ Parquet ที่ประกอบด้วย 30,000 แถวอาจแบ่งกลุ่มเป็นสามกลุ่ม แถวแต่ละกลุ่มมี 10,000 แถว
จํานวนแถวในกลุ่มแถวมีผลต่อ Direct Lake ที่สามารถอ่านข้อมูลได้รวดเร็วเพียงใด จํานวนกลุ่มแถวที่สูงขึ้นที่มีแถวน้อยกว่ามีแนวโน้มที่จะส่งผลกระทบต่อการโหลดข้อมูลคอลัมน์ลงในแบบจําลองความหมายเนื่องจาก I/O มากเกินไป
โดยทั่วไปแล้ว เราไม่แนะนําให้คุณเปลี่ยนขนาดกลุ่มแถวเริ่มต้น อย่างไรก็ตาม คุณอาจพิจารณาเปลี่ยนขนาดกลุ่มแถวสําหรับตาราง Delta ขนาดใหญ่ ตรวจสอบให้แน่ใจว่าได้ทดสอบประสิทธิภาพการอ่านและเขียนอย่างรอบคอบโดยการสร้างสําเนาตาราง Delta เดียวกันหลายชุดที่มีการกําหนดค่าที่แตกต่างกันเพื่อเปรียบเทียบกําหนดเวลา
สําคัญ
โปรดทราบว่าสิทธิ์การใช้งานความจุ Fabric ทั้งหมดมี guardrails ถ้าจํานวนกลุ่มแถวสําหรับตาราง Delta เกินขีดจํากัดสําหรับ SKU ของคุณ คิวรีจะ กลับไปยัง DirectQueryซึ่งอาจทําให้ประสิทธิภาพการทํางานของคิวรีช้าลง
การบํารุงรักษาตารางเดลต้า
เมื่อเวลาผ่านไปเนื่องจากมีการดําเนินการเขียนเวอร์ชันตาราง Delta จะสะสม ในที่สุดคุณอาจถึงจุดที่ผลกระทบเชิงลบต่อประสิทธิภาพการอ่านจะเห็นได้ชัดเจน แย่ลง หากจํานวนไฟล์ Parquet ต่อตารางหรือกลุ่มแถวต่อตารางหรือแถวเกิน guardrails สําหรับความจุของคุณคิวรีจะ กลับไปยัง DirectQueryซึ่งอาจทําให้ประสิทธิภาพการทํางานของคิวรีช้าลง ดังนั้นจึงเป็นสิ่งสําคัญที่คุณรักษาตาราง Delta เป็นประจํา
ปรับ
คุณสามารถใช้ ปรับ ให้เหมาะสมเพื่อปรับตาราง Delta ให้เหมาะสมเพื่อรวมไฟล์ขนาดเล็กเข้าเป็นไฟล์ขนาดใหญ่ คุณยังสามารถตั้งค่าส่วนคําสั่ง WHERE
เพื่อกําหนดเป้าหมายเฉพาะชุดย่อยที่กรองแล้วของแถวที่ตรงกับเพรดิเคตพาร์ติชันที่กําหนด รองรับเฉพาะตัวกรองที่เกี่ยวข้องกับคีย์พาร์ติชันเท่านั้น คําสั่ง OPTIMIZE
ยังสามารถใช้ V-Order เพื่อกระชับและเขียนไฟล์ Parquet ใหม่ได้
เราขอแนะนําให้คุณเรียกใช้คําสั่งนี้บนตาราง Delta ที่อัปเดตบ่อยและมีขนาดใหญ่เป็นประจํา อาจเป็นทุกวันเมื่อกระบวนการ ETL ของคุณเสร็จสมบูรณ์ สร้างสมดุลระหว่างประสิทธิภาพการคิวรีที่ดีขึ้นและค่าใช้จ่ายของการใช้ทรัพยากรที่จําเป็นในการปรับตารางให้เหมาะสม
สุญญากาศ
คุณสามารถใช้ สูญญากาศของ เพื่อลบไฟล์ที่ไม่ได้อ้างอิงอีกต่อไป และ/หรือที่เก่ากว่าค่าเกณฑ์การเก็บรักษาตามการตั้งค่า ดูแลในการตั้งค่าระยะเวลาการเก็บรักษาที่เหมาะสมมิฉะนั้นคุณอาจสูญเสียความสามารถในการ เดินทางในเวลา กลับไปยังเวอร์ชันที่เก่ากว่าเฟรมที่ประทับลงในตารางแบบจําลองความหมาย
สําคัญ
เนื่องจากแบบจําลองความหมายที่มีกรอบอ้างอิงเวอร์ชันตาราง Delta เฉพาะ แหล่งข้อมูลต้องตรวจสอบให้แน่ใจว่าเวอร์ชันตาราง Delta ยังคงรักษาไว้จนกว่าการเฟรมมิ่งของเวอร์ชันใหม่จะเสร็จสมบูรณ์ มิฉะนั้น ผู้ใช้จะพบข้อผิดพลาดเมื่อไฟล์ตาราง Delta ต้องสามารถเข้าถึงได้โดยแบบจําลองและถูกดูดฝุ่นหรือถูกลบโดยปริมาณงานของผู้ผลิต
ตาราง REORG
คุณสามารถใช้ ตาราง REORG เพื่อจัดระเบียบตาราง Delta ใหม่โดยการเขียนไฟล์ใหม่เพื่อล้างข้อมูลที่ถูกลบนุ่มนวล เช่น เมื่อคุณวางคอลัมน์โดยใช้ ALTER TABLE DROP COLUMN
การบํารุงรักษาตารางโดยอัตโนมัติ
หากต้องการดําเนินการบํารุงรักษาตารางโดยอัตโนมัติ คุณสามารถใช้ Lakehouse API ได้ สําหรับข้อมูลเพิ่มเติม โปรดดู จัดการเลคเฮ้าส์ด้วย Microsoft Fabric REST API
ปลาย
คุณยังสามารถใช้คุณลักษณะการบํารุงรักษา lakehouse ตาราง ในพอร์ทัล Fabric เพื่อลดความซับซ้อนของตาราง Delta ของคุณได้