Khi xây dựng dashboard cho các nhà bán lẻ sử dụng Magento, nhận thấy rằng Google Data Studio (GDS) hoàn toàn khả thi. Ưu điểm với các loại chart đa dạng, giá rẻ, và khả năng customize các báo cáo.

Có 2 cách thức để xây dựng Dashboard bằng Google Data Studio cho Magento

  1. Đưa dữ liệu trực tiếp từ Magento lên Google Data Studio thông qua Connector.
  2. Xây dựng một giải pháp ETL (Extract, transform, load).
Xây dựng Google Data Studio Dashboard cho Magento bằng ETL
Xây dựng Google Data Studio Dashboard cho Magento bằng ETL

Đưa dữ liệu trực tiếp từ Magento lên GDS thông qua Connector.

Khi tiếp cận theo phương án này, có các nhược điểm sau:

  • GDS không có cơ chế storage dữ liệu, các dataset được tạo ra chỉ là ánh xạ để tham chiếu đến datasource của khách hàng mỗi khi build report
  • Truy vấn dữ liệu từ GDS khá chậm, mỗi khi filter báo cáo là sẽ query đến datasource của khách hàng. Tuy có thể khắc phục bằng cache lại các báo cáo đã filter thông qua caching của GDS. Nhưng tốc độ 180s đối với 1 triệu bản ghi vẫn là chậm.

Vì vậy, phương án này chỉ phù hợp với các merchant nhỏ, lượng dữ liệu cũng nhỏ.

Xây dựng giải pháp ETL (Extract, Transform, Load)

Phương án này đưa dữ liệu từ datasource của merchant đến data warehouse để làm DashBoard sẽ thông qua pineline như mô hình dưới đây. Pipeline gồm 3 bước là Extract > Transform > Load.

giải pháp ETL (Extract, Transform, Load)
Giải pháp ETL (Extract, Transform, Load)


  • Extract: Quá trình Extract đảm bảo các concept giao dịch từ các hệ thống nguồn được giữ nguyên về mặt dữ liệu, gồm raw data, staging data và data warehouse. Dữ liệu sau khi Extract được lưu trữ tại Google Cloud Storage (GCS) dưới dạng file, định dạng avro hoặc orc (định dạng này có thể read in parallel ngay cả khi nén)
  • Transform: Các bảng dữ liệu giao dịch raw, staging, data warehouse từ hệ thống nguồn được load từ Google Cloud Storage vào Google BigQuery theo kiểu columnar format for Capacitor của BigQuery
  • Load: Các báo cáo của Data Studio sẽ được xây dựng trên các bảng tạm của BigQuery (các bảng data warehouse) đã được xử lý logic và join sẵn, để optimize tốc độ truy vấn (kết quả là truy vấn các báo cáo Sales PY, Store Performence PY có tốc độ xấp xỉ 1s ngay cả khi có hơn nhiều triệu bản ghi)

Triển khai ETL như thế nào với Magento

ETL - Overwrite load (first load)
Overwrite load (first load)

ETL - Incremental load
ETL - Incremental load

Các thành phần tham gia kiến trúc ETP này bao gồm các dịch vụ sau của Google:

Google Cloud Storage

Lưu trữ dữ liệu dạng file, hỗ trợ các định dạng csv, json, parquet, avro, orc. Rổ giá ae tham khảo ở đây Cloud Storage. File trong GCS có thể set lifecycle = 7 ngày, tức 7 ngày sau khi nó được upload lên GCS thì nó sẽ tự xóa đi để đảm bảo việc transform và load luôn nhanh.

Google BigQuery

Hút dữ liệu từ Cloud Storage, hình thức tính phí là tính theo lượng data được scan bởi query engine Dremel (là cái do Google làm ra cho BigQuery), giá chỉ từ 0,5$ / 1TB scan. Chi tiết về chính sách giá: BigQuery Pricing. Chưa kể là trong giai đoạn phát triển, chỉ cần add visa card được cấp 300$, tha hồ charge.

Google BigQuery
Google BigQuery

Cách BigQuery execute một câu query, nó sẽ tách thành nhiều job nhỏ để chạy, giống kiểu như Map Reduce vậy

BigQuery execute một câu query
BigQuery execute một câu query

Đường đi của một execution plan qua các server vật lý, sẽ đi từ client sang mấy server ở giữa, sau đó bắt đầu chui xuống từng server nhỏ nơi chứa data.

BigQuery cũng hỗ trợ các câu SQL INSERT, UPDATE và quan trọng nhất là MERGE. MERGE cho phép chạy 1 câu và có thể quyết định INSERT record đó nếu key chưa tồn tại hoặc UPDATE data mới.

Big Query Merge
Big Query Merge

Đây là yếu tố tiên quyết để giữ cho data của Data Warehouse bắt kịp với môi trường System Source. Cơ chế này giúp dữ liệu báo cáo được giữ cập nhật kịp thời với bản chất thời gian thực của các giao dịch thương mại online trên Magento.

Google Data Studio

Visualize dữ liệu từ BigQuery, đủ các thể loại chart, miễn phí và dễ customize, support blend data để join các chart với nhau.

Data Studio with Google Analytics | Pareto Docs

Làm thế nào load được dữ liệu vào BigQuery

Để làm được việc này, chúng ta sẽ xây dựng một cái ống (pineline) để đưa dữ liệu từ data source trên hệ thống Magento lên data warehouse của BigQuery. Đúng hơn là một hệ thống ống, và có nhiều công tắc bật tắt, để automate được các bước khi ETL dữ liệu, và monitor được các job này.

Làm thế nào load được dữ liệu vào BigQuery
Làm thế nào load được dữ liệu vào BigQuery
  • Đầu tiên, Apache Nify sẽ đóng vai trò trung chuyển, extract các trường dữ liệu cần thiết từ datasource của merchant (magento, shopify, … ), convert thành các file theo định dạng cần thiết (mặc định khi extract từ datasource lên nify sẽ là avro) như là json, csv, avro …, chuẩn hóa lại dữ liệu rồi đẩy lên bucket được chỉ định của Google Cloud Storage.
  • Từ Cloud Storage, ta có thể đẩy dữ liệu vào các bảng raw, convert, xử lý dữ liệu staging, data warehouse bằng thư viện client libary của Google Cloud hoặc sử dụng chính các tools của Google như bq, gscloud … Ở đây minh hoạc bằng Python client libary - support tất cả dịch vụ của Google Cloud, có thể monitor các stage bằng Jenkins, và quan trọng nhất là free
  • Sau khi dữ liệu được xử lý sạch sẽ trong Dataware House, chỉ cần scheduler các query tạo bảng tạm dữ liệu (các bảng dữ liệu làm báo cáo), visualize nó lên bằng Data Studio là xong.

Python client library

Trước khi bắt đầu, ở bất cứ dịch vụ nào của GCP, chúng ta đều phải pass qua bước xác thực ( authentication ), cụ thể :

  1. Trên bảng điều khiển Cloud Console, trang chọn project, click chọn project có sẵn hoặc tạo project mới Đến trang chọn project
  2. Enable BigQuery API
  3. Cài đặt xác thực ( authentication )
  4. Trên bảng điều khiển Cloud Console, click đến trang Tạo service account key
  5. Từ danh sách Service Account, chọn New service account
  6. Trong trường Service account name , nhập tên tài khoản
  7. Từ danh sách Role list chọn Project > Owner
  8. Chọn Create, File JSON key sẽ được download về máy của bạn
  9. Cài đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS bằng cách trỏ đến đường dẫn file JSON key vừa được download về bằng lệnh :
  • Windows: set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
  • Linux&MacOS: export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

Sau đó, ta cài đặt môi trường deploy code Python và client library:

  • Yêu cầu: Python >= 3.5 (bản python 2.7 không được support từ 01/01/2020)
  • Việc cài đặt deploy sẽ thực hiện trên máy ảo virtualenv của Python, tránh gặp các lỗi về setup biến môi trường, lỗi về quyền truy cập thường gặp.

Mac/Linux

  • pip install virtualenv
  • virtualenv
  • source /bin/activate
  • /bin/pip install google-cloud-bigquery

Windows

  • pip install virtualenv
  • virtualenv \Scripts\activate
  • \Scripts\pip.exe install google-cloud-bigquery

Sau khi cài đặt xong, viết thử một đoạn code để test

from google.cloud import bigquery

client = bigquery.Client()

# Perform a query.

QUERY = (

   'SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` '

   'WHERE state = "TX" '

   'LIMIT 100')

query_job = client.query(QUERY)  # API request

rows = query_job.result()  # Waits for query to finish

for row in rows:

   print(row.name)

Ngoài Python Client Library để ETL dữ liệu, GCP Client Library còn support C#, Go, Java, Nodejs, PHP và Ruby. Mn có thể tham khảo thêm ở đây

Hãy đăng ký nhận tin để là người đầu tiên đọc bài viết mới nhất từ chúng tôi nhé

Posted 
Jun 23, 2020
 in 
Tech
 category

Bài viết khác từ

Tech

category

View All