Làm cách nào để lấy dữ liệu từ Snowflake bằng Python?

Kiến trúc sư Pandita

Làm theo

25 Tháng một, 2021

·

7 phút đọc

Bắt đầu với Bông tuyết bằng Python

Hướng dẫn từng bước

Giống như nhiều công cụ và công nghệ mới và mới nổi trong thế giới dữ liệu lớn, Python cũng đang tăng cường các lĩnh vực triển khai do tính dễ sử dụng của nó. Vì vậy, hỗ trợ Snowflake trong Python không có gì ngạc nhiên. Mong muốn đạt được những tiến bộ trong tự động hóa với nền tảng dữ liệu và khối lượng công việc ngày càng đa dạng tạo nên một sự kết hợp tuyệt vời [Python + Snowflake]. Ví dụ: tự động hóa/xây dựng đường ống dữ liệu và lưu trữ dữ liệu trong Snowflake sau khi xử lý trước

Trong bài đăng trên blog này, tôi sẽ tìm hiểu cách Python được sử dụng để chạy các lệnh Bông tuyết cơ bản [CRUD]. Đây là điểm khởi đầu tốt cho bất kỳ ai muốn sử dụng Python cho Snowflake

Bài đăng này sẽ có phần thứ hai, nơi tôi sẽ đóng gói toàn bộ ứng dụng trong hình ảnh Docker và triển khai hình ảnh Docker đó trên cụm Azure Kubernetes [phiên bản dùng thử]. Vì vậy, hãy chú ý đến điều đó

Điều kiện tiên quyết. Các kỹ năng cơ bản về Python và Snowflake
Cấp độ. Người bắt đầu
Mã [git repo]. hashmapinc/oss/python_snowflake_poc

Cài đặt bông tuyết

1. Đi tới ĐĂNG NHẬP. https. //www. bông tuyết. com/

Nhập chi tiết và đăng ký dùng thử 30 ngày, xác minh từ Gmail
Trong thời gian dùng thử, Snowflake sẽ cung cấp đủ tín dụng để bắt đầu

2. Tải xuống Snowflake CLI

https. // tài liệu. bông tuyết. net/manuals/user-guide/snowsql-install-config. html

Ghi chú. Snowflake có tài liệu rất tốt cho tất cả các dịch vụ của mình. Kiểm tra hướng dẫn sử dụng này để hiểu chi tiết hơn [https. // tài liệu. bông tuyết. net/sách hướng dẫn sử dụng/hướng dẫn sử dụng. html ]

Tương tác với bông tuyết

Snowflake có 2 cách để bạn có thể tương tác với dịch vụ

giao diện web. Snowflake cung cấp giao diện web bao gồm các phương tiện để thực hiện các hành động như tạo, sửa đổi và quản lý tài khoản cũng như tài nguyên trong Snowflake

Hạn chế của giao diện web
a. Lệnh “đặt” không thể chạy qua giao diện web
b. không thể tải tệp lớn hơn 50MB vì ​​nó được dùng cho các tệp nhỏ

CLI. một giao diện dễ sử dụng nếu bạn là người dùng Linux và lấp đầy những khoảng trống này từ giao diện web

Thiết lập sân khấu cho hành động [bỏ qua nếu bạn đã quen với quy trình thiết kế của Snowflake]

Kiến trúc bông tuyết

Kiến trúc độc đáo của Snowflake bao gồm ba lớp chính
1. Lưu trữ tập trung
2. Tính toán và xử lý đa cụm
3. Dịch vụ điện toán đám mây

Snowflake Architecture — hình ảnh lịch sự của Snowflake Partner Technical Deck

Lưu trữ tập trung

Khi dữ liệu được tải vào Snowflake, nó sẽ sắp xếp lại dữ liệu đó thành định dạng cột, nén, được tối ưu hóa bên trong của Snowflake. Bông tuyết lưu trữ dữ liệu được tối ưu hóa này trong bộ lưu trữ đám mây. Snowflake quản lý tất cả các khía cạnh về cách dữ liệu này được lưu trữ

Xử lý truy vấn

Mỗi kho ảo là một cụm điện toán độc lập không chia sẻ tài nguyên điện toán với các kho ảo khác. Do đó, mỗi kho ảo không ảnh hưởng đến hiệu suất của các kho ảo khác

Dịch vụ điện toán đám mây

Các dịch vụ trong lớp này bao gồm

  • xác thực
  • quản lý cơ sở hạ tầng
  • quản lý siêu dữ liệu
  • Phân tích và tối ưu hóa truy vấn
  • Kiểm soát truy cập

Với các đặc quyền khác nhau, các cơ sở dữ liệu khác nhau được quản lý. Vì vậy, vai trò của người dùng là cần thiết để thực hiện một số tác vụ

Thiết lập phần phụ thuộc Python và mã

Thẩm quyền giải quyết. https. // tài liệu. bông tuyết. net/manuals/user-guide/python-connector-install. html

Đảm bảo bạn có Python 3. x được cài đặt với các mô-đun cần thiết

Cài đặt gói Python cho Snowflake

conn = snowflake.connector.connect[
user=cred["userid"],
password=cred["password"],
account=cred["account"],
session_parameters={
"QUERY_TAG": "EndOfMonthFinance",
}
]
print["success in connecting", conn]
0

Hãy viết mã

Tập lệnh py được viết theo cách rất đơn giản, không có lớp hoặc phương thức ưa thích nào

Mã [git repo]. hashmapinc / oss / python_snowflake_poc · GitLab
[điều này bao gồm máy tính xách tay Jupyter]

Ghi chú. Repo cũng bao gồm hình ảnh và tệp Docker. Đừng lo lắng về điều đó bây giờ vì nó không phải là trọng tâm của chúng tôi cho bài tập này

1. nhập gói

tín dụng. json” -> Tệp JSON chứa thông tin người dùng để tránh ghi thông tin nhạy cảm vào mã. Tôi tải JSON trong biến “cred”, thuộc loại dict, như hình bên dưới

# import require module and credential
import snowflake.connector
import json
with open[“cred.json”,”r”] as f:
cred = json.load[f]
create “cred.json” JSON file and write or you can use Json’s dump to create JSON:
{
“userid”:”userid”,
“password”:”xxxxx”,
“account”:”px00000.ap-southeast-2"
}

2. Thiết lập kết nối với Snowflake từ Python

conn = snowflake.connector.connect[
user=cred["userid"],
password=cred["password"],
account=cred["account"],
session_parameters={
"QUERY_TAG": "EndOfMonthFinance",
}
]
print["success in connecting", conn]

Bạn cũng có thể đặt tham số phiên bằng cách thực hiện câu lệnh SQL ALTER SESSION SET… sau khi kết nối

con.cursor[].execute["ALTER SESSION SET QUERY_TAG = 'EndOfMonthFinancials' "]
"""

3. Thay đổi vai trò hiện tại thành “SYSADMIN” vì mặc định có thể không phải là SYSADMIN. Điều này rất quan trọng để thực hiện các hành động sẽ được thực hiện

conn.cursor[].execute["use role sysadmin"]

4. Thiết lập Snowflake để lưu trữ và quản lý dữ liệu

Sử dụng “CREATE OR REPLACE” -> để tạo mới và ghi đè
sử dụng “CREATE” -> để tạo mới [sẽ báo lỗi khi tạo nếu nó tồn tại]
hoặc sử dụng NẾU KHÔNG TỒN TẠI

# Creating a Database, Schema, and Warehouse
conn.cursor[].execute["CREATE WAREHOUSE IF NOT EXISTS tiny_warehouse_mg"]
conn.cursor[].execute["CREATE DATABASE IF NOT EXISTS testdb_mg"]
conn.cursor[].execute["USE DATABASE testdb_mg"]
# above line has to be executed before the below, as while building testschema_mg basic structure of WH, DB should be present
conn.cursor[].execute["CREATE SCHEMA IF NOT EXISTS testschema_mg"]

5. Đặt yêu cầu hiện tại WH, DB, Schema

# Using the Database, Schema, and Warehouse
conn.cursor[].execute["USE DATABASE testdb_mg"]
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. Tạo một bảng mới với 2 cột;

# Creating Tables and Inserting Data
conn.cursor[].execute[
"CREATE OR REPLACE TABLE "
"test_table[col1 integer, col2 string]" ]

7. Hãy chèn 2 bản ghi vào bảng trên

Ở đây chúng tôi đang sử dụng nối chuỗi. Giống như bất kỳ trình kết nối DB nào khác trong Python, chúng ta cũng có thể sử dụng một bộ để ngăn SQL injection

________số 8_______

8. Đưa Python vào sử dụng với Snowflake

Bạn phải tải dữ liệu trong bộ nhớ Snowflake Data trước khi có thể chạy truy vấn trên dữ liệu đó. Để quản lý đúng cách, chúng tôi có một khu vực tổ chức và loại lược đồ để giúp chúng tôi trích xuất dữ liệu ở định dạng nghiêm ngặt được yêu cầu. Đoạn mã dưới đây sẽ giúp chúng tôi tải các tệp CSV có trong tên thư mục “data. ” Sau khi dàn chúng ta sẽ copy nội dung file hoặc đổ dữ liệu vào bảng [test_table] đã tạo

Nếu bạn đang sử dụng Windows cmd, bạn phải cung cấp đường dẫn như [ “\\” ]
[“tệp PUT. //. \\data\\crick* @testdb_mg. testschema_mg. %test_table”]

Đối với S3 hoặc bất kỳ bộ lưu trữ đám mây nào khác, mã tương tự là bắt buộc

Ghi chú. 'đặt' được sử dụng từ CLI và đảm bảo có quyền truy cập, đường dẫn được đề cập

# Putting Data
# @DB.SCHEMA.TABLE , this is as per hierarchy of contents. like DB

Chủ Đề