Nếu bạn đang đọc bài đăng này thì bạn có thể biết về cơ sở dữ liệu bông tuyết. Nó là một kho dữ liệu dựa trên điện toán đám mây hỗ trợ SQL cho các hoạt động của nó. Nó đang trở nên cực kỳ phổ biến nhờ khả năng mở rộng, hỗ trợ đa ngôn ngữ, khả năng xử lý dữ liệu lớn và danh sách này tiếp tục. Nó tương thích với các dịch vụ web của Amazon, Microsoft Azure và Google Cloud Platform
Hình ảnh được lấy từ https. //www. bông tuyết. com/
Trong bài viết này, trọng tâm chính của chúng tôi không phải là về DB bông tuyết ở đây mà là kết nối của bông tuyết với python và một số lỗi mà chúng tôi gặp phải khi kết nối bông tuyết với python
Các cách khác nhau để kết nối Python với Snowflake DB
Ở đây tôi đã đưa ra một cái nhìn tổng quan nhanh về cách chúng ta có thể kết nối bông tuyết với python bằng trình kết nối bông tuyết, công cụ SQLAlchemy và khóa riêng. Tôi cũng đã cung cấp các tài liệu tham khảo [từ tài liệu về bông tuyết] ở cuối bài viết nếu bạn muốn khám phá thêm về chủ đề này. Hãy để chúng tôi kiểm tra các cách kết nối khác nhau một cách chi tiết
Kết nối Python với Snowflake DB bằng Trình kết nối bông tuyết với xác thực trình duyệt bên ngoài
Trước hết, chúng ta cần cài đặt trình kết nối python được gấu trúc hỗ trợ bằng lệnh bên dưới thông qua sổ ghi chép Jupyter
!pip install snowflake-connector-python[pandas]
Nếu bạn đang làm việc trên môi trường của khách hàng thì bạn cần cung cấp các chi tiết bên dưới để kết nối python của bạn với snowflake DB. Một điểm quan trọng cần lưu ý ở đây là mật khẩu không bắt buộc trong trường hợp đăng nhập SSO khi chúng tôi cung cấp trình xác thực là 'trình duyệt bên ngoài'. Google Chrome là trình duyệt tương thích nhất cho thao tác này
import snowflake.connector import pandas as pd import numpy as np ctx = snowflake.connector.connect[ account = '', user = '', schema = '', warehouse='', role = '', authenticator='externalbrowser', ] cur = ctx.cursor[]
Bây giờ chúng ta có thể thực hiện nhiều thao tác như đọc hoặc ghi dữ liệu từ snowflake sang python và ngược lại với sự trợ giúp của đối tượng con trỏ này
Kết nối Python với Snowflake DB Sử dụng Snowflake Sqlalchemy với xác thực trình duyệt bên ngoài
Vì chúng tôi đã cài đặt trình kết nối python trước đó, bây giờ chúng tôi sẽ cài đặt gói Snowflake SQLAlchemy bằng lệnh bên dưới thông qua sổ ghi chép Jupyter
!pip install --upgrade snowflake-sqlalchemy
Giả sử bạn đang làm việc trong môi trường của máy khách và sử dụng xác thực trình duyệt bên ngoài SSO bên dưới truy vấn sẽ thuận tiện cho việc kết nối
import pandas as pd import numpy as np from sqlalchemy import create_engine from snowflake.sqlalchemy import URL url = URL[ account = '', user = '', database = ' , schema = '', warehouse= '', role = '', authenticator='externalbrowser', ] engine = create_engine[url] connection = engine.connect[]
- Hoạt động đọc và ghi dữ liệu
Bây giờ chúng ta có thể tìm nạp dữ liệu từ bảng DB bông tuyết trong khung dữ liệu python thông qua các lệnh đơn giản bên dưới
query = '''select * from ''' data = pd.read_sql[query, connection]
Tương tự, chúng ta cũng có thể ghi dữ liệu python vào bảng bông tuyết như bên dưới. Thao tác này sẽ cắt bớt và tải bảng bông tuyết. Chúng tôi có thể sử dụng 'chắp thêm' thay cho 'thay thế' nếu chúng tôi muốn tải delta
data.to_sql['', engine, if_exists='replace', index=False, index_label=None]
- Ảnh chụp kết nối bằng cách sử dụng 'trình duyệt bên ngoài' và tải dữ liệu
Trong ảnh chụp nhanh bên dưới, bạn có thể xem cách kết nối python với bông tuyết bằng xác thực trình duyệt bên ngoài. Chi tiết kết nối bị ẩn vì đó là dữ liệu dành riêng cho khách hàng
Kết nối Python với Snowflake DB bằng cách sử dụng Xác thực cặp khóa và sử dụng lại kết nối hiện có để tạo một công cụ cho SQLAlchemy
Ngoài những chi tiết thông thường [đ. g. tên tài khoản, người dùng, cơ sở dữ liệu, v.v.] chúng tôi cần hai chi tiết quan trọng khác. Một trong số đó là đường dẫn mà chúng tôi đã lưu trữ khóa riêng trong bông tuyết và thứ hai là mật khẩu để truy cập khóa.
Dưới đây là mã python được yêu cầu khi chúng ta cần kết nối bông tuyết bằng khóa riêng được tạo trước đó trong môi trường bông tuyết. Chúng tôi cũng sẽ sử dụng kết nối này để tạo một công cụ SQLAlchemy do đó sẽ dễ dàng đọc hoặc ghi dữ liệu bằng truy vấn SQL.
from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives.asymmetric import dsa from cryptography.hazmat.primitives import serialization with open[path, "rb"] as key: p_key= serialization.load_pem_private_key[key.read[],password=''.encode[],backend=default_backend[]] pkb = p_key.private_bytes[encoding=serialization.Encoding.DER, format=serialization.PrivateFormat.PKCS8,encryption_algorithm=serialization.NoEncryption[]] ctx = snowflake.connector.connect[user=user,account=account,private_key=pkb,warehouse=warehouse,database=database] if ctx: eng = sqlalchemy.create_engine[url,poolclass=sqlalchemy.pool.StaticPool,creator = lambda:ctx] else: eng=sqlalchemy.create_engine[url,creator=get_connect] con = eng.connect[] url = URL[account = '',user = '',database = '',warehouse= '',role = '']
Lỗi khi kết nối cặp khóa
Trong trường hợp bạn gặp thông báo lỗi dưới đây sau khi thực thi đoạn mã trên
"Không thể deserialize dữ liệu quan trọng"
Chắc chắn, bạn cần kiểm tra đường dẫn bạn đã cung cấp nơi chứa khóa RSA của bạn. Đôi khi, khóa của bạn bị hỏng hoặc không truy cập được vì bất kỳ lý do gì thì bạn cũng có thể gặp lỗi trên. Trong trường hợp đó, bạn có thể thông báo cho DBA bông tuyết của mình để tạo khóa RSA mới
Chúng tôi có thể tìm nạp dữ liệu từ các bảng bông tuyết và lưu trữ chúng dưới dạng khung dữ liệu gấu trúc bằng mã bên dưới
cur = ctx.cursor[] query = '''select * from ''' cur.execute[query] data = pd.DataFrame.from_records[iter[cur], columns=[x[0] for x in cur.description]] cur.close[]
Ghi chú kết thúc
Luôn nhớ đóng con trỏ khi bạn đã thực hiện tất cả các lệnh liên quan đến con trỏ đó và bạn không cần kết nối nữa
Trong trường hợp chúng ta cần truy cập hai bảng lược đồ khác nhau thì chúng ta cũng có thể tạo hai con trỏ khác nhau để thực hiện các truy vấn khác nhau liên quan đến hai bảng đó
Hy vọng bạn thấy bài viết này có giá trị trong nhiệm vụ kết nối Python và cơ sở dữ liệu Snowflake
Người giới thiệu
https. // tài liệu. bông tuyết. com/vi/user-guide/sqlalchemy. html
https. // tài liệu. bông tuyết. com/vi/user-guide/python-connector-pandas. html
https. // tài liệu. bông tuyết. com/en/user-guide/python-connector-example. html
Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả