Xây dựng Dashboard phân tích dữ liệu trên Data Warehouse.
- 8 minsTiếp tục series các bài viết chủ đề Data Warehouse, hôm nay chúng ta sẽ đến với một nội dung khá là thú vị đó là xây dựng Dashboard phân tích dữ liệu trên Data warehouse. Xây dựng Dashboard phân tích dữ liệu là một trong những chức năng cơ bản nhất trong các hoạt động BI (Business Intelligence), giúp trực quan hóa dữ liệu dưới dạng các biểu đồ, từ đó giúp cho người dùng có thể dễ dàng hiểu và nhìn thấy các insight từ dữ liệu.
Để minh họa cho bài viết thì mình sẽ sử dụng Chainslake, một blockchain data warehouse do mình phát triển, cho phép người dùng truy vấn dữ liệu blockchain, xây dựng và chia sẻ các dashboard phân tích dữ liệu blockchain hoàn toàn miễn phí.
Nội dung
- Giới thiệu tổng quan về Metabase
- Cài đặt và cấu hình Metabase kết nối vào Data warehouse
- Các bảng dữ liệu trong data warehouse
- Truy vấn dữ liệu, xây dựng và chia sẻ dashboard
- Kết luận
Hiện tại mình đang nhận tư vấn, thiết kế và triển khai hạ tầng phân tích dữ liệu, Data Warehouse, Lakehouse cho các cá nhân, đơn vị có nhu cầu. Bạn có thể xem và dùng thử một hệ thống mình đã build tại đây. Các bạn vui lòng liên hệ với mình qua email: hoanglong180695@gmail.com. Mình xin cảm ơn!
Giới thiệu tổng quan về Metabase
Metabase là một công cụ BI cho phép truy vấn dữ liệu bằng ngôn ngữ SQL trên nhiều cơ sở dữ liệu và các SQL engine khác nhau thông qua các plugins, trình diễn kết quả truy vấn thành các bảng, biểu đồ, số liệu trên các dashboard phân tích, bạn có thể xem một dashboard demo của mình tại đây.
Metabase có cả phiên bản Opensource với các chức năng cơ bản, có thể cài đặt trên hạ tầng có sẵn và bản Enterprise với các chức năng nâng cao có thể sử dụng trực tiếp trên cloud của Metabase hoặc tự host thông qua key bản quyền. Bạn có thể xem chi tiết tại đây.
Cài đặt và cấu hình Metabase kết nối vào Data warehouse
Mình sẽ cài đặt phiên bản Opensource của Metabase qua docker và kết nối vào cụm DWH của chúng ta thông qua Trino (các bạn có thể xem lại bài viết về cách cài đặt Trino của mình tại đây)
Đầu tiên mình sẽ tạo một cơ sở dữ liệu cho Metabase trong postgres trên cụm DWH
postgres=# CREATE DATABASE metabase;
Cài đặt metabase thông qua Docker
$ wget https://github.com/starburstdata/metabase-driver/releases/download/5.0.0/starburst-5.0.0.metabase-driver.jar
$ docker run -d -p 3000:3000 --name metabase \
--network hadoop --add-host=node01:172.20.0.2 \
-e "MB_DB_TYPE=postgres" \
-e "MB_DB_DBNAME=metabase" \
-e "MB_DB_PORT=5432" \
-e "MB_DB_USER=postgres" \
-e "MB_DB_PASS=password" \
-e "MB_DB_HOST=node01" \
-v starburst-5.0.0.metabase-driver.jar:/plugins/starburst-5.0.0.metabase-driver.jar \
--name metabase metabase/metabase
Lưu ý
172.20.0.2
là ip container của node01 trên máy của mình, bạn thay bằng ip máy của bạn.
Truy cập vào http://localhost:3000
bạn sẽ thấy giao diện khởi động của Metabase, sau khi tạo tài khoản admin bạn sẽ được đưa tới giao diện làm việc chính của Metabase.
Để kết nối với Trino bạn vào Admin settings
chọn thẻ Databases
, chọn Add database
và thiết lập như hình dưới đây:
Sau khi cấu hình xong bạn Exit admin
và vào kiểm tra xem đã có dữ liệu trong mục Browser/Databases
hay chưa. Bạn có thể xem các bảng dữ liệu của Chainslake tại đây
Các bảng dữ liệu trong data warehouse
Trong phần này mình sẽ mô tả sơ lược về các bảng dữ liệu trong data warehouse của Chainslake để có cơ sở cho việc viết truy vấn và build dashboard trong phần tiếp theo.
Data warehouse của Chainslake bao gồm nhiều thư mục, mỗi thư mục gồm nhiều bảng có cùng chủ đề với nhau, cụ thể mình sẽ giới thiệu một số bảng và thư mục sau:
-
ethereum: Thư mục chứa dữ liệu raw của Ethereum (Bạn có thể tìm hiểu thêm về các loại dữ liệu của Ethreum blockchain trong bài viết trước của mình tại đây)
- transactions: Chứa toàn bộ dữ liệu giao dịch trên Ethereum (từ khi bắt đầu đến hiện tại)
- logs: Chứa toán bộ dữ liệu log (event) phát ra từ các contract khi chúng thực thi giao dịch.
- traces: Chứa toàn bộ dữ liệu Internal Transactions (Là các đơn vị giao dịch nhỏ nhất trên Ethereum).
-
address_type: Chứa toàn bộ các địa chỉ từng xuất hiện trên Ethereum bao gồm 2 loại là
wallet
vàcontract
-
ethereum_decoded: Thư mục chứa dữ liệu decode của một số protocol trên Ethereum. Hiện tại Chainslake đang có dữ liệu decode của một số protocol phổ biến sau:
- erc20_evt_transfer: Dữ liệu chuyển token ERC20 (toàn bộ token từ trước đến nay)
- erc721_evt_transfer: Dữ liệu chuyển NFT ERC721
- erc1155_evt_transferbatch, erc1155_evt_transfer_single: Dữ liệu chuyển NFT 1155
- uniswap_v2_evt_swap, uniswap_v3_evt_swap: Dữ liệu swap token trên các pool thanh khoản.
-
ethereum_contract: Chứa toàn bộ thông tin về contract của 1 số protocol phổ biến
- erc20_tokens: Thông tin về các token ERC20.
- erc721_tokens: Thông tin về các NFT ERC721.
- erc1155_tokens: Thông tin về các NFT ERC1155.
- uniswap_v2_info, uniswap_v3_info: Thông tin về các pool contract của Swap (Uniswap và các protocol khác cùng standard)
-
ethereum_dex: Chứa dữ liệu giao dịch mua bán của các token ERC20 trên các sàn phi tập trung DEX.
- token_trades: Chứa dữ liệu giao dịch mua bán của các token ERC20 trên các sàn phi tập trung DEX với WETH.
-
ethereum_prices: Chứa dữ liệu về giá của token theo các giao dịch lấy từ dữ liệu DEX.
- erc20_usd_day, erc20_usd_hour, erc20_usd_minute: Giá token ERC20 theo usd theo ngày, giờ, phút.
-
ethereum_balances: Thư mục chứa thông tin về số dư, biến động số dư của các địa chỉ trên Ethereum
- erc20_native: Bảng tổng hợp số dư cuối cùng và biến động số dư mỗi ngày của toàn bộ địa chỉ của toàn bộ token bao gồm cả Native token trên Ethereum.
-
binance_cex: Bảng chứa dữ liệu giá giao dịch của các coin trên sàn giao dịch Binance
- coin_token_address: Danh sách cá coin đang niêm yết trên sàn Binance mà có token tương ứng trên Ethereum
- trade_minute: Dữ liệu giá của các cặp giao dịch theo phút trên Binance.
Truy vấn dữ liệu, xây dựng và chia sẻ dashboard
Việc viết truy vấn và build dashboard trên Chainslake là khá đơn giản với nếu như bạn đã có kỹ năng về SQL. Mình có tạo sẵn một dashboard trong collection Demo để bạn có thể hiểu và dễ dàng bắt đầu tạo ra các dashboard phân tích của riêng mình.
Một số lưu ý khi viết truy vấn:
- Các bảng dữ liệu đều có số lượng bản ghi cực kỳ lớn (do chứa toàn bộ dữ liệu lịch sử) do đó tất cả các bảng mình đều partition theo
block_date
, bạn nên sử dụng column này để lọc hoặc join giữa các bảng bất kỳ khi nào có thể sẽ giúp câu truy vấn của bạn chạy nhanh và hiệu quả hơn. - Sử dụng các kỹ thuật về tối ưu câu truy vấn, giảm lượng dữ liệu cần phải scan khi thực thi truy vấn luôn cần phải được xem xét cẩn thận để đảm bảo câu truy ván có thể thực thi được trong thời gian cho phép, đồng thời điều này cũng giúp bạn cải thiện khả năng viết và tối ưu truy vấn.
- Kết quả truy vấn sẽ được tự động cache trong 1 ngày, bạn có thể thay đổi trong cấu hình của mỗi truy vấn.
- Cuối cùng là đừng quên chia sẻ các dashboard của bạn cho mọi người để Chainslake có thêm nhiều user hơn các bạn nhé.
Kết luận
Trên đây là những chia sẻ của mình về cách xây dựng dashboard phân tích dữ liệu trên data warehouse, rất mong nhận được sự ủng hộ của tất cả các bạn. Hẹn gặp lại các bạn trong các bài viết tiếp theo.