Triển khai các gói Python tùy chỉnh từ GitHub đến Snowflake
CẬP NHẬT: Kể từ ngày 7 tháng 11 năm 2022. Snowpark cho Python là GA nên việc cài đặt nó dễ dàng như pip install snowflake-snowpark-pythonthông qua PyPi .
Tổng quan
Snowpark cung cấp một cách để các nhà phát triển mở rộng chức năng của nền tảng Snowflake bằng cách viết mã bằng các ngôn ngữ như Python, Java, Scala và JavaScript. Trong blog này, chúng tôi sẽ xem xét cách triển khai các gói Python thuần tùy chỉnh từ repo GitHub bằng cách sử dụng Tác vụ GitHub trên Snowflake.
Quan trọng hơn, khi các gói này được sử dụng để tạo Hàm do người dùng xác định (UDF) trong Snowpark Python , phương pháp này giúp dễ dàng bảo trì và triển khai mã tùy chỉnh của bạn trên nhiều UDF cùng một lúc và tự động mà không cần can thiệp thủ công. Một lợi ích nổi bật khác của thiết lập này là việc tách rời (các) gói tùy chỉnh khỏi tập lệnh tải gói đó lên Snowflake và hiển thị tên của các UDF sử dụng gói tùy chỉnh được cập nhật.
Hàm do người dùng xác định
Để chứng minh toàn bộ luồng kết hợp với nhau như thế nào, hãy xem xét UDF đơn giản này trong Snowpark Python. (Tập lệnh này được chạy trong Snowsight .)
Ghi chú kịch bản
- Gói Python do_something_cool.py được thêm vào dưới dạng phần phụ thuộc — dòng 6 . Lưu ý rằng câu lệnh nhập bao gồm toàn bộ đường dẫn; tên của giai đoạn và tên tệp
- Sau đó, gói đó được nhập ( dòng 9 ) và phương thức Greetings() được gọi ( dòng 11 ) truyền tham số được truyền vào UDF này
SELECT greet_me('Dash');
Hello, Dash! How are you doing today? It's great to see you today!
Thiết lập: Kho lưu trữ GitHub 1
Giả sử bạn có kho lưu trữ GitHub nơi bạn duy trì gói Python này mà bạn và các thành viên trong nhóm của bạn đóng góp và cộng tác.
Đây là " làm điều gì đó thật tuyệt "
Repo này cũng là nơi bạn thiết lập GitHub Actions .
Đây là tệp quy trình công việc GitHub Actions ( chi tiết quy trình làm việc bên dưới ) sẽ như thế nào:
Chi tiết quy trình làm việc
- Sự kiện kích hoạt: Khi đẩy đến nhánh chính khi mã được cập nhật
- Các bước quy trình làm việc:
— 2. Cài đặt các yêu cầu phụ thuộc và cần có snowflake-connector-python để triển khai mã gói đã cập nhật
— 3. Tải xuống tập lệnh ( từ Repo 2 — xem bên dưới ) sẽ tải mã tùy chỉnh đã cập nhật lên Snowflake
— 4. Thiết lập các biến môi trường ( cơ sở dữ liệu, kho, lược đồ, người dùng, mật khẩu và vai trò ) được lưu trữ trong Bí mật GitHub. Các biến này sẽ được sử dụng bởi Snowflake Python Connector trong tập lệnh ( đã tải xuống ở bước 3 ) để kết nối với Snowflake
— 5. Chạy tập lệnh ( đã tải xuống ở bước 3 ) để triển khai mã đã cập nhật
[Mã trên GitHub : Gói tùy chỉnh mẫu | Tệp quy trình công việc GitHub Actions ]
Thiết lập: Kho lưu trữ GitHub 2
Repo này chứa tập lệnh Python (xem chi tiết bên dưới) được tải xuống và chạy từ thiết lập quy trình công việc GitHub Actions trong Repo 1 khi các bản cập nhật được thực hiện cho gói trong nhánh chính trong Repo 1.
Đây là kịch bản sẽ trông như thế nào:
Các bước viết kịch bản
— 1. Kết nối với Snowflake bằng Trình kết nối Python của Snowflake và các biến môi trường được đặt bằng GitHub Secrets
— 2. Tải xuống danh sách các gói (xem định dạng JSON bên dưới) để được cập nhật
— 3. Đối với mỗi gói, hãy tải xuống phiên bản mới nhất ngoài nhánh chính từ Repo 1 và tải lên giai đoạn Bông tuyết
— 4. Lặp lại tất cả các UDF, kiểm tra quá trình nhập của chúng và in ra tên của các UDF sử dụng gói cập nhật
Danh sách các gói
Repo này cũng chứa một tệp JSON có danh sách các gói ( được tham chiếu ở bước 2 ở trên ) sẽ được cập nhật khi tập lệnh update_packages.py được chạy.
Đây là định dạng tệp:
Lưu ý : Giai đoạn trong tệp JSON đề cập đến một giai đoạn trong Snowflake nơi tệp được tải lên.
thử nghiệm
Để kiểm tra, hãy cập nhật do_something_cool.py trong Repo 1 ( ví dụ: thay đổi thông báo chào mừng thành “Chào mừng, ngày hôm nay của bạn thế nào?” ) và đẩy các thay đổi vào nhánh chính . Tại thời điểm đó, bạn sẽ thấy khởi động quá trình xây dựng và nếu quá trình này thành công (nghĩa là mã/ cú pháp chính xác, tất cả các tệp và đường dẫn được tham chiếu đều tồn tại, thông số kết nối để kết nối với Snowflake là hợp lệ, v.v. ), thì bạn sẽ thấy đầu ra của bản dựng tương tự như thế này:
Sau đó, chạy lại SQL này…
SELECT greet_me('DASH');
Hello, Dash! Welcome, how is your day going?
Đó là nó!
Cảm ơn bạn đã dành thời gian và thoải mái theo dõi tôi trên Twitter và LinkedIn nơi tôi chia sẻ các video giới thiệu, đoạn mã và các hiện vật thú vị khác cụ thể xung quanh Snowpark .

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































