แชร์ผ่าน


ข้อกําหนดและรูปแบบโซนการเชื่อมโยงการสะท้อนแบบเปิด

บทความนี้ให้รายละเอียดเกี่ยวกับโซนเริ่มต้นและข้อกําหนดการดําเนินการตาราง/คอลัมน์สําหรับการสะท้อนแบบเปิดใน Microsoft Fabric

เมื่อคุณสร้างฐานข้อมูลมิเรอร์แบบเปิดผ่านพอร์ทัล Fabric หรือ API สาธารณะในพื้นที่ทํางาน Fabric ของคุณแล้ว คุณจะได้รับ URL โซน Landing Zone ใน OneLake ในหน้า แรกของ รายการฐานข้อมูลที่มิเรอร์ของคุณ Landing Zone นี้เป็นที่ที่แอปพลิเคชันของคุณสร้างไฟล์ข้อมูลเมตาและข้อมูล Land ในรูปแบบ Parquet หรือข้อความที่คั่น รวมถึง CSV ไฟล์สามารถคลายการบีบอัดหรือบีบอัดด้วย Snappy, GZIP หรือ ZSTD สําหรับข้อมูลเพิ่มเติม โปรดดู ไฟล์ข้อมูลที่รองรับและรูปแบบ

สกรีนช็อตจากพอร์ทัล Fabric ที่แสดงตําแหน่ง URL ของโซนเริ่มต้นในหน้าแรกของรายการฐานข้อมูลที่มิเรอร์

โซนลงจอด

สําหรับฐานข้อมูลมิเรอร์ทุกฐานข้อมูล จะมีตําแหน่งที่เก็บข้อมูลที่ไม่ซ้ํากันใน OneLake สําหรับเมตาดาต้าและตารางเดลต้า การมิเรอร์แบบเปิดมีโฟลเดอร์โซน Landing Zone สําหรับแอปพลิเคชันในการสร้างไฟล์ข้อมูลเมตาและส่งข้อมูลไปยัง OneLake การมิเรอร์จะตรวจสอบไฟล์เหล่านี้ในโซน Landing Zone และอ่านโฟลเดอร์สําหรับตารางและข้อมูลที่เพิ่มเข้ามาใหม่

ตัวอย่างเช่น ถ้าคุณมีตาราง (Table A, , Table B) Table Cที่จะสร้างในโซน Landing Zone ให้สร้างโฟลเดอร์ เช่น URL ต่อไปนี้:

  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableA
  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableB
  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableC

ไฟล์ข้อมูลเมตาในโซน Landing Zone

ทุกโฟลเดอร์ตารางต้องมีไฟล์_metadata.json

ไฟล์ข้อมูลเมตาของตารางนี้มีระเบียน JSON เพื่อระบุเฉพาะคอลัมน์คีย์ที่ไม่ซ้ํากันเป็น keyColumns.

ตัวอย่างเช่น หากต้องการประกาศคอลัมน์ C1 และเป็น C2 คีย์ที่ไม่ซ้ํากันแบบผสมสําหรับตาราง:

{
   "keyColumns" : ["C1", "C2"]
}

หากมี keyColumns การระบุหรือไม่ _metadata.json ระบุ จะไม่สามารถอัปเดต/ลบได้ ไฟล์นี้สามารถเพิ่มได้ตลอดเวลา แต่เมื่อเพิ่มแล้ว keyColumns จะไม่สามารถเปลี่ยนแปลงได้

ไฟล์เหตุการณ์ในโซน Landing Zone

หากคุณเป็นคู่ค้าที่ใช้โซลูชันการมิเรอร์แบบเปิด หรือลูกค้าที่ต้องการให้รายละเอียดเพิ่มเติมแก่เราเกี่ยวกับชนิดของแหล่งข้อมูลที่คุณกําลังมิเรอร์ไปยัง OneLake เราได้เพิ่มไฟล์ใหม่_partnerEvents.json ไม่จําเป็น แต่ขอแนะนําเป็นอย่างยิ่ง

ตัวอย่าง:

{
  "partnerName": "testPartner",
  "sourceInfo": {
    "sourceType": "SQL",
    "sourceVersion": "2019",
    "additionalInformation": {
      "testKey": "testValue"
    }
  }
}

ข้อกําหนดของ _partnerEvents.json ไฟล์:

  • _partnerEvents.jsonควรวางไฟล์ไว้ที่ระดับฐานข้อมูลที่มิเรอร์ในโซน Landing Zone ไม่ใช่ต่อตาราง
  • สามารถ sourceType เป็นสตริงอธิบายใด ๆ ที่แสดงถึงแหล่งที่มา ไม่มีข้อจํากัดเกี่ยวกับค่านี้ เช่น "SQL", "Oracle", "Salesforce" เป็นต้น
  • partnerNameสามารถตั้งค่าเป็นชื่อใดก็ได้ที่คุณเลือกและสามารถเป็นตัวแทนของชื่อองค์กรของคุณได้ รักษาชื่อให้สอดคล้องกันในฐานข้อมูลมิเรอร์ทั้งหมด

ไฟล์ข้อมูลและรูปแบบในโซน Landing Zone

การสะท้อนแบบเปิดรองรับการรับข้อมูลในรูปแบบ Parquet หรือข้อความที่คั่น ไฟล์สามารถคลายการบีบอัดหรือบีบอัดด้วย Snappy, GZIP หรือ ZSTD

ข้อกําหนดของปาร์เก้

ข้อกําหนดข้อความที่คั่น

  • สําหรับรูปแบบข้อความที่คั่น ไฟล์ต้องมีแถวส่วนหัวในแถวแรก

  • สําหรับข้อความที่มีการคั่น ให้ระบุข้อมูลเพิ่มเติมในไฟล์ของคุณ_metadata.json FileExtensionจําเป็นต้องมีที่พัก แฟ้มข้อความที่คั่นมีคุณสมบัติและค่าเริ่มต้นต่อไปนี้:

    ทรัพย์สิน คำอธิบาย หมาย เหตุ
    FirstRowAsHeader จริง/เท็จสําหรับส่วนหัวของแถวแรก ต้องใช้สําหรับ true ไฟล์ข้อความที่มีตัวคั่น
    RowSeparator อักขระที่ใช้ในการแยกแถว ค่าเริ่มต้นคือ \r\n. ยังรองรับ \n และ \r.
    ColumnSeparator อักขระที่ใช้ในการแยกคอลัมน์ ค่าเริ่มต้นคือ ,. ยังรองรับ ;, และ |\t.
    QuoteCharacter อักขระที่ใช้ในการอ้างค่าที่มีตัวคั่น ค่าเริ่มต้นคือ ". สามารถเป็น ' หรือสตริงว่าง
    EscapeCharacter ใช้เพื่อหลีกหนีคําพูดภายในค่าที่เสนอราคา ค่าเริ่มต้นคือ \. นอกจากนี้ยังสามารถเป็น /, หรือ "ว่างเปล่า
    NullValue การแสดงสตริงของค่า null สามารถเป็น "", , "N/A", "null"ฯลฯ
    Encoding การเข้ารหัสอักขระของไฟล์ ค่าเริ่มต้นคือ UTF-8. รองรับการเข้ารหัสที่หลากหลายรวมถึง ascii, , utf-16windows-1252ฯลฯ
    SchemaDefinition กําหนดชื่อคอลัมน์ ชนิด และความสามารถในการเป็นค่า Null ไม่รองรับวิวัฒนาการสคีมา
    FileFormat รูปแบบของไฟล์ข้อมูล ค่าเริ่มต้นเป็นถ้า CSV ไม่ได้ระบุ ต้องเป็นรูปแบบ "DelimitedText" อื่นที่ไม่ใช่ CSV
    FileExtension ระบุนามสกุลไฟล์ เช่น .tsv, . .psv จําเป็นเมื่อใช้ DelimitedText.

    ตัวอย่างเช่น _metadata.json ไฟล์สําหรับ .tsv ไฟล์ข้อมูลที่มีสี่คอลัมน์:

    {
    "KeyColumns": [ "id" ],
    "SchemaDefinition": {
        "Columns": [
                      {
                      "Name": "id",
                      "DataType": "Int32"
                      },
                      {
                      "Name": "name",
                      "DataType": "String",
                      "IsNullable": true
                      },
                      {
                      "Name": "age",
                      "DataType": "Int32",
                      "IsNullable": true
                      },
                      {
                      "Name": "seqNum",
                      "DataType": "Int64",
                      "IsNullable": false
                      }
                    ]
                  },
    "FileFormat": "DelimitedText",
    "FileExtension": "tsv",
    "FileFormatTypeProperties": {
                                "FirstRowAsHeader": true,
                                "RowSeparator": "\r\n",
                                "ColumnSeparator": ",",
                                "QuoteCharacter": "'",
                                "EscapeCharacter": "\",
                                "NullValue": "N/A",
                                "Encoding": "UTF-8"
                             }
    }
    
  • เฉพาะรูปแบบข้อความที่คั่นเท่านั้นที่คาดว่าจะมีชนิดข้อมูลในไฟล์_metadata.json ไฟล์ Parquet ไม่จําเป็นต้องระบุข้อมูลประเภทคอลัมน์ ประเภทข้อมูลที่รองรับในปัจจุบัน:

ชนิดข้อมูลที่รองรับ คำอธิบาย
Double ตัวเลขที่มีทศนิยม ใช้เมื่อต้องการความแม่นยําสูง (เช่น 3.14159)
Single ตัวเลขที่มีทศนิยม แต่แม่นยําน้อยกว่า Double (เช่น 3.14)
Int16 จํานวนเต็มขนาดเล็ก โดยทั่วไปอยู่ระหว่าง -32,768 ถึง 32,767
Int64 จํานวนเต็มที่มากใช้สําหรับจํานวนใหญ่หรือ ID
Int32 จํานวนเต็มมาตรฐานที่ใช้กันทั่วไปสําหรับการนับหรือจัดทําดัชนี
DateTime ค่าวันที่และเวลาแบบเต็ม (เช่น 2025-06-17 14:30:00)
IDate วันที่ในปฏิทินที่ไม่มีเวลา (เช่น 2025-06-17)
ITime ค่าวันที่และเวลาแบบเต็ม (เช่น 2025-06-17 14:30:00)
String ข้อมูลข้อความ เช่น ชื่อ ป้ายกํากับ หรือคําอธิบาย
Boolean ค่าจริงหรือเท็จ มักใช้สําหรับสลับหรือตัวเลือกใช่/ไม่ใช่
ByteArray ข้อมูลไบนารีดิบ เช่น ไฟล์ รูปภาพ หรือเนื้อหาที่เข้ารหัส

ข้อกําหนดของรูปแบบ

ไฟล์ทั้งหมดที่เขียนไปยังโซน Landing Zone มีรูปแบบต่อไปนี้:

<rowMarker><DataColumns>

  • rowMarker: ชื่อคอลัมน์คือ __rowMarker__ (รวมถึงขีดล่างสองตัวก่อนและหลัง rowMarker) __rowMarker__ ค่านิยมและพฤติกรรม:

    __rowMarker__ (สถานการณ์สมมติ) ถ้าไม่มีแถวที่มีคอลัมน์คีย์เดียวกันในปลายทาง ถ้าแถวมีคอลัมน์คีย์เดียวกันในปลายทาง
    0 (แทรก) แทรกแถวไปยังปลายทาง แทรกแถวไปยังปลายทางไม่มีการตรวจสอบความถูกต้องสําหรับการตรวจสอบคอลัมน์คีย์ dup
    1 (อัพเดท) แทรกแถวไปยังปลายทางไม่มีการตรวจสอบ / ข้อยกเว้นเพื่อตรวจสอบการมีอยู่ของแถวที่มีคอลัมน์คีย์เดียวกัน อัปเดตแถวด้วยคอลัมน์คีย์เดียวกัน
    2 (ลบ) ไม่มีการเปลี่ยนแปลงข้อมูล ไม่มีการตรวจสอบความถูกต้อง / ข้อยกเว้นเพื่อตรวจสอบการมีอยู่ของแถวที่มีคอลัมน์คีย์เดียวกัน ลบแถวที่มีคอลัมน์คีย์เดียวกัน
    4 (อัพเซิร์ต) แทรกแถวไปยังปลายทางไม่มีการตรวจสอบ / ข้อยกเว้นเพื่อตรวจสอบการมีอยู่ของแถวที่มีคอลัมน์คีย์เดียวกัน อัปเดตแถวด้วยคอลัมน์คีย์เดียวกัน
  • ลําดับแถว: บันทึกทั้งหมดในไฟล์ควรอยู่ในลําดับธรรมชาติตามที่ใช้ในธุรกรรม นี่เป็นสิ่งสําคัญสําหรับแถวเดียวกันที่อัปเดตหลายครั้ง การมิเรอร์แบบเปิดจะนําการเปลี่ยนแปลงไปใช้โดยใช้ลําดับในไฟล์

  • ลําดับไฟล์: ควรเพิ่มไฟล์ในจํานวนที่เพิ่มขึ้นอย่างซ้ําซากจําเจ

  • ชื่อไฟล์: ชื่อไฟล์มี 20 หลัก เช่นเดียวกับ 00000000000000000001.parquet ไฟล์แรก และ 00000000000000000002.parquet ไฟล์ที่สอง ชื่อไฟล์ควรเป็นตัวเลขต่อเนื่อง ไฟล์จะถูกลบโดยบริการมิเรอร์โดยอัตโนมัติ แต่ไฟล์สุดท้ายจะถูกทิ้งไว้เพื่อให้ระบบผู้เผยแพร่สามารถอ้างอิงเพื่อเพิ่มไฟล์ถัดไปตามลําดับ

สําคัญ

__rowMarker__คอลัมน์ต้องเป็นคอลัมน์สุดท้ายในรายการ

ไฟล์ที่ไม่ต่อเนื่อง

นอกจากนี้ยังรองรับไฟล์ที่ไม่ต่อเนื่อง ไฟล์จะถูกอ่านตามการประทับเวลา เมื่อต้องการระบุสิ่งนี้และค่าเริ่มต้นเป็นการเปลี่ยนแปลง upsert แทนที่จะเป็นการแทรก ให้อัปเดตไฟล์ _metadata.json ดังนี้:

{
   "keyColumns" : ["id"],
   "fileDetectionStrategy": LastUpdateTimeFileDetection,
   "isUpsertDefaultRowMarker": true
}

'ค่าเริ่มต้นในการอัปเซิร์ต' ไม่ได้ขึ้นอยู่กับไฟล์ที่ไม่ต่อเนื่อง รองรับชุดค่าผสมต่อไปนี้ทั้งหมด:

  • มีทั้ง fileDetectionStrategy เป็น LastUpdateTimeFileDetection และ isUpsertDefaultRowMarker เป็น true
  • มีเฉพาะ isUpsertDefaultRowMarker เป็น true เท่านั้น
  • มีเฉพาะ fileDetectionStrategy เป็น LastUpdateTimeFileDetection เท่านั้น
  • เริ่ม ต้น

โหลดเริ่มต้น

สําหรับการโหลดข้อมูลเบื้องต้นลงในฐานข้อมูลมิเรอร์แบบเปิด ใน __rowMarker__ ไฟล์ข้อมูลเริ่มต้นเป็นทางเลือกและไม่แนะนํา การมิเรอร์จะถือว่าทั้งแฟ้มเป็น INSERT เมื่อ __rowMarker__ ไม่มีอยู่

เพื่อประสิทธิภาพที่ดีขึ้นและเมตริกที่แม่นยํา เป็น __rowMarker__ ฟิลด์บังคับสําหรับการเปลี่ยนแปลงที่เพิ่มขึ้นเพื่อใช้การดําเนินการอัปเดต/ลบ/อัปเซิร์ต

การเปลี่ยนแปลงที่เพิ่มขึ้น

การมิเรอร์แบบเปิดจะอ่านการเปลี่ยนแปลงที่เพิ่มขึ้นตามลําดับและนําไปใช้กับตารางเดลต้าเป้าหมาย ลําดับเป็นนัยในบันทึกการเปลี่ยนแปลงและตามลําดับของไฟล์

การเปลี่ยนแปลงข้อมูลจะถือเป็นการเปลี่ยนแปลงที่เพิ่มขึ้นเมื่อพบคอลัมน์จาก __rowMarker__ แถว/ไฟล์ใดๆ

แถวที่อัปเดตต้องมีข้อมูลแถวแบบเต็ม พร้อมคอลัมน์ทั้งหมด

ต่อไปนี้คือตัวอย่างข้อมูลปาร์เก้บางส่วนของประวัติแถวเพื่อเปลี่ยน EmployeeLocationEmployeeID E0001 จาก Redmond เป็น Bellevue ในสถานการณ์สมมตินี้ คอลัมน์EmployeeIDถูกทําเครื่องหมายเป็นคอลัมน์หลักในไฟล์ข้อมูลเมตาในโซนเริ่มต้น

EmployeeID,EmployeeLocation,__rowMarker__
E0001,Redmond,0
E0002,Redmond,0
E0003,Redmond,0
E0001,Bellevue,1

ถ้าคอลัมน์คีย์ได้รับการอัปเดต ควรแสดงโดย DELETE บนคอลัมน์คีย์ก่อนหน้า และแถว INSERT ที่มีคีย์และข้อมูลใหม่ ตัวอย่างเช่น ประวัติแถวเพื่อเปลี่ยน __rowMarker__ ตัวระบุที่ไม่ซ้ํากันสําหรับ EmployeeID E0001 เป็น E0002 คุณไม่จําเป็นต้องให้ข้อมูลคอลัมน์ทั้งหมดสําหรับแถว DELETE เฉพาะคอลัมน์หลักเท่านั้น

EmployeeID,EmployeeLocation,__rowMarker__
E0001,Bellevue,0
E0001,NULL,2
E0002,Bellevue,0

การทํางานของตาราง

การมิเรอร์แบบเปิดรองรับการดําเนินการของตาราง เช่น การเพิ่ม วาง และเปลี่ยนชื่อตาราง

เพิ่มตาราง

การมิเรอร์แบบเปิดจะรับตารางใดๆ ที่เพิ่มลงในโซนลงจอดโดยแอปพลิเคชัน เปิดการสแกนมิเรอร์สําหรับตารางใหม่ในการทําซ้ําทุกครั้ง

วางตาราง

การมิเรอร์แบบเปิดจะติดตามชื่อโฟลเดอร์ ถ้าโฟลเดอร์ตารางถูกลบ การมิเรอร์แบบเปิดจะวางตารางในฐานข้อมูลที่มิเรอร์

ถ้าโฟลเดอร์ถูกสร้างขึ้นใหม่ การมิเรอร์แบบเปิดจะดรอปตารางและสร้างใหม่ด้วยข้อมูลใหม่ในโฟลเดอร์ ซึ่งทําได้โดยการติดตาม ETag สําหรับโฟลเดอร์

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

เปลี่ยนชื่อตาราง

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

Schema

สามารถระบุเส้นทางตารางได้ภายในโฟลเดอร์ schema โซน Landing Zone ของ Schema ควรมี <schemaname>.schema ชื่อโฟลเดอร์ อาจมีสคีมาได้หลายสคีมา และอาจมีหลายตารางในสคีมา

ตัวอย่างเช่น ถ้าคุณมี Schema (Schema1, ) Schema2และตาราง (Table A, , Table B) Table Cที่จะสร้างในโซน Landing Zone ให้สร้างโฟลเดอร์ เช่น เส้นทางต่อไปนี้ใน OneLake:

  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema1.schema/TableA
  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema1.schema/TableB
  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema2.schema/TableC

คอลัมน์ตารางและการดําเนินการคอลัมน์

ชนิดคอลัมน์

  • รองรับประเภทปาร์เก้อย่างง่ายในโซนลงจอด
  • ชนิดที่ซับซ้อนควรเขียนเป็นสตริง JSON
  • ประเภทไบนารีที่ซับซ้อน เช่น ภูมิศาสตร์ รูปภาพ ฯลฯ สามารถจัดเก็บเป็นประเภทไบนารีในโซนลงจอดได้

เพิ่มคอลัมน์

หากมีการเพิ่มคอลัมน์ใหม่ลงในไฟล์ parquet หรือ CSV การมิเรอร์แบบเปิดจะเพิ่มคอลัมน์ลงในตารางเดลต้า

ลบคอลัมน์

ถ้าคอลัมน์ถูกทิ้งจากแฟ้มบันทึกใหม่ ให้เปิดที่เก็บการ NULL สะท้อนสําหรับคอลัมน์เหล่านั้นในแถวใหม่ และแถวเก่าจะมีคอลัมน์ที่มีอยู่ในข้อมูล เมื่อต้องการลบคอลัมน์ ให้ วางตาราง และสร้างโฟลเดอร์ตารางในโซนเริ่มต้นอีกครั้ง ซึ่งจะส่งผลให้เกิดการสร้างตารางเดลต้าใหม่ด้วยสคีมาและข้อมูลใหม่

การมิเรอร์แบบเปิดจะรวมคอลัมน์ทั้งหมดจากข้อมูลที่เพิ่มในเวอร์ชันก่อนหน้าเสมอ เมื่อต้องการลบคอลัมน์ ให้สร้างตาราง/โฟลเดอร์ใหม่

เปลี่ยนชนิดคอลัมน์

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

เปลี่ยนชื่อคอลัมน์

เมื่อต้องการเปลี่ยนชื่อคอลัมน์ ให้ลบโฟลเดอร์ตาราง และสร้างโฟลเดอร์ใหม่ที่มีข้อมูลทั้งหมดและชื่อคอลัมน์ใหม่

กระบวนการล้างข้อมูล

กระบวนการล้างข้อมูลสําหรับการเปิดการสะท้อนจะย้ายไฟล์ที่ประมวลผลทั้งหมดไปยังโฟลเดอร์แยกต่างหากที่เรียกว่า _ProcessedFiles หรือ_FilesReadyToDelete หลังจากเจ็ดวัน ไฟล์จะถูกลบออกจากโฟลเดอร์นี้

ขั้นตอนถัดไป