Mô hình hóa chiều và ETL trong Redshift


9

Tôi đã nghiên cứu cơ sở dữ liệu Redshift của Amazon như một sự thay thế có thể trong tương lai cho kho dữ liệu của chúng tôi. Kinh nghiệm của tôi luôn là sử dụng mô hình hóa chiều và các phương pháp của Ralph Kimball, vì vậy hơi lạ khi thấy Redshift không hỗ trợ các tính năng như kiểu dữ liệu nối tiếp cho các cột tăng tự động.

Tuy nhiên, có bài đăng blog gần đây từ blog AWS Big Data về cách tối ưu hóa Redshift cho lược đồ sao: https://bloss.aws.amazon.com/bigdata/post/Tx1WZP38ERPGK5K/Optimizing-for-Star-Schemas -và xen kẽ-Sắp xếp trên Amazon-Redshift

Câu hỏi tôi có là về cách thực hành tốt nhất để tải lược đồ sao trong Redshift là gì? Tôi không thể tìm thấy câu trả lời này trong bất kỳ tài liệu nào của Redshift.

Tôi đang nghiêng về việc nhập các tệp của mình từ S3 vào các bảng phân tầng và sau đó sử dụng SQL để thực hiện các phép biến đổi như tra cứu và tạo khóa thay thế trước khi chèn vào bảng đích.

Đây có phải là những gì người khác hiện đang làm? Có một công cụ ETL đáng giá tiền để làm điều này dễ dàng hơn?

Câu trả lời:


9

Bạn chắc chắn đang đi đúng hướng với Kimball chứ không phải inmon cho Redshift.

Có một số mẫu cho việc này, tôi đã sử dụng tất cả chúng trong các trường hợp sử dụng khác nhau

  1. Mẫu "ELT" - Tải các bảng nguồn để dịch chuyển hoàn toàn, không thực hiện bất kỳ biến đổi đáng kể nào cho đến khi dữ liệu được tải. Để làm điều này, bạn có thể tải lên s3, sau đó sử dụng lệnh sao chép dịch chuyển đỏ hoặc tôi khuyên bạn nên sử dụng "Dịch vụ di chuyển dữ liệu AWS", có thể đồng bộ hóa một nguồn (vdmysql hoặc postgres) cho mục tiêu (ví dụ như dịch chuyển đỏ) quy trình sql trong redshift để dân cư dims sau đó sự thật. Bạn có thể sử dụng các công cụ dựa trên đám mây phần ba để "đơn giản hóa" quy trình này nếu bạn muốn - chẳng hạn như Matillion (tôi không khuyên bạn nên sử dụng công cụ của bên thứ ba)
  2. "Mẫu ETL" - Chuyển đổi dữ liệu trong chuyến bay, sử dụng tia lửa apache. và tải dims và fact vào redshift spark-> s3-> redshift. Tôi đã sử dụng EMR cho việc này là tốt. đây cũng là cách tiếp cận được thực hiện nếu bạn sử dụng keo AWS
  3. Đừng biến đổi! - tương tự như 1) nhưng chỉ sử dụng các bảng đã được tải.

Lưu ý rằng Redshift đôi khi hoạt động TỐT HƠN nếu bạn có một bảng rộng với các giá trị lặp lại thay vì thực tế và kích thước. Lý do cho điều này là cách tiếp cận cột cho phép Redshift nén các giá trị khác nhau xuống mức khá hiệu quả. Tôi không có công thức khi nào nên sử dụng nhiều Kích thước so với bàn rộng bằng phẳng, cách duy nhất là dùng thử và xem!

Một số liên kết

AWS DMS cho Redshift taret

Keo AWS


1
Đồng ý với nhận xét về việc sử dụng các bảng rộng thay vì lược đồ sao, nếu kích thước của bạn khá đơn giản (một vài thuộc tính), hãy xem xét chỉ hợp nhất tất cả dữ liệu vào một bảng. Điều này là phản trực quan đối với hầu hết mọi người đến từ các nền tảng cơ sở dữ liệu truyền thống như SQL Server và Oracle, nhưng nó bắt đầu có ý nghĩa khi bạn nghĩ về cách một cơ sở dữ liệu MPP cột như Redshift thực sự hoạt động.
Nathan Griffiths

Tôi đồng ý với đánh giá về tác động hiệu suất và tính đơn giản của các truy vấn, nhưng nếu kích thước có xu hướng thay đổi thời gian iver chia chúng thành các bảng thứ nguyên có thể làm giảm bớt kết quả khó hiểu.
Merlin

2

Đối với ETL có keo AWS. Đây là một dịch vụ ETL không có máy chủ được quản lý, tải lên Redshift (trong số những thứ khác).

https://aws.amazon.com/glue/


Tôi sẽ nói đọc rất cẩn thận về những hạn chế áp dụng cho Keo. Chẳng hạn, nếu bạn muốn sử dụng các tập lệnh Python, thì Pandas và Numpy không có sẵn. Ngoài ra, các tập lệnh của bạn không thể dễ dàng được kích hoạt từ một sự kiện, vì vậy nếu bạn muốn chạy một hệ thống ETL loại phát trực tuyến, bạn cũng sẽ cần lambdas để kích hoạt các tập lệnh để chạy, v.v.
PizzaTheHut

2

Tôi hiện đang xử lý một nhiệm vụ tương tự. Đó là xây dựng quy trình ETL và mô hình chiều thiết kế. Tôi đã nghiên cứu rất nhiều cách tốt nhất để đối phó với nó và tìm thấy một nguồn kỹ thuật hữu ích tuyệt vời mà chúng ta chắc chắn nên áp dụng khi làm việc với MPP.

Để trả lời câu hỏi

Câu hỏi tôi có là về cách thực hành tốt nhất để tải lược đồ sao trong Redshift là gì?

hãy chắc chắn để xem xét tài nguyên này . Tôi cá là bạn sẽ thấy nó vô cùng hữu ích. Đó là một tài liệu ~ 35 trang với các kỹ thuật mạnh mẽ để thúc đẩy việc sử dụng các cửa hàng cột MPP. Nó hỗ trợ các ý kiến ​​bạn thấy như

Lưu ý rằng Redshift đôi khi hoạt động TỐT HƠN nếu bạn có một bảng rộng với các giá trị lặp lại thay vì thực tế và kích thước. Lý do cho điều này là cách tiếp cận cột cho phép Redshift nén các giá trị khác nhau xuống mức khá hiệu quả. Tôi không có công thức khi nào nên sử dụng nhiều Kích thước so với bàn rộng bằng phẳng, cách duy nhất là dùng thử và xem!

bình luận của Jon Scott

Hy vọng bạn thấy nó hữu ích như tôi


1

Tôi nghĩ tải từ S3 là một mô hình phổ biến.

Chúng tôi cần phải thực thi các ràng buộc về tính duy nhất vì vậy chúng tôi đã chọn viết thư cho Postgres và sau đó sao chép dữ liệu mới để dịch chuyển sau mỗi 10 phút.

Chúng tôi sử dụng https://github.com/uswitch/blueshift để tải vào Redshift.


1

Vì Redshift là một cơ sở dữ liệu cột, hiệu năng lưu trữ và truy vấn sẽ khác với các mô hình RDBMS. Tối ưu hóa cho một cơ sở dữ liệu cột cũng khác nhau. Bởi vì thường có ít I / O đĩa hơn và ít dữ liệu được tải từ đĩa hơn nên các truy vấn nhanh hơn.

Về bài đăng trên blog AWS mà bạn tham khảo, tôi cho rằng bạn đã xem xét các đề xuất đó và xem xét các tùy chọn nào phù hợp nhất với dữ liệu của bạn để phân phối, khóa, con trỏ, quản lý khối lượng công việc, v.v. và ít nhất có ý tưởng tốt về phương pháp này bạn sẽ sử dụng. Tôi thấy làm việc với biểu diễn trực quan dễ dàng hơn, bạn có thể xem xét sơ đồ DB nhanh và bẩn cho thấy các bảng hiện tại của bạn sẽ di chuyển sang Redshift như thế nào. Bao gồm những cái chính để có cảm giác về việc có bao nhiêu dữ liệu đang đi đâu. Và tôi chắc chắn sẽ sử dụng trình điều khiển ODBC / JDBC từ Amazon, việc tải một lượng lớn dữ liệu có thể gây rắc rối trong mọi trường hợp, ít chuyển sang loại DB khác.

Theo như ETL / ELT, có AWS Keo như các áp phích khác đã đề cập. Và vâng, có một số công cụ, một số trong số đó là miễn phí. Amazon cũng có Hướng dẫn thực hành tốt nhất về DB , điều đó cũng có thể giúp bạn. Một mẹo tôi đã thấy trong các diễn đàn khác là tải dữ liệu của bạn càng thô càng tốt và thực hiện các biến đổi trong Redshift. Điều đó sẽ dẫn bạn đến một quá trình ELT. Với rất nhiều lựa chọn, có lẽ việc xem xét so sánh 2 phương pháp sẽ giúp ích. Đây là một bài viết blog từ Panopoly giải thích sự khác biệt, nó có thể giúp bạn quyết định một con đường.


1

Amazon gần đây đã xuất bản một số thực tiễn tốt nhất cho ETL trong Redshift

https://aws.amazon.com/bloss/big-data/top-8-best-practices-for-high-performance-etl- Processing-USE-amazon-redshift /

Trong bài trình bày về chủ đề này Tony Gibbs, AWS Solution Architect đề xuất mẫu sau cho tải kiểu UPSERT:

  1. Tải dữ liệu CSV (từ S3) trong bảng phân tầng
  2. Xóa các hàng khớp với bảng prd
  3. Chèn dữ liệu từ giai đoạn

    BEGIN;
    CREATE TEMP TABLE staging(LIKE …);  copies dist keys
    copy staging from s3://… COMPUTE OFF;
    DELETE deep_dive d
    USING staging s WHERE d.aid = s.aid;
    INSERT INTO deep_dive SELECT * FROM staging
    DROP table staging;
    COMMIT;

Khi có thể, hãy thích DROP TABLE hoặc TRUNCATE để XÓA để tránh các hàng ma

Xem một video nói chuyện của anh ấy và các slide .

Trong nhóm của chúng tôi, chúng tôi thường tải dữ liệu vào Redshift trực tiếp từ S3 bằng cách sử dụng câu lệnh SQL COPY .

Và quản lý tất cả ETL của chúng tôi bằng công cụ Apache Airflow tuyệt vời .

Chúng tôi cũng sử dụng các dịch vụ tích hợp như Stich viết trực tiếp vào Redshift, sau đó sử dụng CREATE TABLE THÍCHCHỌN VÀO để di chuyển dữ liệu vào một lược đồ khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.