เพิ่มประสิทธิภาพตาราง Lakehouse ตามการตรวจสอบความสมบูรณ์

นําไปใช้กับ:✅ ตําแหน่งข้อมูลการวิเคราะห์ SQL ใน Microsoft Fabric

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีสร้างไปป์ไลน์ Microsoft Fabric เพื่อดําเนินการบํารุงรักษาตารางอัจฉริยะ

โซลูชันนี้เรียกใช้กระบวนงานที่เก็บไว้ sys.sp_get_table_health_metrics T-SQL บนจุดสิ้นสุดการวิเคราะห์ Lakehouse SQL ประเมินผลลัพธ์ และเรียกใช้ OPTIMIZE เฉพาะเมื่อตารางต้องการการบํารุงรักษาจริงๆ เท่านั้น รูปแบบ "ตรวจสอบแล้วดําเนินการ" นี้ช่วยป้องกันการใช้จ่ายในการประมวลผลที่ไม่จําเป็นในตารางที่สมบูรณ์ พร้อมทั้งทําให้แน่ใจว่าตารางที่เสื่อมสภาพจะได้รับการบํารุงรักษาโดยอัตโนมัติ

เหตุใดจึงจําเป็นต้องบํารุงรักษา

ตาราง Lakehouse สามารถสะสมไฟล์ Parquet ขนาดเล็กมากเกินไปเมื่อเวลาผ่านไป ซึ่งส่งผลเสียต่อประสิทธิภาพการสืบค้นบนปลายทางการวิเคราะห์ SQL

แทนที่จะทํางาน OPTIMIZE ตามกําหนดการคงที่โดยไม่คํานึงถึงสถานะของตาราง ไปป์ไลน์นี้จะทําการตัดสินใจอย่างชาญฉลาด: จะตรวจสอบความสมบูรณ์ของตารางก่อน และทริกเกอร์การเพิ่มประสิทธิภาพเมื่อตรวจพบความผิดปกติเท่านั้น

ข้อกำหนดเบื้องต้น

ก่อนที่คุณจะเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:

  • พื้นที่ทํางาน Microsoft Fabric ที่มีสิทธิ์ผู้สนับสนุนหรือสูงกว่า
  • เลคเฮาส์ในพื้นที่ทํางานนั้นที่มีตารางเดลต้าอย่างน้อยหนึ่งตารางที่คุณต้องการตรวจสอบ บทช่วยสอนนี้ใช้ Lakehouse ชื่อ SalesDataLakehouse.
  • ความคุ้นเคยกับไปป์ไลน์ข้อมูล Fabric
  • ความคุ้นเคยกับโน้ตบุ๊ก Fabric

โครงสร้างโซลูชัน

ไปป์ไลน์ที่เสร็จสมบูรณ์มีโครงสร้างดังนี้:

  1. กิจกรรมสคริปต์: ดําเนินการ sp_get_table_health_metrics กับตารางเป้าหมายและส่งคืนเมตริกความสมบูรณ์ของตารางเป็นเอาต์พุตที่มีโครงสร้าง
  2. ถ้ากิจกรรมเงื่อนไข: อ่าน PotentialAnomalyType โดยตรงจากเอาต์พุตสคริปต์และตรวจสอบว่ามีค่ามากกว่าศูนย์หรือไม่ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับ PotentialAnomalyType, ดู รหัสชนิดความผิดปกติที่อาจเกิดขึ้น
  3. กิจกรรมสมุดบันทึก (ภายในสาขา True ): ทํางาน OPTIMIZE บนตารางจากสมุดบันทึก Spark

ในตอนท้ายของบทช่วยสอนนี้ คุณจะมีสมุดบันทึกที่รับพารามิเตอร์จากไปป์ไลน์และปรับตารางให้เหมาะสมเมื่อถูกทริกเกอร์

ขั้นตอนที่ 1: สร้างสมุดบันทึกการเพิ่มประสิทธิภาพ

สมุดบันทึกยอมรับ Lakehouse, Schema และชื่อตารางเป้าหมายเป็นพารามิเตอร์จากไปป์ไลน์ จากนั้นดําเนินการ OPTIMIZE โดยใช้ Spark SQL

  1. ในพื้นที่ทํางาน Fabric ของคุณ ให้เลือก+ สมุดบันทึกรายการใหม่>
  2. ตั้งชื่อสมุดบันทึกว่า Optimize-Table
  3. ภายใต้ สถานที่ ให้เลือกเลคเฮาส์ที่จัดเก็บตารางที่คุณตรวจสอบ แบบฝึกหัดนี้ใช้เลคเฮาส์ชื่อ SalesDataLakehouse.
  4. เลือก สร้าง

เพิ่มเซลล์พารามิเตอร์

เซลล์แรกกําหนดตัวแปรที่ไปป์ไลน์แทนที่ในขณะรันไทม์

  1. ในเซลล์แรก ให้ป้อนพารามิเตอร์ต่อไปนี้ ค่าไม่สําคัญ และไปป์ไลน์จะแทนที่ค่าเหล่านั้นในรันไทม์

    # Parameters 
    lakehouse_name = "<LakehouseName>"
    schema_name    = "<SchemaName>"
    table_name     = "<TableName>"
    

    สำคัญ

    การกําหนดพารามิเตอร์ทํางานอย่างไรในสมุดบันทึก Fabric: ในขณะรันไทม์ Fabric จะแทรกเซลล์ใหม่ทันทีหลังจากเซลล์พารามิเตอร์ที่กําหนดตัวแปรเหล่านี้ใหม่ด้วยค่าที่ส่งผ่านไปป์ไลน์ ค่าที่คุณตั้งค่าไว้ที่นี่จะเริ่มต้นตัวแปรและปรับปรุงความสามารถในการอ่านเท่านั้น

  2. เลือกเมนูเซลล์ (...) >สลับเซลล์พารามิเตอร์ เพื่อทําเครื่องหมายเซลล์นี้เป็นเซลล์พารามิเตอร์

เพิ่มเซลล์ OPTIMIZE

คําสั่งนี้เป็น OPTIMIZE คําสั่ง Spark SQL ไม่ใช่คําสั่ง T-SQL คุณต้องเรียกใช้ในสภาพแวดล้อม Spark เช่น สมุดบันทึก ข้อกําหนดงาน Spark หรืออินเทอร์เฟซการบํารุงรักษา Lakehouse จุดสิ้นสุดการวิเคราะห์ SQL และตัวแก้ไขคิวรี SQL ของคลังสินค้าไม่สนับสนุนคําสั่งนี้โดยตรง

  1. ในเซลล์ที่สอง ให้ป้อน:

    full_name = f"{lakehouse_name}.{schema_name}.{table_name}"
    print(f"Optimizing {full_name} ...")
    
    result = spark.sql(f"OPTIMIZE {full_name}")
    result.show(truncate=False)
    
  2. เพิ่มเซลล์ Markdown ตามต้องการเพื่อจัดทําเอกสารสมุดบันทึกสําหรับผู้ใช้รายอื่นอย่างถูกต้อง สมุดบันทึกที่เสร็จสมบูรณ์ของคุณควรมีลักษณะดังนี้

    สกรีนช็อตของสมุดบันทึก Fabric ที่มีชื่อว่า 'ปรับตาราง Lakehouse ให้เหมาะสมเมื่อการตรวจสอบสถานภาพแสดงว่าจําเป็น' โดยมีเซลล์ PySpark สองเซลล์: เซลล์หนึ่งตั้งค่าพารามิเตอร์ Lakehouse, Schema และตารางที่จัดเตรียมไว้ให้ไปป์ไลน์ และอีกเซลล์หนึ่งเรียกใช้คําสั่ง OPTIMIZE สําหรับตาราง Lakehouse ที่เลือก

หมายเหตุ

ตัวอย่างนี้พิจารณาเลคเฮาส์ที่เปิดใช้งานสคีมา ปรับชื่อ full_name สามส่วนตามนั้นหากคุณไม่ได้ใช้สคีมาเลคเฮาส์

ขั้นตอนที่ 2: สร้างไปป์ไลน์

  1. ในพื้นที่ทํางาน Fabric ของคุณ ให้เลือก +ไปป์ไลน์รายการ>ใหม่

  2. ตั้งชื่อไปป์ไลน์ Check-and-Optimize-Table

  3. เลือกพื้นหลังพื้นที่ทํางานไปป์ไลน์ แล้วเปิดแท็บ พารามิเตอร์ เพิ่มพารามิเตอร์สามตัว:

    ชื่อ ประเภท ค่าพื้นฐาน
    lakehouse_name สตริง SalesDataLakehouse
    schema_name สตริง dbo
    table_name สตริง FactSales

ขั้นตอนที่ 3: เพิ่มกิจกรรมสคริปต์

กิจกรรมสคริปต์จะทํางาน sys.sp_get_table_health_metrics บนตําแหน่งข้อมูลการวิเคราะห์ SQL และบันทึกผลลัพธ์

สำคัญ

ใช้กิจกรรมสคริปต์ ไม่ใช่กิจกรรมกระบวนงานที่เก็บไว้ เฉพาะกิจกรรมสคริปต์เท่านั้นที่แสดงชุดผลลัพธ์เป็นเอาต์พุต JSON ที่มีโครงสร้างซึ่งกิจกรรมดาวน์สตรีมสามารถแยกวิเคราะห์ได้

  1. จากแท็บ กิจกรรม ให้เลือก สคริปต์ เพื่อเพิ่มลงในพื้นที่ทํางาน
  2. ตั้งชื่อว่า ตรวจสอบความสมบูรณ์ของตาราง
  3. ในแท็บ การตั้งค่า :
    • การเชื่อมต่อ: เลือกตําแหน่งข้อมูลการวิเคราะห์ SQL สําหรับ Lakehouse ของคุณ หากไม่อยู่ในรายการ ให้เลือก เรียกดูทั้งหมด ที่ด้านล่างของรายการดรอปดาวน์ จากนั้นค้นหาตําแหน่งข้อมูลการวิเคราะห์ SQL ของ Lakehouse ของคุณ

    • ชนิดสคริปต์: เลือก คิวรี

    • สคริปต์: เลือก เพิ่มเนื้อหาแบบไดนามิก และป้อนนิพจน์ต่อไปนี้:

      @concat('EXEC sys.sp_get_table_health_metrics ''',
              pipeline().parameters.schema_name, '.',
              pipeline().parameters.table_name, '''')
      

นิพจน์นี้สร้างคําสั่ง SQL ที่รันกระบวนงานที่เก็บไว้กับตาราง EXEC sys.sp_get_table_health_metrics 'dbo.FactSales'เป้าหมายของคุณ เช่น

ตรวจสอบเอาต์พุตสคริปต์

เรียกใช้ไปป์ไลน์หนึ่งครั้งและตรวจสอบเอาต์พุตกิจกรรมสคริปต์ คุณเห็นวัตถุ JSON ที่คล้ายกับ:

{
  "resultSetCount": 1,
  "resultSets": [
    {
      "rowCount": 1,
      "rows": [
        {
          "PotentialAnomalyType": 3,
          "PotentialAnomalyDescription": "Too many small files...",
          "FileCount": 2688,
          "...": "..."
        }
      ]
    }
  ]
}

สำคัญ

ผลลัพธ์ที่แท้จริงของคุณอาจแตกต่างกันไปตามสถานะของตารางของคุณ กุญแจสําคัญคือมันส่งคืนคอลัมน์ที่เปิดเผยโดย sys.sp_get_table_health_metrics.

ขั้นตอนที่ 4: เพิ่มกิจกรรม If Condition

กิจกรรม If Condition จะ PotentialAnomalyType อ่านโดยตรงจากเอาต์พุตกิจกรรม Script และทําการตัดสินใจตามผลลัพธ์ ใช้ขั้นตอนต่อไปนี้:

  1. จากแท็บ กิจกรรม ให้เลือก ถ้า เงื่อนไข เพื่อเพิ่มกิจกรรมลงบนพื้นที่ทํางาน

  2. ตั้งชื่อว่าตรวจสอบความผิดปกติ

  3. วาดลูกศร สําเร็จ (สีเขียว) จาก ตรวจสอบความสมบูรณ์ของตาราง เพื่อตรวจสอบความผิดปกติ

  4. ในแท็บ กิจกรรม ของกิจกรรม เงื่อนไข ถ้า ให้ตั้งค่า นิพจน์ เป็น:

    @greater(int(activity('Check Table Health').output.resultSets[0].rows[0]['PotentialAnomalyType']), 0)
    

นิพจน์นี้อ่านแถวแรกที่ส่งคืนโดย sys.sp_get_table_health_metricsส่ง PotentialAnomalyType เป็นจํานวนเต็ม และประเมิน true เมื่อค่ามากกว่าศูนย์ ซึ่งบ่งชี้ถึงความผิดปกติที่ตรวจพบในตารางเป้าหมาย

ขั้นตอนที่ 5: เพิ่มกิจกรรมสมุดบันทึก (สาขาทรู)

เมื่อเลือกกิจกรรม หากเงื่อนไข ให้เลือก แก้ไข (ไอคอนดินสอ) ถัดจาก จริง พื้นที่ทํางานจะสลับไปยังพื้นที่ทํางานย่อยที่มีขอบเขตไปยังสาขา True

  1. ลากกิจกรรมสมุด บันทึก ไปยังพื้นที่ทํางานย่อย True

  2. ตั้งชื่อว่า Run OPTIMIZE

  3. ในแท็บ การตั้งค่า :

    • สมุดบันทึก: เลือกสมุดบันทึก Optimize-Table ที่คุณสร้างขึ้นในขั้นตอนที่ 1

    • ขยาย พารามิเตอร์พื้นฐาน แล้วเพิ่มสามแถว:

      ชื่อ ประเภท ค่า
      lakehouse_name สตริง @pipeline().parameters.lakehouse_name
      schema_name สตริง @pipeline().parameters.schema_name
      table_name สตริง @pipeline().parameters.table_name

ค่าคอลัมน์ชื่อสามค่าต้องตรงกับชื่อตัวแปรในเซลล์พารามิเตอร์ของสมุดบันทึกทุกประการ

หมายเหตุ

คุณสามารถปล่อยให้ กิจกรรมเท็จ ว่างไว้ได้ กิจกรรม ถ้าเงื่อนไข จะถือว่าสาขา False ที่ว่างเปล่าเป็น no-op และรายงานไปป์ไลน์ว่าสําเร็จ

ไปป์ไลน์ที่เสร็จสมบูรณ์ของคุณควรมีลักษณะดังนี้:

สกรีนช็อตของไปป์ไลน์ข้อมูล Fabric ที่มีกิจกรรมสคริปต์ ตรวจสอบความสมบูรณ์ของตาราง ที่เชื่อมต่อกับกิจกรรมตามเงื่อนไข ตรวจสอบความผิดปกติ สาขาจริงรันกิจกรรมสมุดบันทึก OPTIMIZE ในขณะที่สาขาเท็จไม่มีกิจกรรม

ขั้นตอนที่ 6: ตรวจสอบและเรียกใช้

  1. เลือก ตรวจสอบความถูกต้อง บนแถบเครื่องมือไปป์ไลน์เพื่อตรวจสอบข้อผิดพลาดในการกําหนดค่า

  2. เลือก เรียกใช้ เพื่อเรียกใช้ไปป์ไลน์ด้วยตนเอง

  3. ตรวจสอบการวิ่งและยืนยัน:

    1. ตรวจสอบความสมบูรณ์ของตาราง: ตรวจสอบผลลัพธ์จากกิจกรรมนี้เมื่อทํางาน คุณควรเห็นผลลัพธ์จาก sys.sp_get_table_health_metrics กระบวนงานที่เก็บไว้ในรูปแบบ JSON
    2. ตรวจสอบความผิดปกติ: ประเมินอย่างถูกต้องโดยการอ่าน PotentialAnomalyType โดยตรงจากเอาต์พุตสคริปต์
    3. เรียกใช้ OPTIMIZE (เฉพาะเมื่อ PotentialAnomalyType > 0): หากกิจกรรม ตรวจสอบความผิดปกติ ประเมิน เป็น จริง ให้ตรวจสอบอินพุตของกิจกรรม เรียกใช้ OPTIMIZE เพื่อตรวจสอบว่าใช้พารามิเตอร์ที่ถูกต้อง (ชื่อเลคเฮาส์ สคีมา และชื่อตาราง) และตรวจสอบผลลัพธ์เพื่อตรวจสอบข้อความจาก OPTIMIZE การดําเนินการ

ล้างแหล่งข้อมูล

ถ้าคุณสร้างทรัพยากรสําหรับบทช่วยสอนนี้เท่านั้นและไม่ต้องการอีกต่อไป ให้ลบรายการต่อไปนี้ออกจากพื้นที่ทํางานของคุณ:

  • ไปป์ไลน์ Check-and-Optimize-Table
  • สมุดบันทึก Optimize-Table