Bỏ qua để đến nội dung

Nạp dữ liệu vào Snowflake: Stage, COPY & Snowpipe

Trước khi phân tích, dữ liệu phải vào kho. Snowflake nhận đủ định dạng phổ biến — CSV, JSON, Parquet, Avro, ORC, XML — theo hai cách chính: nạp hàng loạt (batch) bằng COPY, và nạp liên tục (gần thời gian thực) bằng Snowpipe.

Stage là nơi Snowflake đọc file để nạp. Có hai loại:

  • Internal stage: vùng lưu trữ do Snowflake quản lý (bạn PUT file lên).
  • External stage: trỏ thẳng tới kho object đám mây của bạn — Amazon S3, Azure Blob, Google Cloud Storage — Snowflake đọc trực tiếp, không cần chép vào trong.
flowchart LR
  SRC["File nguồn<br/>CSV · JSON · Parquet"] --> STG["Stage<br/>(internal / external)"]
  STG -->|"COPY INTO"| TBL["Bảng trong Snowflake"]
  STG -->|"Snowpipe<br/>(tự động, liên tục)"| TBL

Lệnh COPY INTO đọc file từ stage và nạp vào bảng — chạy trên một virtual warehouse, song song hóa tự động, xử lý được khối lượng lớn:

COPY INTO doanh_thu
FROM @my_stage/2026/
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1)
ON_ERROR = 'CONTINUE';

Snowflake ghi nhớ file đã nạp, nên chạy lại COPY sẽ không nạp trùng — an toàn cho pipeline lặp lại. Tham số ON_ERROR cho phép bỏ qua dòng lỗi hoặc dừng tùy chính sách của bạn.

Khi dữ liệu đổ về liên tục (log, giao dịch, sự kiện IoT), bạn không muốn chạy COPY thủ công mỗi lần. Snowpipe lắng nghe stage và tự nạp file mới ngay khi nó xuất hiện — gần thời gian thực, theo cơ chế serverless (Snowflake tự cấp compute, tính tiền theo lượng nạp, không cần warehouse luôn bật).

COPY (hàng loạt)Snowpipe (liên tục)
Kích hoạtBạn chạy lệnh / lịchTự động khi có file mới
Độ trễTheo lịch (phút–giờ)Gần thời gian thực
ComputeVirtual warehouseServerless (Snowflake lo)
Hợp vớiTải định kỳ, ETL đêmStreaming, log, sự kiện

Sau khi nạp dữ liệu thô, bạn biến đổi nó ngay trong Snowflake bằng SQL (mô hình ELT: Extract–Load–Transform). Với logic phức tạp, dùng Snowpark (Python/Java/Scala) hoặc tích hợp công cụ như dbt. Cách này tận dụng sức mạnh của Snowflake và không kéo dữ liệu ra ngoài.

Chia sẻ: