Hướng dẫn call snowflake stored procedure from python - gọi thủ tục lưu trữ bông tuyết từ python

Tôi đã tạo ra thủ tục được lưu trữ trong Snowflake được thực hiện tốt trong UI Snowflake và cũng từ máy chủ bằng cách sử dụng Snowsql. Bây giờ tôi muốn thực hiện thủ tục từ chương trình Python, tôi đã cố gắng thực thi từ Python, đây là các bước mà tôi đã làm theo:

  1. Thiết lập kết nối với Bông tuyết (có thể kết nối thành công.)

cs = ctx.cursor ()

  1. Được sử dụng vai trò phù hợp, kho, cơ sở dữ liệu và lược đồ.
  2. Đã cố gắng thực hiện thủ tục như thế này:

cs.execute("call test_proc('value1', 'value2')")   
x = cs.fetchall() 
print(x)

Nhưng nhận được một erorr:

snowflake.connector.errors.programingError: 002140 (42601): Lỗi biên dịch SQL: Chức năng không xác định Test_Proc

Bạn có thể vui lòng giúp tôi giải quyết vấn đề này.

Thanks,

Hỏi ngày 17 tháng 4 năm 2021 lúc 21:48Apr 17, 2021 at 21:48

Hướng dẫn call snowflake stored procedure from python - gọi thủ tục lưu trữ bông tuyết từ python

Khi kết nối với bông tuyết bằng đầu nối Python, bạn có thể xác định

conn = snowflake.connector.connect(
                user=USER,
                password=PASSWORD,
                account=ACCOUNT,
                warehouse=WAREHOUSE,
                database=DATABASE,
                schema=SCHEMA
                );
7

conn = snowflake.connector.connect(
                user=USER,
                password=PASSWORD,
                account=ACCOUNT,
                warehouse=WAREHOUSE,
                database=DATABASE,
                schema=SCHEMA
                );

Khi bạn đã thiết lập, bạn có thể gọi thủ tục được lưu trữ của mình mà không cần sử dụng tên đủ điều kiện đầy đủ:

cs.execute("call test_proc('value1', 'value2')");

Cách khác là:

Sử dụng cơ sở dữ liệu, lược đồ và kho

Chỉ định cơ sở dữ liệu và lược đồ mà bạn muốn tạo bảng. Đồng thời chỉ định kho sẽ cung cấp tài nguyên để thực hiện các câu lệnh và truy vấn DML.

Ví dụ: để sử dụng cơ sở dữ liệu TestDB, Schema Testschema và Warehouse Tiny_warehouse (được tạo trước đó):

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")

Đã trả lời ngày 18 tháng 4 năm 2021 lúc 6:50Apr 18, 2021 at 6:50

Lukasz Szozdalukasz SzozdaLukasz Szozda

150K21 Huy hiệu vàng209 Huy hiệu bạc244 Huy hiệu Đồng21 gold badges209 silver badges244 bronze badges

Trên thực tế, tôi phải có lệnh như thế này

Cs.Execute ("Gọi cho bạnDbName.schemaname.test_proc ('value1', 'value2')")

Và nó đang hoạt động như mong đợi.

Cảm ơn

Đã trả lời ngày 17 tháng 4 năm 2021 lúc 21:55Apr 17, 2021 at 21:55

RabrabRab

1591 Huy hiệu bạc9 Huy hiệu đồng1 silver badge9 bronze badges

1

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.

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.

Để biết thông tin về các mô hình học máy và Snowpark Python, hãy xem các mô hình học máy đào tạo với Snowpark Python.Training Machine Learning Models with Snowpark Python.

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.

Ghi chú

Để tạo và gọi một thủ tục ẩn danh, hãy sử dụng cuộc gọi (với quy trình ẩn danh). Tạo và gọi một thủ tục ẩn danh không yêu cầu vai trò với các đặc quyền Lược đồ quy trình Tạo.CALL (with Anonymous Procedure). Creating and calling an anonymous procedure does not require a role with CREATE PROCEDURE schema privileges.

Điều kiện tiên quyết

Bạ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ạn

Như 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.

  • 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. Ví dụ:

    CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
      RETURNS STRING
      LANGUAGE PYTHON
      RUNTIME_VERSION = '3.8'
      PACKAGES = ('snowflake-snowpark-python')
      HANDLER = 'run'
    AS
    $$
    def run(session, from_table, to_table, count):
      session.table(from_table).limit(count).write.save_as_table(to_table)
      return "SUCCESS"
    $$;
    

  • Trong một quy trình được lưu trữ được tạo với 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

    conn = snowflake.connector.connect(
                    user=USER,
                    password=PASSWORD,
                    account=ACCOUNT,
                    warehouse=WAREHOUSE,
                    database=DATABASE,
                    schema=SCHEMA
                    );
    
    8. Ví dụ: bạn có thể đặt mã sau vào một tệp có tên
    conn = snowflake.connector.connect(
                    user=USER,
                    password=PASSWORD,
                    account=ACCOUNT,
                    warehouse=WAREHOUSE,
                    database=DATABASE,
                    schema=SCHEMA
                    );
    
    9:

    def run(session, from_table, to_table, count):
      session.table(from_table).limit(count).write.save_as_table(to_table)
      return "SUCCESS"
    

    Sau đó, bạn tải tệp lên một giai đoạn và thực thi lệnh Creat Produre, trỏ đến tệp trên sân khấu. Ví dụ:

    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';
    

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ạn

Như đượ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ật

Phươ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ọi

Ngoà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-Python

Thư 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ăng

Khi viết phương thức hoặc chức năng cho quy trình được lưu trữ, lưu ý như sau:

  • Chỉ định đối tượng SnowPark

    cs.execute("call test_proc('value1', 'value2')");
    
    0 là đối số đầu tiên của phương thức hoặc chức năng của bạn. Khi bạn gọi thủ tục được lưu trữ của mình, Snowflake sẽ tự động tạo một đối tượng
    cs.execute("call test_proc('value1', 'value2')");
    
    0 và chuyển nó cho thủ tục được lưu trữ của bạn. (Bạn không thể tự tạo đối tượng
    cs.execute("call test_proc('value1', 'value2')");
    
    0.)

  • Đối với phần còn lại của các đối số và đối với giá trị trả về, hãy sử dụng các loại Python tương ứng với các loại dữ liệu Bông tuyết. Bông tuyết hỗ trợ các loại dữ liệu Python được liệt kê trong ánh xạ kiểu dữ liệu SQL-Python cho các tham số và loại trả vềSnowflake data types. Snowflake supports the Python data types listed in SQL-Python Data Type Mappings for Parameters and Return Types

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 sẽ tạo ra một đối tượng SnowPark

cs.execute("call test_proc('value1', 'value2')");
0 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

cs.execute("call test_proc('value1', 'value2')");
0 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:

  • Một đối tượng Snowpark

    cs.execute("call test_proc('value1', 'value2')");
    
    0

  • Tên của bảng để sao chép các hàng từ

  • Tên của bảng để lưu các hàng vào

  • Số lượng hàng để sao chép

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ú

  • 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.

  • Để 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ọ

    • Họ

    • Địa chỉ email

    Nế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.

  1. Đăng nhập vào Snowsight, giao diện web Snowflake.Snowsight, the Snowflake web interface.

  2. 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.Switch Role » ORGADMIN to change to the organization administrator role.

  3. Nhấp vào Quản trị viên »Thanh toán» Điều khoản & Thanh toán.Admin » Billing » Terms & Billing.

  4. 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.Anaconda section and click the Enable button. The Anaconda Packages (Preview Feature) dialog opens.

  5. 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.

  6. 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.Acknowledge & Continue button.

Ghi chú

Nếu bạn không thừa nhận các điều khoản của bên thứ ba của Bông tuyết như được mô tả ở trên, bạn vẫn có thể sử dụng các quy trình được lưu trữ, nhưng với những hạn chế này:

  • Bạn có thể sử dụng bất kỳ gói nào của bên thứ ba từ Anaconda.

  • Bạn vẫn có thể chỉ định SnowPark Python là một gói trong một quy trình được lưu trữ, nhưng bạn có thể chỉ định một phiên bản cụ thể.

  • Bạn có thể sử dụng phương thức

    cs.execute("call test_proc('value1', 'value2')");
    
    6 khi tương tác với đối tượng DataFrame.

Hiển thị và sử dụng các gói

Bạn cũng có thể hiển thị tất cả các gói có sẵn và thông tin phiên bản của họ bằng cách truy vấn chế độ xem các gói trong lược đồ thông tin.

select * from information_schema.packages where language = 'python';

Để 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 trong tài liệu UDF của Snowflake Python.Using Third-Party Packages in the Snowflake Python UDF documentation.

Truy cập các lớp và tệp tài nguyên khác

Nếu mã của bạn phụ thuộc vào các tệp tài nguyên khác hoặc các mô -đun Python được xác định bên ngoài quy trình được lưu trữ, bạn phải tải các tệp đó lên một giai đoạn để các tệp sẽ có sẵn khi quy trình được lưu trữ thực thi.upload those files to a stage so that the files will be available when the stored procedure executes.

Sau đó, khi thực hiện câu lệnh Creing Quy trình, hãy sử dụng mệnh đề nhập để trỏ đến các tệp này.executing the CREATE PROCEDURE statement, use the IMPORTS clause to point to these files.

Tải tệp lên giai đoạn

Tải các tệp cần thiết cho quy trình được lưu trữ của bạn lên một giai đoạn:

  1. Chọn một giai đoạn cho các tập tin của bạn.

    Bạn có thể sử dụng một giai đoạn bên ngoài hoặc được đặt tên bên trong. Nếu bạn có kế hoạch sử dụng lệnh PUT để tải lên các tệp, hãy sử dụng giai đoạn nội bộ được đặt tên. (Lệnh đặt không hỗ trợ tải các tệp lên các giai đoạn bên ngoài.)PUT command to upload the files, use a named internal stage. (The PUT command does not support uploading files to external stages.)

    Bạn có thể sử dụng một giai đoạn hiện có hoặc bạn có thể tạo một giai đoạn mới bằng cách thực hiện Created Giai đoạn. Ví dụ: lệnh sau đây tạo ra một giai đoạn nội bộ mới có tên

    cs.execute("call test_proc('value1', 'value2')");
    
    7:CREATE STAGE. For example, the following command creates a new internal stage named
    cs.execute("call test_proc('value1', 'value2')");
    
    7:

    Ghi chú

    Nếu bạn không thừa nhận các điều khoản của bên thứ ba của Bông tuyết như được mô tả ở trên, bạn vẫn có thể sử dụng các quy trình được lưu trữ, nhưng với những hạn chế này:READ privilege to the stage.

  2. Bạn có thể sử dụng bất kỳ gói nào của bên thứ ba từ Anaconda.PUT command to upload the following files to that stage:

    • Bạn vẫn có thể chỉ định SnowPark Python là một gói trong một quy trình được lưu trữ, nhưng bạn có thể chỉ định một phiên bản cụ thể.

    • Bạn có thể sử dụng phương thức

      cs.execute("call test_proc('value1', 'value2')");
      
      6 khi tương tác với đối tượng DataFrame.

    Hiển thị và sử dụng các gói

    conn = snowflake.connector.connect(
                    user=USER,
                    password=PASSWORD,
                    account=ACCOUNT,
                    warehouse=WAREHOUSE,
                    database=DATABASE,
                    schema=SCHEMA
                    );
    
    0

    Ghi chú

    Bạn cũng có thể hiển thị tất cả các gói có sẵn và thông tin phiên bản của họ bằng cách truy vấn chế độ xem các gói trong lược đồ thông tin.execute the CREATE PROCEDURE command, you will need to specify the filename with this

    conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
    conn.cursor().execute("USE DATABASE testdb_mg")
    conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
    
    0 extension in the IMPORTS clause.

    Ghi chú

    Để 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 trong tài liệu UDF của Snowflake Python.

Truy cập các lớp và tệp tài nguyên khác

Nếu mã của bạn phụ thuộc vào các tệp tài nguyên khác hoặc các mô -đun Python được xác định bên ngoài quy trình được lưu trữ, bạn phải tải các tệp đó lên một giai đoạn để các tệp sẽ có sẵn khi quy trình được lưu trữ thực thi.

  • Sau đó, khi thực hiện câu lệnh Creing Quy trình, hãy sử dụng mệnh đề nhập để trỏ đến các tệp này.

  • Tải tệp lên giai đoạn

Tải các tệp cần thiết cho quy trình được lưu trữ của bạn lên một giai đoạn:

Chọn một giai đoạn cho các tập tin của bạn.CREATE PROCEDURE statement to create a stored procedure for your method or function.

Ghi chú

Bạn có thể sử dụng một giai đoạn bên ngoài hoặc được đặt tên bên trong. Nếu bạn có kế hoạch sử dụng lệnh PUT để tải lên các tệp, hãy sử dụng giai đoạn nội bộ được đặt tên. (Lệnh đặt không hỗ trợ tải các tệp lên các giai đoạn bên ngoài.)CALL (with Anonymous Procedure). Creating and calling an anonymous procedure does not require a role with CREATE PROCEDURE schema privileges.

Bạn có thể sử dụng một giai đoạn hiện có hoặc bạn có thể tạo một giai đoạn mới bằng cách thực hiện Created Giai đoạn. Ví dụ: lệnh sau đây tạo ra một giai đoạn nội bộ mới có tên

cs.execute("call test_proc('value1', 'value2')");
7:

Chủ sở hữu của thủ tục được lưu trữ phải có đặc quyền đọc cho sân khấu.

Sử dụng lệnh đặt để tải các tệp sau lên giai đoạn đó:

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
1

  • Các tập tin chứa mã Python của bạn.

  • Bất kỳ tệp nào khác mà thủ tục lưu trữ của bạn phụ thuộc vào.Snowflake data types that correspond to the Python types of the arguments in your method or function.

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
4

Ví dụ:

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
5

Nếu bạn bỏ qua

cs.execute("call test_proc('value1', 'value2')");
8, lệnh PUT sẽ tự động nén tệp. Tên của tệp nén trên sân khấu sẽ là
cs.execute("call test_proc('value1', 'value2')");
9. Sau đó, khi bạn thực thi lệnh Creat Creating, bạn sẽ cần chỉ định tên tệp với tiện ích mở rộng
conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
0 này trong Điều khoản nhập khẩu.

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
6

Lệnh đặt không hỗ trợ tải lên các tệp lên các giai đoạn bên ngoài. Để tải các tệp lên các giai đoạn bên ngoài, hãy sử dụng các tiện ích được cung cấp bởi dịch vụ đám mây.

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
7

Lưu ý rằng nếu bạn xóa hoặc đổi tên tệp chứa mã Python của bạn, bạn không còn có thể gọi thủ tục được lưu trữ nữa.

Nếu bạn cần cập nhật tệp của mình, thì:

conn = snowflake.connector.connect(
                user=USER,
                password=PASSWORD,
                account=ACCOUNT,
                warehouse=WAREHOUSE,
                database=DATABASE,
                schema=SCHEMA
                );
1

Hiển thị và sử dụng các gói

  • Bạn cũng có thể hiển thị tất cả các gói có sẵn và thông tin phiên bản của họ bằng cách truy vấn chế độ xem các gói trong lược đồ thông tin.

    conn = snowflake.connector.connect(
                    user=USER,
                    password=PASSWORD,
                    account=ACCOUNT,
                    warehouse=WAREHOUSE,
                    database=DATABASE,
                    schema=SCHEMA
                    );
    
    2

  • Để 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 trong tài liệu UDF của Snowflake Python.

    conn = snowflake.connector.connect(
                    user=USER,
                    password=PASSWORD,
                    account=ACCOUNT,
                    warehouse=WAREHOUSE,
                    database=DATABASE,
                    schema=SCHEMA
                    );
    
    3

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
8

Truy cập các lớp và tệp tài nguyên khác

Nếu mã của bạn phụ thuộc vào các tệp tài nguyên khác hoặc các mô -đun Python được xác định bên ngoài quy trình được lưu trữ, bạn phải tải các tệp đó lên một giai đoạn để các tệp sẽ có sẵn khi quy trình được lưu trữ thực thi.

Sau đó, khi thực hiện câu lệnh Creing Quy trình, hãy sử dụng mệnh đề nhập để trỏ đến các tệp này.stage location, include those files in this list.

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")
9

Tải tệp lên giai đoạn

CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
  RETURNS STRING
  LANGUAGE PYTHON
  RUNTIME_VERSION = '3.8'
  PACKAGES = ('snowflake-snowpark-python')
  HANDLER = 'run'
AS
$$
def run(session, from_table, to_table, count):
  session.table(from_table).limit(count).write.save_as_table(to_table)
  return "SUCCESS"
$$;
0

Nếu bạn có kế hoạch thiết lập quy trình được lưu trữ để sử dụng quyền của người gọi, hãy thêm tham số này.caller’s rights, add this parameter.

Nếu không, nếu bạn muốn sử dụng quyền của chủ sở hữu, hãy bỏ qua tham số này.

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:

conn = snowflake.connector.connect(
                user=USER,
                password=PASSWORD,
                account=ACCOUNT,
                warehouse=WAREHOUSE,
                database=DATABASE,
                schema=SCHEMA
                );
4

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

CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
  RETURNS STRING
  LANGUAGE PYTHON
  RUNTIME_VERSION = '3.8'
  PACKAGES = ('snowflake-snowpark-python')
  HANDLER = 'run'
AS
$$
def run(session, from_table, to_table, count):
  session.table(from_table).limit(count).write.save_as_table(to_table)
  return "SUCCESS"
$$;
1 trên giai đoạn nội bộ
cs.execute("call test_proc('value1', 'value2')");
7:
A stored procedure that uses code uploaded from a stage in the Python file
CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
  RETURNS STRING
  LANGUAGE PYTHON
  RUNTIME_VERSION = '3.8'
  PACKAGES = ('snowflake-snowpark-python')
  HANDLER = 'run'
AS
$$
def run(session, from_table, to_table, count):
  session.table(from_table).limit(count).write.save_as_table(to_table)
  return "SUCCESS"
$$;
1 on the internal stage
cs.execute("call test_proc('value1', 'value2')");
7:

conn = snowflake.connector.connect(
                user=USER,
                password=PASSWORD,
                account=ACCOUNT,
                warehouse=WAREHOUSE,
                database=DATABASE,
                schema=SCHEMA
                );
5

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:

conn = snowflake.connector.connect(
                user=USER,
                password=PASSWORD,
                account=ACCOUNT,
                warehouse=WAREHOUSE,
                database=DATABASE,
                schema=SCHEMA
                );
6

Hạn chế ở

Các thủ tục lưu trữ Snowpark có những hạn chế sau:

  • Tạo quy trình không được hỗ trợ trong các thủ tục lưu trữ.

  • Chạy các truy vấn đồng thời không được hỗ trợ trong các thủ tục lưu trữ.

  • Nếu bạn đang thực hiện thủ tục được lưu trữ của mình từ một nhiệm vụ, bạn phải chỉ định kho khi tạo nhiệm vụ. .

  • Bạn không thể sử dụng API thực thi và nhận các lệnh, bao gồm

    CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
      RETURNS STRING
      LANGUAGE PYTHON
      RUNTIME_VERSION = '3.8'
      PACKAGES = ('snowflake-snowpark-python')
      HANDLER = 'run'
    AS
    $$
    def run(session, from_table, to_table, count):
      session.table(from_table).limit(count).write.save_as_table(to_table)
      return "SUCCESS"
    $$;
    
    3 và
    CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
      RETURNS STRING
      LANGUAGE PYTHON
      RUNTIME_VERSION = '3.8'
      PACKAGES = ('snowflake-snowpark-python')
      HANDLER = 'run'
    AS
    $$
    def run(session, from_table, to_table, count):
      session.table(from_table).limit(count).write.save_as_table(to_table)
      return "SUCCESS"
    $$;
    
    4.

  • Khi bạn tải xuống các tệp từ giai đoạn sử dụng

    CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
      RETURNS STRING
      LANGUAGE PYTHON
      RUNTIME_VERSION = '3.8'
      PACKAGES = ('snowflake-snowpark-python')
      HANDLER = 'run'
    AS
    $$
    def run(session, from_table, to_table, count):
      session.table(from_table).limit(count).write.save_as_table(to_table)
      return "SUCCESS"
    $$;
    
    5, việc khớp mẫu không được hỗ trợ.

  • Khi sử dụng

    CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
      RETURNS STRING
      LANGUAGE PYTHON
      RUNTIME_VERSION = '3.8'
      PACKAGES = ('snowflake-snowpark-python')
      HANDLER = 'run'
    AS
    $$
    def run(session, from_table, to_table, count):
      session.table(from_table).limit(count).write.save_as_table(to_table)
      return "SUCCESS"
    $$;
    
    6 trong quy trình Python UDF hoặc được lưu trữ, tham số
    CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
      RETURNS STRING
      LANGUAGE PYTHON
      RUNTIME_VERSION = '3.8'
      PACKAGES = ('snowflake-snowpark-python')
      HANDLER = 'run'
    AS
    $$
    def run(session, from_table, to_table, count):
      session.table(from_table).limit(count).write.save_as_table(to_table)
      return "SUCCESS"
    $$;
    
    7 phải được đặt thành
    CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
      RETURNS STRING
      LANGUAGE PYTHON
      RUNTIME_VERSION = '3.8'
      PACKAGES = ('snowflake-snowpark-python')
      HANDLER = 'run'
    AS
    $$
    def run(session, from_table, to_table, count):
      session.table(from_table).limit(count).write.save_as_table(to_table)
      return "SUCCESS"
    $$;
    
    8. Để biết thêm thông tin, hãy xem tài liệu về việc sử dụng các gói của bên thứ ba.the documentation about using third-party packages.

Làm thế nào để bạn thực hiện một bông tuyết từ một thủ tục được lưu trữ trong Python?

Introduction..
Prerequisites..
Thiết lập môi trường phát triển của bạn cho Snowpark ..
Chọn tạo 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ạn ..
Viết mã Python cho thủ tục được lưu trữ. ....
Tạo quy trình được lưu trữ ..
Gọi thủ tục lưu trữ của bạn ..
Limitations..

Làm thế nào để bạn gọi một thủ tục bên trong một bông tuyết?

Có một số quirks với các tham số, ví dụ.Các loại dữ liệu hoặc loại dữ liệu không phải chuỗi hoặc số ...
Tạo hoặc thay thế thủ tục test_called_sp ..
Trả về biến thể ..
Ngôn ngữ JavaScript ..
Thực thi với tư cách là người gọi ..
trả về [param1, param2] ;.

Làm thế nào để bạn thực hiện một thủ tục được lưu trữ trong Python?

Để gọi một quy trình được lưu trữ từ ứng dụng Python, hãy sử dụng chức năng IBM_DB.CallProc.Quy trình mà bạn gọi có thể bao gồm các tham số đầu vào (IN), tham số đầu ra (ra) và tham số đầu vào và đầu ra (INOUT).use ibm_db. callproc function. The procedure that you call can include input parameters (IN), output parameters (OUT), and input and output parameters (INOUT).

Chúng ta có thể gọi thủ tục được lưu trữ từ chức năng trong bông tuyết không?

Bạn không thể gọi một thủ tục được lưu trữ từ UDF.Tham khảo ghi chú sử dụng, đặc biệt là phần này "Vì cuộc gọi không thể là một phần của biểu thức"Bạn có thể sử dụng chức năng bảng do người dùng xác định (UDTF) tùy thuộc vào những gì bạn cần làm.. Refer to the usage notes, esp this part "because the call cannot be part of an expression": docs.snowflake.com/en/sql-reference/sql/call.html#usage-notes. You may be able to use a User Defined Table Function (UDTF) depending on what you need to do.