ทํางานกับข้อมูลโดยใช้ 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
... ...