Menerapkan Paket Python Khusus dari GitHub ke Snowflake
PEMBARUAN: Mulai 7 November 2022. Snowpark untuk Python adalah GA jadi menginstalnya semudah pip install snowflake-snowpark-python
melalui PyPi .
Ringkasan
Snowpark menyediakan cara bagi pengembang untuk memperluas fungsionalitas platform Snowflake dengan cara menulis kode dalam bahasa seperti Python, Java, Scala, dan JavaScript. Di blog ini, kami akan mengulas cara menerapkan paket Pure-Python khusus dari repo GitHub menggunakan GitHub Actions ke Snowflake.
Lebih penting lagi, saat paket ini digunakan untuk membuat Fungsi yang Ditentukan Pengguna (User-Defined Functions (UDF)) di Snowpark Python , pendekatan ini memudahkan untuk memelihara dan menerapkan kode khusus Anda di beberapa UDF sekaligus dan secara otomatis tanpa intervensi manual. Manfaat lain yang disorot oleh penyiapan ini adalah pemisahan paket khusus dari skrip yang mengunggah paket ke Snowflake dan menampilkan nama UDF yang menggunakan paket khusus yang diperbarui.
Fungsi yang Ditentukan Pengguna
Untuk mendemonstrasikan bagaimana seluruh alur bersatu, mari pertimbangkan UDF sederhana ini di Snowpark Python. (Skrip ini dijalankan di Snowsight .)
Catatan Skrip
- Paket Python do_something_cool.py ditambahkan sebagai dependensi — baris 6 . Perhatikan bahwa pernyataan impor menyertakan seluruh jalur; nama panggung dan nama file
- Paket itu kemudian diimpor ( baris 9 ) dan metode salam() dipanggil ( baris 11 ) meneruskan parameter yang diteruskan ke UDF ini
SELECT greet_me('Dash');
Hello, Dash! How are you doing today? It's great to see you today!
Penyiapan: Repositori GitHub 1
Katakanlah Anda memiliki repositori GitHub tempat Anda memelihara paket Python yang Anda dan anggota tim Anda kontribusikan dan berkolaborasi.
Inilah “ lakukan sesuatu yang keren ”
Repo ini juga tempat Anda mengatur GitHub Actions .
Berikut adalah tampilan file alur kerja GitHub Actions ( detail alur kerja di bawah ) :
Detail alur kerja
- Memicu Acara: Di push ke cabang utama saat kode diperbarui
- Langkah Alur Kerja:
— 2. Instal permintaan dependensi dan snowflake-connector-python diperlukan untuk menerapkan kode paket yang diperbarui
— 3. Unduh skrip ( dari Repo 2 — lihat di bawah ) yang akan mengunggah kode kustom yang diperbarui ke Snowflake
— 4. Siapkan variabel lingkungan ( database, gudang, skema, pengguna, kata sandi, dan peran ) yang disimpan di Rahasia GitHub. Variabel-variabel ini akan digunakan oleh Snowflake Python Connector dalam skrip ( diunduh di langkah 3 ) untuk terhubung ke Snowflake
— 5. Jalankan skrip ( diunduh pada langkah 3 ) untuk menyebarkan kode yang diperbarui
[Kode pada GitHub : Contoh paket khusus | File alur kerja Tindakan GitHub ]
Penyiapan: Repositori GitHub 2
Repo ini berisi skrip Python (lihat detail di bawah) yang diunduh dan dijalankan dari pengaturan alur kerja Tindakan GitHub di Repo 1 saat pembaruan dilakukan ke paket di cabang utama di Repo 1.
Berikut tampilan skripnya:
Langkah- langkah skrip
— 1. Sambungkan ke Snowflake menggunakan Snowflake Python Connector dan set variabel lingkungan menggunakan GitHub Secrets
— 2. Unduh daftar paket (lihat format JSON di bawah) untuk diperbarui
— 3. Untuk setiap paket, unduh versi terbaru dari cabang utama dari Repo 1 dan unggah ke tahap Snowflake
— 4. Ulangi semua UDF, periksa impornya, dan cetak nama UDF yang menggunakan paket yang diperbarui
Daftar Paket
Repo ini juga berisi file JSON yang memiliki daftar paket ( direferensikan pada langkah 2 di atas ) untuk diperbarui saat skrip update_packages.py dijalankan.
Berikut format filenya:
Catatan : Dekor di file JSON merujuk ke dekor di Snowflake tempat file diunggah.
Pengujian
Untuk menguji, perbarui do_something_cool.py di Repo 1 ( misalnya, ubah pesan salam menjadi “Selamat datang, bagaimana harimu?” ) dan Dorong perubahan ke cabang utama . Pada saat itu Anda akan melihat kickoff build dan jika berhasil (yaitu kode / sintaks benar, semua file dan jalur yang direferensikan ada, params koneksi untuk terhubung ke Snowflake valid, dll. ), Maka Anda akan melihat output build mirip dengan ini:

Kemudian, jalankan SQL ini lagi…
SELECT greet_me('DASH');
Hello, Dash! Welcome, how is your day going?
Itu dia!
Terima kasih atas waktu Anda, dan jangan ragu untuk mengikuti saya di Twitter dan LinkedIn tempat saya membagikan video demo, cuplikan kode, dan artefak menarik lainnya khususnya seputar Snowpark .