ตัวเชื่อมต่อ Spark สําหรับ Microsoft Fabric Synapse Data Warehouse
ตัวเชื่อมต่อ Spark สําหรับ Synapse Data Warehouse ช่วยให้นักพัฒนา Spark และนักวิทยาศาสตร์ข้อมูลสามารถเข้าถึงและทํางานกับข้อมูลจาก คลังสินค้าและจุดสิ้นสุดการวิเคราะห์ SQL ของเลคเฮ้าส์ได้ ตัวเชื่อมต่อมีความสามารถต่อไปนี้:
- คุณสามารถทํางานกับข้อมูลจากคลังสินค้าหรือจุดสิ้นสุดการวิเคราะห์ SQL ในพื้นที่ทํางานเดียวกันหรือในหลายพื้นที่ทํางานได้
- จุดสิ้นสุดการวิเคราะห์ SQL ของเลคเฮ้าส์จะค้นพบโดยอัตโนมัติตามบริบทพื้นที่ทํางาน
- ตัวเชื่อมต่อมี Spark API แบบประยุกต์ ทําให้มีความซับซ้อนพื้นฐาน และดําเนินการด้วยโค้ดเพียงบรรทัดเดียว
- ในขณะที่คุณกําลังเข้าถึงตารางหรือมุมมอง ตัวเชื่อมต่อจะสนับสนุนแบบจําลองความปลอดภัยที่กําหนดไว้ในระดับกลไกจัดการ SQL แบบจําลองเหล่านี้รวมถึงการรักษาความปลอดภัยระดับออบเจ็กต์ (OLS) การรักษาความปลอดภัยระดับแถว (RLS) และการรักษาความปลอดภัยระดับคอลัมน์ (CLS)
- ตัวเชื่อมต่อติดตั้งไว้ล่วงหน้าภายในรันไทม์ Fabric ซึ่งจะขจัดความจําเป็นสําหรับการติดตั้งแยกต่างหาก
หมายเหตุ
ตัวเชื่อมต่ออยู่ในตัวอย่างในขณะนี้ สําหรับข้อมูลเพิ่มเติม โปรดดู ข้อจํากัด ปัจจุบันในภายหลังในบทความนี้
การรับรองความถูกต้อง
การรับรองความถูกต้อง Microsoft Entra เป็นวิธีการรับรองความถูกต้องแบบรวม ผู้ใช้ลงชื่อเข้าใช้พื้นที่ทํางาน Microsoft Fabric และข้อมูลประจําตัวของพวกเขาจะถูกส่งผ่านไปยังเครื่องมือ SQL โดยอัตโนมัติเพื่อการรับรองความถูกต้องและการรับรองความถูกต้อง ข้อมูลประจําตัวจะถูกแมปโดยอัตโนมัติ และผู้ใช้ไม่จําเป็นต้องระบุตัวเลือกการกําหนดค่าที่เฉพาะเจาะจง
การอนุญาต
ในการเชื่อมต่อกับกลไกจัดการ SQL ผู้ใช้ต้องมีสิทธิ์ในการอ่านเป็นอย่างน้อย (คล้ายกับสิทธิ์การเชื่อมต่อใน SQL Server) บนคลังสินค้าหรือจุดสิ้นสุดการวิเคราะห์ SQL (ระดับรายการ) ผู้ใช้ยังต้องมีสิทธิ์ระดับออบเจ็กต์ที่ละเอียดในการอ่านข้อมูลจากตารางหรือมุมมองที่ระบุ เมื่อต้องการเรียนรู้เพิ่มเติม ดูการรักษาความปลอดภัยสําหรับคลังข้อมูลใน Microsoft Fabric
เทมเพลตโค้ดและตัวอย่าง
ใช้ลายเซ็นของวิธีการ
คําสั่งต่อไปนี้แสดงลายเซ็นของ synapsesql
วิธีการ สําหรับคําขอการอ่าน อาร์กิวเมนต์สามส่วน tableName
จําเป็นสําหรับการเข้าถึงตารางหรือมุมมองจากคลังสินค้าและจุดสิ้นสุดการวิเคราะห์ SQL ของเลคเฮ้าส์ อัปเดตอาร์กิวเมนต์ด้วยชื่อต่อไปนี้ ตามสถานการณ์สมมติของคุณ:
- ส่วนที่ 1: ชื่อของคลังสินค้าหรือเลคเฮ้าส์
- ส่วนที่ 2: ชื่อของสคีมา
- ส่วนที่ 3: ชื่อของตารางหรือมุมมอง
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame
นอกเหนือจากการอ่านจากตารางหรือมุมมองโดยตรง ตัวเชื่อมต่อนี้ยังช่วยให้คุณสามารถระบุคิวรีแบบกําหนดเองหรือแบบพาสทรู ซึ่งจะถูกส่งผ่านไปยังกลไกจัดการ SQL และผลลัพธ์จะถูกส่งกลับไปยัง Spark
spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame
ขณะที่ตัวเชื่อมต่อนี้ค้นพบจุดสิ้นสุดสําหรับคลังสินค้า /lakehouse ที่ระบุโดยอัตโนมัติ ถ้าคุณต้องการระบุอย่างชัดเจน คุณสามารถทําได้
//For warehouse
spark.conf.set("spark.datawarehouse.<warehouse name>.sqlendpoint", "<sql endpoint,port>")
//For lakehouse
spark.conf.set("spark.lakehouse.<lakeshouse name>.sqlendpoint", "<sql endpoint,port>")
//Read from table
spark.read.synapsesql("<warehouse/lakeshouse name>.<schema name>.<table or view name>")
อ่านข้อมูลภายในพื้นที่ทํางานเดียวกัน
สำคัญ
เรียกใช้คําสั่งนําเข้าเหล่านี้ที่จุดเริ่มต้นของสมุดบันทึกของคุณ หรือก่อนที่คุณจะเริ่มใช้ตัวเชื่อมต่อ:
สําหรับสเกลา
import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._
import com.microsoft.spark.fabric.Constants
สําหรับ PySpark (Python)
import com.microsoft.spark.fabric
from com.microsoft.spark.fabric.Constants import Constants
โค้ดต่อไปนี้เป็นตัวอย่างในการอ่านข้อมูลจากตารางหรือมุมมองใน Spark DataFrame:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
โค้ดต่อไปนี้เป็นตัวอย่างในการอ่านข้อมูลจากตารางหรือมุมมองใน Spark DataFrame ที่มีขีดจํากัดจํานวนแถว 10:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").limit(10)
โค้ดต่อไปนี้เป็นตัวอย่างสําหรับอ่านข้อมูลจากตารางหรือมุมมองใน Spark DataFrame หลังจากที่คุณใช้ตัวกรอง:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").filter("column name == 'value'")
โค้ดต่อไปนี้เป็นตัวอย่างในการอ่านข้อมูลจากตารางหรือมุมมองใน Spark DataFrame สําหรับคอลัมน์ที่เลือกเท่านั้น:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")
อ่านข้อมูลทั่วทั้งพื้นที่ทํางาน
ในการเข้าถึงและอ่านข้อมูลจากคลังข้อมูลหรือเลคเฮ้าส์ข้ามพื้นที่ทํางาน คุณสามารถระบุ ID พื้นที่ทํางานที่มีคลังข้อมูลหรือเลคเฮ้าส์ของคุณ อยู่ จากนั้นจึงสร้างเลคเฮ้าส์หรือไอดีคลังข้อมูล บรรทัดนี้แสดงตัวอย่างของการอ่านข้อมูลจากตารางหรือมุมมองใน Spark DataFrame จากคลังข้อมูลหรือเลคเฮ้าส์ที่มี ID พื้นที่ทํางานที่ระบุและ ID ของเลคเฮ้าส์/คลังข้อมูล:
# For lakehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.LakehouseId, "<lakehouse item id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
# For data warehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.DatawarehouseId, "<data warehouse item id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
หมายเหตุ
เมื่อคุณกําลังเรียกใช้สมุดบันทึก ตามค่าเริ่มต้น ตัวเชื่อมต่อจะค้นหาคลังข้อมูลที่ระบุหรือเลคเฮ้าส์ในพื้นที่ทํางานของ lakehouse ที่แนบมากับสมุดบันทึก ในการอ้างอิงคลังข้อมูลหรือเลคเฮ้าส์จากพื้นที่ทํางานอื่น ให้ระบุ ID พื้นที่ทํางานและเลคเฮ้าส์ หรือ ID รายการคลังข้อมูลดังด้านบน
สร้างตารางเลคเฮ้าส์ตามข้อมูลจากคลังสินค้า
บรรทัดของโค้ดเหล่านี้ให้ตัวอย่างในการอ่านข้อมูลจากตารางหรือมุมมองใน Spark DataFrame และใช้เพื่อสร้างตารางเลคเฮ้าส์:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
df.write.format("delta").saveAsTable("<Lakehouse table name>")
การแก้ไขปัญหา
เมื่อเสร็จสิ้น ส่วนย่อยของการตอบกลับการอ่านจะปรากฏในผลลัพธ์ของเซลล์ ความล้มเหลวในเซลล์ปัจจุบันจะยกเลิกการดําเนินการเซลล์ที่ตามมาของสมุดบันทึก ข้อมูลข้อผิดพลาดโดยละเอียดมีอยู่ในบันทึกของแอปพลิเคชัน Spark
ข้อจำกัดปัจจุบัน
ในขณะนี้ ตัวเชื่อมต่อ:
- รองรับการค้นคืนข้อมูลจากคลังผ้าและจุดสิ้นสุดการวิเคราะห์ SQL ของรายการเลคเฮ้าส์
- ขณะนี้ Fabric DW สนับสนุน
Time Travel
อย่างไรก็ตาม ตัวเชื่อมต่อนี้ใช้ไม่ได้กับแบบสอบถามที่มีไวยากรณ์การเดินทางเวลา - รักษาลายเซ็นการใช้งานเช่นเดียวกับที่จัดส่งด้วย Apache Spark สําหรับ Azure Synapse Analytics เพื่อความสอดคล้อง อย่างไรก็ตาม การเชื่อมต่อและทํางานกับพูล SQL เฉพาะใน Azure Synapse Analytics จะไม่สามารถใช้งานได้ย้อนหลัง
- ชื่อคอลัมน์ที่มีอักขระพิเศษจะได้รับการจัดการโดยการเพิ่มอักขระเลี่ยงก่อนคิวรี โดยยึดตามชื่อตาราง/มุมมอง 3 ส่วน ในกรณีที่มีการอ่านตามคิวรีแบบกําหนดเองหรือแบบพาสทรู ผู้ใช้จะต้องหลีกเลี่ยงชื่อคอลัมน์ที่จะมีอักขระพิเศษ