ทํางานกับข้อมูลโดยใช้ Spark SQL
Dataframe API เป็นส่วนหนึ่งของไลบรารี Spark ที่ชื่อว่า Spark SQL ซึ่งช่วยให้นักวิเคราะห์ข้อมูลสามารถใช้นิพจน์ SQL เพื่อคิวรีและจัดการข้อมูลได้
การสร้างวัตถุฐานข้อมูลในแค็ตตาล็อก Spark
แค็ตตาล็อก Spark เป็นเมตาสโตร์สําหรับออบเจ็กต์ข้อมูลเชิงสัมพันธ์ เช่น มุมมองและตาราง รันไทม์ของ Spark สามารถใช้แค็ตตาล็อกเพื่อรวมโค้ดที่เขียนในภาษาที่รองรับ Spark ด้วยนิพจน์ SQL ที่อาจดูเป็นธรรมชาติมากขึ้นกับนักวิเคราะห์ข้อมูลหรือนักพัฒนาบางราย
หนึ่งในวิธีที่ง่ายที่สุดในการทําให้ข้อมูลในกรอบข้อมูลพร้อมใช้งานสําหรับการคิวรีในแค็ตตาล็อก Spark คือการสร้างมุมมองชั่วคราว ดังที่แสดงในตัวอย่างโค้ดต่อไปนี้:
df.createOrReplaceTempView("products_view")
มุมมอง เป็นแบบชั่วคราว ซึ่งหมายความว่า จะถูกลบออกโดยอัตโนมัติในตอนท้ายของเซสชันปัจจุบัน คุณยังสามารถสร้างตาราง ที่ยังคงอยู่ในแค็ตตาล็อกเพื่อกําหนดฐานข้อมูลที่สามารถสอบถามโดยใช้ Spark SQL ได้
ตารางเป็นโครงสร้างเมตาดาต้าที่จัดเก็บข้อมูลเบื้องต้นไว้ในตําแหน่งที่เก็บข้อมูลที่เชื่อมโยงกับแค็ตตาล็อก ใน Microsoft Fabric ข้อมูลสําหรับตาราง ที่มีการจัดการ จะถูกเก็บไว้ในตําแหน่งที่เก็บข้อมูล ตาราง ที่แสดงใน data lake ของคุณ และตารางใด ๆ ที่สร้างขึ้นโดยใช้ Spark จะแสดงอยู่ที่นั่น
คุณสามารถสร้างตารางเปล่าโดยใช้ spark.catalog.createTable เมธอด หรือคุณสามารถบันทึก dataframe เป็นตารางโดยใช้ saveAsTable เมธอด การลบตารางที่มีการจัดการจะลบข้อมูลเบื้องต้นด้วย
ตัวอย่างเช่น โค้ดต่อไปนี้จะบันทึก dataframe เป็นตารางใหม่ที่มีชื่อ ว่าผลิตภัณฑ์:
df.write.format("delta").saveAsTable("products")
หมายเหตุ
แค็ตตาล็อก Spark สนับสนุนตารางที่ยึดตามไฟล์ในรูปแบบต่างๆ รูปแบบที่ต้องการใน Microsoft Fabric คือ delta ซึ่งเป็นรูปแบบสําหรับเทคโนโลยีข้อมูลเชิงสัมพันธ์บน Spark ที่มีชื่อว่า Delta Lake ตาราง Delta สนับสนุนคุณลักษณะที่พบบ่อยในระบบฐานข้อมูลเชิงสัมพันธ์ รวมถึงธุรกรรม การกําหนดรุ่น และการสนับสนุนสําหรับการสตรีมข้อมูล
นอกจากนี้ คุณยังสามารถสร้างตาราง ภายนอก ได้โดยใช้ spark.catalog.createExternalTable วิธีการ ตารางภายนอกกําหนดเมตาดาต้าในแค็ตตาล็อก แต่รับข้อมูลพื้นฐานจากตําแหน่งที่เก็บข้อมูลภายนอก โดยทั่วไปแล้ว คือโฟลเดอร์ในที่เก็บข้อมูล ไฟล์ ของเลคเฮ้าส์ การลบตารางภายนอกไม่ได้ลบข้อมูลพื้นฐาน
เคล็ดลับ
คุณสามารถใช้เทคนิคการแบ่งพาร์ติชันเดียวกันกับตาราง delta lake ตามที่อธิบายไว้สําหรับไฟล์ parquet ในหน่วยก่อนหน้า การแบ่งพาร์ติชันตารางอาจส่งผลให้ประสิทธิภาพการทํางานดีขึ้นเมื่อทําการคิวรี
การใช้ Spark SQL API เพื่อคิวรีข้อมูล
คุณสามารถใช้ Spark SQL API ในโค้ดที่เขียนในภาษาใดก็ได้เพื่อสอบถามข้อมูลในแค็ตตาล็อก ตัวอย่างเช่น รหัส PySpark ต่อไปนี้ใช้คิวรี SQL เพื่อส่งกลับข้อมูลจากตาราง ผลิตภัณฑ์ เป็น dataframe
bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
FROM products \
WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)
ผลลัพธ์จากตัวอย่างโค้ดจะมีลักษณะคล้ายกับตารางต่อไปนี้:
| ProductID | ชื่อผลิตภัณฑ์ | ราคาตั้ง |
|---|---|---|
| 771 | Mountain-100 Silver, 38 | 3399.9900 |
| 839 | Road-750 สีดํา, 52 | 539.9900 |
| ... | ... | ... |
การใช้รหัส SQL
ตัวอย่างก่อนหน้านี้สาธิตวิธีการใช้ Spark SQL API เพื่อฝังนิพจน์ SQL ใน Spark code ในสมุดบันทึก คุณยังสามารถใช้เวทมนตร์ %%sql เพื่อเรียกใช้โค้ด SQL ที่สอบถามวัตถุในแค็ตตาล็อก ดังนี้:
%%sql
SELECT Category, COUNT(ProductID) AS ProductCount
FROM products
GROUP BY Category
ORDER BY Category
ตัวอย่างรหัส SQL จะส่งกลับชุดผลลัพธ์ที่แสดงในสมุดบันทึกโดยอัตโนมัติเป็นตาราง:
| ประเภท | จํานวนผลิตภัณฑ์ |
|---|---|
| Bib-Shorts | 3 |
| แร็คจักรยาน | 1 |
| แท่นวางจักรยาน | 1 |
| ... | ... |