การปรับใช้แพ็คเกจ Python แบบกำหนดเองจาก GitHub เป็น Snowflake

Nov 30 2022
อัปเดต: ณ วันที่ 7 พ.ย. 2022 Snowpark สำหรับ Python เป็น GA ดังนั้นการติดตั้งจึงง่ายเหมือนการติดตั้ง pip snowflake-snowpark-python ผ่าน PyPi

อัปเดต: ณ วันที่ 7 พ.ย. 2022 Snowpark สำหรับ Python เป็น GA ดังนั้นการติดตั้งจึงง่ายพอกับpip install snowflake-snowpark-pythonPyPi

ภาพรวม

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