Hướng dẫn write stored procedure in python - viết thủ tục được lưu trữ trong python
Chủ đề này giải thích cách viết một thủ tục được lưu trữ trong Python. Bạn có thể sử dụng thư viện SnowPark trong quy trình được lưu trữ của mình để thực hiện truy vấn, cập nhật và các công việc khác trên các bảng trong Bông tuyết. Show
Trong chủ đề này: Giới thiệu¶Với các quy trình lưu trữ của SnowPark, bạn có thể xây dựng và chạy đường ống dữ liệu của mình trong Snowflake, sử dụng kho tuyết làm khung tính toán. Đối với mã đường ống dữ liệu của bạn, bạn sử dụng API SnowPark cho Python để viết các quy trình được lưu trữ. Để lên lịch thực hiện các thủ tục được lưu trữ này, bạn sử dụng các nhiệm vụ.tasks. Các phần tiếp theo cung cấp thêm thông tin về các thủ tục lưu trữ của SnowPark cho Python. Điều kiện tiên quyếtBạn phải sử dụng phiên bản 0.4.0 hoặc phiên bản gần đây của Thư viện SnowPark. Snowflake hiện hỗ trợ viết các thủ tục được lưu trữ trong phiên bản Python 3.8. Ghi chú Các thủ tục được lưu trữ Python yêu cầu Thư viện Python Snowpark mới nhất, nơi cài đặt các phụ thuộc của bên thứ ba bổ sung. Trước khi cố gắng tạo quy trình được lưu trữ Python, hãy đảm bảo tính năng của các gói Anaconda được bật để có thể tải phụ thuộc của bên thứ ba cần thiết. Để biết thêm thông tin, hãy xem bằng cách sử dụng các gói của bên thứ ba từ Anaconda.Using Third-Party Packages from Anaconda. Chọn để tạo một quy trình được lưu trữ với mã nội tuyến hoặc với mã được tải lên từ giai đoạnNhư trường hợp của Python UDFS, bạn có thể tạo một quy trình được lưu trữ nội tuyến hoặc quy trình được lưu trữ với mã được tải lên từ một giai đoạn., you can either create an in-line stored procedure or a stored procedure with code uploaded from a stage.
Viết mã Python cho thủ tục được lưu trữĐối với mã cho quy trình được lưu trữ của bạn, bạn phải viết phương thức hoặc hàm Python. Lên kế hoạch viết thủ tục lưu trữ của bạnNhư được mô tả dưới đây, mã Python cho quy trình được lưu trữ của bạn có các ràng buộc tương tự như mã cho một UDF Python. Khi có kế hoạch viết các thủ tục được lưu trữ của bạn, bạn nên xem xét các ràng buộc đó. Giới hạn lượng bộ nhớ tiêu thụNhư trường hợp của Python UDFS, Snowflake đặt giới hạn theo phương pháp hoặc chức năng theo số lượng bộ nhớ cần thiết.Python UDFs, Snowflake places limits on a method or function in terms of the amount of memory needed. Trong phương pháp hoặc chức năng của bạn, bạn nên tránh tiêu thụ quá nhiều bộ nhớ. Hiểu các hạn chế bảo mậtPhương pháp hoặc chức năng của bạn chạy trong một công cụ bị hạn chế, vì vậy bạn nên tuân theo các quy tắc tương tự như được ghi lại cho Python UDFS.documented for Python UDFs. Quyết định sử dụng quyền của chủ sở hữu hoặc quyền của người gọiNgoài ra, khi có kế hoạch viết quy trình được lưu trữ của bạn, hãy xem xét liệu bạn có muốn quy trình được lưu trữ để chạy với quyền của người gọi hay quyền của chủ sở hữu hay không.caller’s rights or owner’s rights. Hãy nhận biết về Phiên bản Snowflake-Snowpark-PythonThư viện Snowflake-Snowpark-Python có sẵn trong môi trường quy trình lưu trữ Python thường là một phiên bản đằng sau phiên bản phát hành công khai. Điều này là do các hạn chế của quá trình phát hành thủ tục được lưu trữ. Sử dụng SQL này để tìm ra phiên bản Snowflake-Snowpark-Python mới nhất. select * from information_schema.packages where package_name = 'snowflake-snowpark-python' order by version desc; Viết phương thức hoặc chức năngKhi viết phương thức hoặc chức năng cho quy trình được lưu trữ, lưu ý như sau:
Truy cập dữ liệu trong Bông tuyết từ thủ tục lưu trữ của bạnĐể truy cập dữ liệu trong Snowflake, hãy sử dụng API thư viện SnowPark. Khi xử lý một cuộc gọi đến quy trình lưu trữ Python của bạn, Snowflake tạo ra một đối tượng SnowPark def run(session, from_table, to_table, count): session.table(from_table).limit(count).write.save_as_table(to_table) return "SUCCESS"5 và chuyển đối tượng cho phương thức hoặc chức năng cho quy trình được lưu trữ của bạn. Như trường hợp với các thủ tục được lưu trữ trong các ngôn ngữ khác, bối cảnh cho phiên (ví dụ: các đặc quyền, cơ sở dữ liệu hiện tại và lược đồ, v.v.) được xác định bằng liệu thủ tục được lưu trữ có chạy theo quyền của người gọi hay quyền của chủ sở hữu hay không. Để biết chi tiết, xem truy cập và thiết lập trạng thái phiên.Accessing and Setting the Session State. Bạn có thể sử dụng đối tượng def run(session, from_table, to_table, count): session.table(from_table).limit(count).write.save_as_table(to_table) return "SUCCESS"5 này để gọi API trong Thư viện SnowPark. Ví dụ: bạn có thể tạo DataFrame cho bảng hoặc thực hiện câu lệnh SQL.create a DataFrame for a table or execute an SQL statement. Xem Hướng dẫn dành cho nhà phát triển SnowPark để biết thêm thông tin.Snowpark Developer Guide for more information. Sau đây là một ví dụ về phương thức Python sao chép một số lượng hàng được chỉ định từ bảng này sang bảng khác. Phương pháp lấy các đối số sau:
Phương thức trong ví dụ này trả về một chuỗi. def run(session, from_table, to_table, count): session.table(from_table).limit(count).write.save_as_table(to_table) return "SUCCESS" Sử dụng các gói của bên thứ ba từ Anaconda¶Bạn có thể chỉ định các gói Anaconda để cài đặt khi bạn tạo các quy trình lưu trữ Python. Để xem danh sách các gói của bên thứ ba từ Anaconda, hãy xem kênh Bông tuyết Anaconda. Các gói bên thứ ba này được xây dựng và cung cấp bởi Anaconda. Bạn có thể sử dụng kênh Snowflake Conda để thử nghiệm và phát triển cục bộ mà không phải trả giá theo các điều khoản phần mềm nhúng bổ sung cho các điều khoản dịch vụ của Anaconda. Đối với những hạn chế, xem giới hạn.Limitations. Bắt đầu¶Trước khi bạn bắt đầu sử dụng các gói được cung cấp bởi Anaconda bên trong Snowflake, bạn phải thừa nhận các điều khoản của bên thứ ba Blononda bằng cách làm theo các bước dưới đây. Ghi chú
Ghi chú Vai trò quản trị viên tổ chức (Orgadmin) được yêu cầu để hoàn thành các bước trong phần này. Để biết thông tin về các tổ chức, hãy xem Quản lý Tổ chức Bông tuyết của bạn.
Địa chỉ emailNếu các thuộc tính của người dùng không được đặt, giao diện người dùng tuyết sẽ hiển thị một thông báo cho bạn biết cập nhật các thuộc tính này trước khi tiến hành. Quản trị viên người dùng (nghĩa là người dùng có vai trò UserAdmin) hoặc vai trò cao hơn hoặc vai trò khác với đặc quyền sở hữu trên đối tượng người dùng Snowflake của bạn, có thể thêm các chi tiết này vào hồ sơ người dùng của bạn. select * from information_schema.packages where language = 'python'; Đăng nhập vào Snowsight, giao diện web Snowflake.Using Third-Party Packages in the Snowflake Python UDF documentation. Nhấp vào menu thả xuống bên cạnh tên đăng nhập của bạn, sau đó nhấp vào vai trò chuyển đổi »orgadmin để thay đổi vai trò quản trị viên tổ chức.Nhấp vào Quản trị viên »Thanh toán» Điều khoản & Thanh toán.upload those files to a stage so that the files will be available when the stored procedure executes. Cuộn đến phần Anaconda và nhấp vào nút Bật. Hộp thoại Gói Anaconda (tính năng xem trước) mở ra.executing the CREATE PROCEDURE statement, use the IMPORTS clause to point to these files. Nhấp vào liên kết để xem xét các Điều khoản của Bên thứ ba của Bông tuyết.Nếu bạn đồng ý với các điều khoản, nhấp vào nút Xác nhận & Tiếp tục.
Để chấp nhận các điều khoản, người dùng phải có các thuộc tính người dùng sau: Họ
Tạo quy trình được lưu trữThực hiện câu lệnh Quy trình Tạo để tạo quy trình được lưu trữ cho phương thức hoặc chức năng của bạn. Đặt các tham số được liệt kê trong bảng bên dưới.CREATE PROCEDURE statement to create a stored procedure for your method or function. Set the parameters listed in the table below.
Các ví dụ sau đây tạo ra các thủ tục được lưu trữ trong Python. Ví dụ 1: Quy trình lưu trữ nội tuyến: In-line stored procedure: def run(session, from_table, to_table, count): session.table(from_table).limit(count).write.save_as_table(to_table) return "SUCCESS"0 Ví dụ 2: Một quy trình được lưu trữ sử dụng mã được tải lên từ một giai đoạn trong tệp Python select * from information_schema.packages where package_name = 'snowflake-snowpark-python' order by version desc;6 on the internal stage CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT) RETURNS INT LANGUAGE PYTHON RUNTIME_VERSION = '3.8' PACKAGES = ('snowflake-snowpark-python') IMPORTS = ('@mystage/my_py_file.py') HANDLER = 'my_py_file.run';2: def run(session, from_table, to_table, count): session.table(from_table).limit(count).write.save_as_table(to_table) return "SUCCESS"1 Gọi thủ tục lưu trữ của bạnĐể người dùng gọi một quy trình được lưu trữ, vai trò của người dùng phải có đặc quyền sử dụng cho quy trình được lưu trữ.USAGE privilege for the stored procedure. Khi bạn có các đặc quyền gọi thủ tục được lưu trữ, bạn có thể sử dụng câu lệnh CALL để gọi thủ tục được lưu trữ. Ví dụ:CALL statement to call the stored procedure. For example: def run(session, from_table, to_table, count): session.table(from_table).limit(count).write.save_as_table(to_table) return "SUCCESS"2 Hạn chế ởCác thủ tục lưu trữ Snowpark có những hạn chế sau:
Chúng ta có thể viết thủ tục được lưu trữ bằng Python không?Chọn để tạo một quy trình được lưu trữ với mã nội tuyến hoặc với mã được tải lên từ một giai đoạn.. Trong một quy trình được lưu trữ nội tuyến, bạn viết mã Python của mình theo mệnh đề AS AS của câu lệnh Creat Creates..... Trong một quy trình được lưu trữ được tạo bằng mã được tải lên từ một giai đoạn, bạn viết mã python của mình vào tệp nguồn .py .. Làm cách nào để tạo một thủ tục được lưu trữ?Làm thế nào để tạo một thủ tục được lưu trữ.. Trong Object Explorer, kết nối với một thể hiện của công cụ cơ sở dữ liệu và sau đó mở rộng thể hiện đó .. Mở rộng cơ sở dữ liệu, mở rộng cơ sở dữ liệu AdventureWorks2019, sau đó mở rộng khả năng lập trình .. Nhấp chuột phải vào các thủ tục được lưu trữ, sau đó nhấp vào thủ tục được lưu trữ mới .. Thủ tục lưu trữ được lưu trữ là gì?Thủ tục được lưu trữ là gì?Một quy trình được lưu trữ là mã SQL đã chuẩn bị mà bạn có thể lưu, vì vậy mã có thể được sử dụng lại nhiều lần.Vì vậy, nếu bạn có một truy vấn SQL mà bạn viết nhiều lần, hãy lưu nó dưới dạng thủ tục được lưu trữ, và sau đó chỉ cần gọi nó để thực hiện nó.a prepared SQL code that you can save, so the code can be reused over and over again. So if you have an SQL query that you write over and over again, save it as a stored procedure, and then just call it to execute it. |