หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
สําคัญ
คุณลักษณะนี้อยู่ในแสดงตัวอย่าง
ตัวเชื่อมต่อ Spark สําหรับฐานข้อมูล SQL เป็นไลบรารีประสิทธิภาพสูงที่ให้คุณอ่านและเขียนไปยังฐานข้อมูล SQL Server, Azure SQL และฐานข้อมูล Fabric SQL ตัวเชื่อมต่อมีความสามารถต่อไปนี้:
- ใช้ Spark เพื่อเรียกใช้การดําเนินการเขียนและอ่านขนาดใหญ่บนฐานข้อมูล Azure SQL, Azure SQL Managed Instance, SQL Server บน Azure VM และฐานข้อมูล Fabric SQL
- เมื่อคุณใช้ตารางหรือมุมมอง ตัวเชื่อมต่อจะสนับสนุนแบบจําลองความปลอดภัยที่ตั้งค่าไว้ที่ระดับกลไกจัดการ SQL แบบจําลองเหล่านี้รวมถึงการรักษาความปลอดภัยระดับออบเจ็กต์ (OLS) การรักษาความปลอดภัยระดับแถว (RLS) และการรักษาความปลอดภัยระดับคอลัมน์ (CLS)
ตัวเชื่อมต่อได้รับการติดตั้งไว้ล่วงหน้าในรันไทม์ Fabric ดังนั้นคุณจึงไม่จําเป็นต้องติดตั้งแยกต่างหาก
การรับรองความถูกต้อง
การรับรองความถูกต้องของ Microsoft Entra ถูกรวมเข้ากับ Microsoft Fabric
- เมื่อคุณลงชื่อเข้าใช้พื้นที่ทํางาน Fabric ข้อมูลประจําตัวของคุณจะถูกส่งไปยังกลไกจัดการ SQL โดยอัตโนมัติสําหรับการรับรองความถูกต้องและการอนุญาต
- จําเป็นต้องเปิดใช้งานและกําหนดค่า Microsoft Entra ID บนกลไกจัดการฐานข้อมูล SQL ของคุณ
- ไม่จําเป็นต้องมีการกําหนดค่าเพิ่มเติมในรหัส Spark ของคุณหากมีการตั้งค่า Microsoft Entra ID ข้อมูลประจําตัวจะถูกแมปโดยอัตโนมัติ
คุณยังสามารถใช้วิธีการรับรองความถูกต้อง SQL (โดยการระบุชื่อผู้ใช้และรหัสผ่าน SQL) หรือบริการหลัก (โดยการให้โทเค็นการเข้าถึง Azure สําหรับการรับรองความถูกต้องตามแอป)
การอนุญาต
เมื่อต้องการใช้ตัวเชื่อมต่อ Spark ข้อมูลประจําตัวของคุณ ไม่ว่าจะเป็นผู้ใช้หรือแอป ต้องมีสิทธิ์ฐานข้อมูลที่จําเป็นสําหรับกลไกจัดการ SQL เป้าหมาย สิทธิ์เหล่านี้จําเป็นในการอ่านหรือเขียนไปยังตารางและมุมมอง
สําหรับฐานข้อมูล Azure SQL, อินสแตนซ์ที่มีการจัดการ Azure SQL และ SQL Server บน Azure VM:
- ข้อมูลประจําตัวที่เรียกใช้การดําเนินการโดยทั่วไปต้องการ
db_datawriterและdb_datareaderสิทธิ์ และเป็นตัวเลือกdb_ownerสําหรับการควบคุมทั้งหมด
สําหรับฐานข้อมูล Fabric SQL:
- โดยทั่วไปข้อมูลประจําตัวต้องการ
db_datawriterและdb_datareaderสิทธิ์ และเลือกdb_ownerได้ - ข้อมูลประจําตัวยังต้องมีสิทธิ์ในการอ่านอย่างน้อยในฐานข้อมูล Fabric SQL ที่ระดับรายการ
Note
หากคุณใช้บริการหลัก จะสามารถทํางานเป็นแอป (ไม่มีบริบทของผู้ใช้) หรือเป็นผู้ใช้ได้หากเปิดใช้งานการเลียนแบบผู้ใช้ บริการหลักต้องมีสิทธิ์ฐานข้อมูลที่จําเป็นสําหรับการดําเนินการที่คุณต้องการดําเนินการ
ตัวอย่างการใช้งานและโค้ด
ในส่วนนี้ เราจะจัดเตรียมตัวอย่างโค้ดเพื่อสาธิตวิธีใช้ตัวเชื่อมต่อ Spark สําหรับฐานข้อมูล SQL อย่างมีประสิทธิภาพ ตัวอย่างเหล่านี้ครอบคลุมสถานการณ์ต่างๆ รวมถึงการอ่านและการเขียนไปยังตาราง SQL และการกําหนดค่าตัวเลือกตัวเชื่อมต่อ
ตัวเลือกที่รองรับ
ตัวเลือกขั้นต่ําที่จําเป็นคือ url as "jdbc:sqlserver://<server>:<port>;database=<database>;" หรือ set spark.mssql.connector.default.url.
เมื่อมีการ
urlให้:- ใช้
urlเป็นอันดับแรกเสมอ - หาก
spark.mssql.connector.default.urlไม่ได้ตั้งค่า ตัวเชื่อมต่อจะตั้งค่าและนํากลับมาใช้ใหม่เพื่อการใช้งานในอนาคต
- ใช้
เมื่อไม่ได้ระบุไว้
url:- ถ้า
spark.mssql.connector.default.urlตั้งค่าไว้ ตัวเชื่อมต่อจะใช้ค่าจากการกําหนดค่าประกายไฟ - หาก
spark.mssql.connector.default.urlไม่ได้ตั้งค่า จะมีข้อผิดพลาดเนื่องจากไม่มีรายละเอียดที่จําเป็น
- ถ้า
ตัวเชื่อมต่อนี้สนับสนุนตัวเลือกที่กําหนดไว้ที่นี่: ตัวเลือก JDBC ของแหล่งข้อมูล SQL
ตัวเชื่อมต่อยังรองรับตัวเลือกต่อไปนี้:
| ตัวเลือก | ค่าพื้นฐาน | คำอธิบาย |
|---|---|---|
reliabilityLevel |
"BEST_EFFORT" | ควบคุมความน่าเชื่อถือของการทํางานของเม็ดมีด ค่าที่เป็นไปได้: BEST_EFFORT (ค่าเริ่มต้น เร็วที่สุด อาจส่งผลให้เกิดแถวที่ซ้ํากันหากตัวดําเนินการรีสตาร์ท) NO_DUPLICATES (ช้ากว่า ทําให้แน่ใจว่าไม่มีการแทรกแถวที่ซ้ํากันแม้ว่าตัวดําเนินการจะรีสตาร์ทก็ตาม) เลือกตามความคลาดเคลื่อนของคุณสําหรับรายการที่ซ้ํากันและความต้องการด้านประสิทธิภาพ |
isolationLevel |
"READ_COMMITTED" | ตั้งค่าระดับการแยกธุรกรรมสําหรับการดําเนินการ SQL ค่าที่เป็นไปได้: READ_COMMITTED (ค่าเริ่มต้น ป้องกันการอ่านข้อมูลที่ไม่ได้ผูกมัด), READ_UNCOMMITTED, , REPEATABLE_READSNAPSHOT, . SERIALIZABLE ระดับการแยกที่สูงขึ้นสามารถลดการทํางานพร้อมกันได้ แต่ปรับปรุงความสอดคล้องของข้อมูล |
tableLock |
"เท็จ" | ควบคุมว่าจะใช้คําใบ้การล็อกระดับตาราง TABLOCK ของ SQL Server ในระหว่างการดําเนินการแทรกหรือไม่ ค่าที่เป็นไปได้: true (เปิดใช้งาน TABLOCK ซึ่งสามารถปรับปรุงประสิทธิภาพการเขียนจํานวนมากได้) false (ค่าเริ่มต้น ไม่ใช้ TABLOCK) การตั้งค่าเป็น true อาจเพิ่มปริมาณงานสําหรับเม็ดมีดขนาดใหญ่ แต่สามารถลดการทํางานพร้อมกันสําหรับการดําเนินการอื่นๆ บนตารางได้ |
schemaCheckEnabled |
"จริง" | ควบคุมว่าจะบังคับใช้การตรวจสอบความถูกต้องของ Schema ที่เข้มงวดระหว่าง Spark DataFrame และตาราง SQL หรือไม่ ค่าที่เป็นไปได้: true (ค่าเริ่มต้น บังคับใช้การจับคู่สคีมาที่เข้มงวด) false (ให้ความยืดหยุ่นมากขึ้นและอาจข้ามการตรวจสอบสคีมาบางอย่าง) การตั้งค่าเป็น false สามารถช่วยในเรื่อง Schema ไม่ตรงกัน แต่อาจนําไปสู่ผลลัพธ์ที่ไม่คาดคิดหากโครงสร้างแตกต่างกันอย่างมีนัยสําคัญ |
ตัวเลือก Bulk API อื่นๆ สามารถตั้งค่าเป็นตัวเลือกบน และDataFrameส่งผ่านไปยัง API การคัดลอกจํานวนมากเมื่อเขียน
ตัวอย่างการเขียนและอ่าน
รหัสต่อไปนี้แสดงวิธีการเขียนและอ่านข้อมูล โดยใช้ mssql("<schema>.<table>") วิธีการที่มีการรับรองความถูกต้อง Microsoft Entra ID อัตโนมัติ
เคล็ดลับ
ข้อมูลถูกสร้างขึ้นแบบอินไลน์เพื่อวัตถุประสงค์ในการสาธิต ในสถานการณ์การใช้งานจริง โดยทั่วไป คุณจะอ่านข้อมูลจากแหล่งข้อมูลที่มีอยู่หรือสร้าง DataFrame.
import com.microsoft.sqlserver.jdbc.spark
url = "jdbc:sqlserver://<server>:<port>;database=<database>;"
row_data = [("Alice", 1),("Bob", 2),("Charlie", 3)]
column_header = ["Name", "Age"]
df = spark.createDataFrame(row_data, column_header)
df.write.mode("overwrite").option("url", url).mssql("dbo.publicExample")
spark.read.option("url", url).mssql("dbo.publicExample").show()
url = "jdbc:sqlserver://<server>:<port>;database=<database2>;" # different database
df.write.mode("overwrite").option("url", url).mssql("dbo.tableInDatabase2") # default url is updated
spark.read.mssql("dbo.tableInDatabase2").show() # no url option specified and will use database2
คุณยังสามารถเลือกคอลัมน์ ใช้ตัวกรอง และใช้ตัวเลือกอื่นๆ เมื่อคุณอ่านข้อมูลจากกลไกจัดการฐานข้อมูล SQL
ตัวอย่างการรับรองความถูกต้อง
ตัวอย่างต่อไปนี้แสดงวิธีการใช้วิธีการรับรองความถูกต้องอื่นที่ไม่ใช่ Microsoft Entra ID เช่น บริการหลัก (โทเค็นการเข้าถึง) และการรับรองความถูกต้อง SQL
Note
ดังที่ได้กล่าวไว้ก่อนหน้านี้ การรับรองความถูกต้องของ Microsoft Entra ID จะได้รับการจัดการโดยอัตโนมัติเมื่อคุณลงชื่อเข้าใช้พื้นที่ทํางาน Fabric ดังนั้นคุณต้องใช้วิธีการเหล่านี้หากสถานการณ์ของคุณต้องการเท่านั้น
import com.microsoft.sqlserver.jdbc.spark
url = "jdbc:sqlserver://<server>:<port>;database=<database>;"
row_data = [("Alice", 1),("Bob", 2),("Charlie", 3)]
column_header = ["Name", "Age"]
df = spark.createDataFrame(row_data, column_header)
from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(tenant_id="", client_id="", client_secret="") # service principal app
scope = "https://database.windows.net/.default"
token = credential.get_token(scope).token
df.write.mode("overwrite").option("url", url).option("accesstoken", token).mssql("dbo.publicExample")
spark.read.option("accesstoken", token).mssql("dbo.publicExample").show()
โหมดบันทึก DataFrame ที่รองรับ
เมื่อคุณเขียนข้อมูลจากฐานข้อมูล Spark ไปยัง SQL คุณสามารถเลือกโหมดบันทึกได้หลายโหมด โหมดบันทึกจะควบคุมวิธีการเขียนข้อมูลเมื่อมีตารางปลายทางอยู่แล้ว และอาจส่งผลต่อ Schema ข้อมูล และการจัดทําดัชนี การทําความเข้าใจโหมดเหล่านี้จะช่วยให้คุณหลีกเลี่ยงการสูญหายหรือการเปลี่ยนแปลงข้อมูลที่ไม่คาดคิด
ตัวเชื่อมต่อนี้รองรับตัวเลือกที่กําหนดไว้ที่นี่: ฟังก์ชัน Spark Save
ErrorIfExists (โหมดบันทึกดีฟอนต์): ถ้ามีตารางปลายทางอยู่ การเขียนจะถูกยกเลิกและส่งกลับข้อยกเว้น มิฉะนั้น ตารางใหม่จะถูกสร้างขึ้นด้วยข้อมูล
ละเว้น: หากมีตารางปลายทางอยู่ การเขียนจะละเว้นคําขอและไม่ส่งคืนข้อผิดพลาด มิฉะนั้น ตารางใหม่จะถูกสร้างขึ้นด้วยข้อมูล
เขียนทับ: ถ้ามีตารางปลายทางอยู่ ตารางจะถูกทิ้ง สร้างใหม่ และผนวกข้อมูลใหม่
Note
เมื่อคุณใช้
overwriteสคีมาตารางเดิม (โดยเฉพาะประเภทข้อมูลเฉพาะ MSSQL) และดัชนีตารางจะสูญหายและถูกแทนที่ด้วยสคีมาที่อนุมานจาก Spark DataFrame ของคุณ เพื่อหลีกเลี่ยงการสูญเสียสคีมาและดัชนี ให้ใช้.option("truncate", true)แทนoverwriteผนวก: ถ้ามีตารางปลายทางอยู่ จะมีการผนวกข้อมูลใหม่เข้าไป มิฉะนั้น ตารางใหม่จะถูกสร้างขึ้นด้วยข้อมูล
แก้ไขปัญหา
เมื่อกระบวนการเสร็จสิ้น ผลลัพธ์ของการดําเนินการอ่าน Spark ของคุณจะปรากฏในพื้นที่เอาต์พุตของเซลล์ ข้อผิดพลาดจาก com.microsoft.sqlserver.jdbc.SQLServerException มาจาก SQL Server โดยตรง คุณสามารถค้นหาข้อมูลข้อผิดพลาดโดยละเอียดได้ในบันทึกแอปพลิเคชัน Spark