การปรับใช้แพ็คเกจ Python แบบกำหนดเองจาก GitHub เป็น Snowflake
อัปเดต: ณ วันที่ 7 พ.ย. 2022 Snowpark สำหรับ Python เป็น GA ดังนั้นการติดตั้งจึงง่ายพอๆกับpip install snowflake-snowpark-python
PyPi
ภาพรวม
Snowpark มีวิธีสำหรับนักพัฒนาในการขยายฟังก์ชันการทำงานของแพลตฟอร์ม Snowflake โดยการเขียนโค้ดในภาษาต่างๆ เช่น Python, Java, Scala และ JavaScript ในบล็อกนี้ เราจะทบทวนวิธีการปรับใช้ แพ็คเกจ Pure-Python แบบกำหนดเอง จาก GitHub repo โดยใช้ GitHub Actions บน Snowflake
ที่สำคัญกว่านั้น เมื่อใช้แพ็คเกจเหล่านี้เพื่อสร้างUser-Defined Functions (UDF) ใน Snowpark Pythonวิธีการนี้ทำให้ง่ายต่อการบำรุงรักษาและปรับใช้โค้ดที่กำหนดเองของคุณใน UDF หลายๆ ตัวในคราวเดียว และโดยอัตโนมัติโดยไม่ต้องมีการแทรกแซงด้วยตนเอง ข้อดีอีกอย่างของการตั้งค่านี้คือการแยกแพ็คเกจแบบกำหนดเองออกจากสคริปต์ที่อัพโหลดแพ็คเกจไปยัง Snowflake และแสดงชื่อของ UDF ที่ใช้แพ็คเกจแบบกำหนดเองที่อัปเดต
ฟังก์ชันกำหนดโดยผู้ใช้
เพื่อแสดงให้เห็นว่าโฟลว์ทั้งหมดมารวมกันได้อย่างไร ลองพิจารณา UDF แบบง่ายนี้ใน Snowpark Python (สคริปต์นี้ทำงานในSnowsight )
หมายเหตุสคริป
- แพ็คเกจ Python do_something_cool.pyถูกเพิ่มเป็นการอ้างอิง — บรรทัดที่ 6 โปรดทราบว่า คำสั่ง การนำเข้ารวมถึงเส้นทางทั้งหมด ชื่อสเตจและชื่อไฟล์
- แพ็คเกจนั้นจะถูกนำเข้า ( บรรทัดที่ 9 ) และวิธีการทักทาย ()เรียกว่า ( บรรทัดที่ 11 ) ส่งผ่านพารามิเตอร์ที่ส่งผ่านไปยัง UDF นี้
SELECT greet_me('Dash');
Hello, Dash! How are you doing today? It's great to see you today!
การตั้งค่า: พื้นที่เก็บข้อมูล GitHub 1
สมมติว่าคุณมีที่เก็บ GitHub ที่คุณดูแลแพ็คเกจ Python ที่คุณและสมาชิกในทีมมีส่วนร่วมและทำงานร่วมกัน
นี่คือ “ ทำ อะไรเจ๋งๆ ”
repo นี้เป็นที่ที่คุณจะตั้งค่าGitHub Actions
ไฟล์เวิร์กโฟลว์ GitHub Actions ( รายละเอียด เวิร์กโฟลว์ ด้านล่าง ) จะมีลักษณะดังนี้:
รายละเอียด ขั้นตอนการทำงาน
- เหตุการณ์ทริกเกอร์: พุชไปที่ สาขา หลักเมื่อมีการอัปเดตรหัส
- ขั้นตอนเวิร์กโฟลว์:
— 2. ติดตั้งคำขอการ พึ่งพา และSnowflake-connector-pythonที่จำเป็นในการปรับใช้รหัสแพ็คเกจที่อัปเดต
— 3. ดาวน์โหลดสคริปต์ ( จาก Repo 2 — ดูด้านล่าง ) ที่จะอัปโหลดโค้ดที่กำหนดเองที่อัปเดตไปยัง Snowflake
— 4. ตั้งค่าตัวแปรสภาพแวดล้อม ( ฐานข้อมูล คลังสินค้า สคีมา ผู้ใช้ รหัสผ่าน และบทบาท ) ที่จัดเก็บไว้ในGitHub Secrets ตัวแปรเหล่านี้จะถูกใช้โดยSnowflake Python Connectorในสคริปต์ ( ดาวน์โหลดในขั้นตอนที่ 3 ) เพื่อเชื่อมต่อกับ Snowflake
— 5. เรียกใช้สคริปต์ ( ดาวน์โหลดในขั้นตอนที่ 3 ) เพื่อปรับใช้รหัสที่อัปเดต
[โค้ดบน GitHub : ตัวอย่างแพ็คเกจที่กำหนดเอง | ไฟล์เวิร์กโฟลว์ GitHub Actions ]
การตั้งค่า: พื้นที่เก็บข้อมูล GitHub 2
repo นี้มีสคริปต์ Python (ดูรายละเอียดด้านล่าง)ที่ดาวน์โหลดและเรียกใช้จากการตั้งค่าเวิร์กโฟลว์GitHub Actions ใน Repo 1เมื่อมีการอัปเดตแพ็คเกจในสาขาหลัก ใน Repo 1
สคริปต์จะมีลักษณะดังนี้:
ขั้นตอนการทำคริป
— 1. เชื่อมต่อกับ Snowflake โดยใช้ Snowflake Python Connector และตัวแปรสภาพแวดล้อมที่ตั้งค่าโดยใช้GitHub Secrets
— 2. ดาวน์โหลดรายการแพ็คเกจ(ดูด้านล่างรูปแบบ JSON)เพื่ออัปเดต
— 3. สำหรับแต่ละแพ็คเกจ ให้ดาวน์โหลดเวอร์ชันล่าสุดจากสาขาหลัก จาก Repo 1และอัปโหลดไปยังด่าน Snowflake
— 4. วนซ้ำ UDF ทั้งหมด ตรวจสอบการนำเข้า และพิมพ์ชื่อ UDF ที่ใช้แพ็คเกจที่อัปเดต
รายการแพ็คเกจ
repo นี้ยังมีไฟล์ JSON ที่มีรายการแพ็คเกจ ( อ้างอิงในขั้นตอนที่ 2 ด้านบน ) ที่จะได้รับการอัพเดตเมื่อรันสคริปต์update_packages.py
นี่คือรูปแบบไฟล์:
หมายเหตุ : สเตจในไฟล์ JSON หมายถึงสเตจใน Snowflakeที่อัปโหลดไฟล์
การทดสอบ
หากต้องการทดสอบ ให้อัปเดตdo_something_cool.pyในRepo 1 ( เช่น เปลี่ยนข้อความทักทายเป็น "ยินดีต้อนรับ เป็นอย่างไรบ้าง" ) และพุชการเปลี่ยนแปลงไปที่สาขาหลัก เมื่อถึงจุดนั้น คุณควรเห็นการเริ่มสร้างและถ้ามันสำเร็จ (เช่น รหัส/ ไวยากรณ์ถูกต้อง มีไฟล์และพาธอ้างอิงทั้งหมด พารามิเตอร์การเชื่อมต่อเพื่อเชื่อมต่อกับ Snowflake นั้นถูกต้อง ฯลฯ ) คุณควรจะเห็นเอาต์พุตของบิล ด์ คล้ายกับสิ่งนี้:
จากนั้นรัน SQL นี้อีกครั้ง...
SELECT greet_me('DASH');
Hello, Dash! Welcome, how is your day going?
แค่นั้นแหละ!
ขอขอบคุณที่สละเวลา และอย่าลังเลที่จะติดตามฉันบนTwitterและLinkedInที่ซึ่งฉันแบ่งปันวิดีโอสาธิต ข้อมูลโค้ด และสิ่งประดิษฐ์ที่น่าสนใจอื่นๆ โดยเฉพาะเกี่ยวกับSnowpark