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

Kết nối nguồn dữ liệu đầu tiên & khám phá tài sản dữ liệu

Dành cho ai: bạn đã cài xong OpenMetadata bằng Docker (Bài 3) và đang nhìn vào giao diện trống. Bài này đưa bạn từ “chưa có gì” tới “thấy bảng thật của công ty mình trong catalog, có mô tả và chủ sở hữu”.

Thời gian: khoảng 30–45 phút.

Nếu chưa hiểu ingestion/connector là gì, đọc Bài 2 — Kiến trúc trước.


1. Chuẩn bị: tài khoản chỉ-đọc trên nguồn dữ liệu

Phần tiêu đề “1. Chuẩn bị: tài khoản chỉ-đọc trên nguồn dữ liệu”

Đừng bao giờ đưa tài khoản admin database cho ingestion. Nguyên tắc “quyền tối thiểu”: OpenMetadata chỉ cần đọc metadata.

Ví dụ với PostgreSQL:

CREATE USER openmetadata_ro WITH PASSWORD 'mat_khau_manh';
GRANT CONNECT ON DATABASE ten_database TO openmetadata_ro;
GRANT USAGE ON SCHEMA public TO openmetadata_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO openmetadata_ro;
-- để các bảng tạo mới sau này cũng tự có quyền
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO openmetadata_ro;

Ví dụ với MySQL:

CREATE USER 'openmetadata_ro'@'%' IDENTIFIED BY 'mat_khau_manh';
GRANT SELECT ON ten_database.* TO 'openmetadata_ro'@'%';
FLUSH PRIVILEGES;

Vì sao cần SELECT? Metadata cấu trúc (tên bảng/cột) đọc được từ system catalog. Quyền SELECT chỉ cần khi bạn muốn bật Profiler (lấy mẫu & thống kê) hoặc Data Quality tests ở Bài 5. Nếu chưa cần, có thể chỉ cấp quyền đọc system catalog.


2. Bẫy số 1 của người mới: OpenMetadata trong Docker không thấy localhost của bạn

Phần tiêu đề “2. Bẫy số 1 của người mới: OpenMetadata trong Docker không thấy localhost của bạn”

Đây là lỗi khiến rất nhiều người bỏ cuộc ở bước này.

Khi OpenMetadata chạy trong container, chữ localhost có nghĩa là chính container đó, không phải máy tính của bạn. Nên nếu database nằm trên máy bạn, khai localhost:5432 sẽ luôn báo lỗi kết nối.

Cách khai đúng, tùy tình huống:

Database của bạn nằm ở đâuĐiền vào ô Host
Trên máy bạn (macOS / Windows)host.docker.internal
Trên máy bạn (Linux)IP của docker0 (thường 172.17.0.1), hoặc thêm extra_hosts vào compose
Trên một container khác cùng mạng DockerTên container/service (ví dụ my_postgres)
Trên server nội bộ / cloudHostname hoặc IP thật của server

Nếu database ở server nội bộ, nhớ mở firewall cho phép máy chạy OpenMetadata kết nối tới cổng đó.


Trong UI OpenMetadata (http://localhost:8585):

  1. Vào Settings (bánh răng) → ServicesDatabases.
  2. Bấm Add New Service.
  3. Chọn loại nguồn — ví dụ Postgres hoặc Mysql.
  4. Đặt tên service (ví dụ pg_banle_prod). Tên này sẽ là tiền tố của mọi tài sản nạp về, nên đặt cho dễ hiểu.
  5. Điền thông tin kết nối:
    • Host and Port: ví dụ host.docker.internal:5432
    • Username: openmetadata_ro
    • Password: mật khẩu vừa tạo
    • Database: tên database
  6. Bấm Test Connection — chờ báo xanh.
  7. Save.

⚠️ Nếu Test Connection đỏ: 90% là do Host (xem mục 2), phần còn lại do sai mật khẩu hoặc firewall. Đọc thông báo lỗi, nó thường chỉ đúng chỗ.

(Tên nhãn trên UI có thể khác chút giữa các phiên bản — bám theo ý nghĩa, đừng bám chữ.)


Sau khi service đã lưu, ngay trong trang service đó:

  1. Mở tab Ingestions → bấm Add Ingestion → chọn loại Metadata.
  2. Lọc phạm vi (rất nên làm): dùng ô Schema Filter Pattern / Table Filter Pattern để chỉ nạp những schema/bảng bạn quan tâm. Lần đầu, hãy bắt đầu nhỏ — một schema thôi. Nạp cả kho dữ liệu khổng lồ ngay lần đầu vừa lâu vừa khó gỡ lỗi.
  3. Chọn có nạp views hay không.
  4. Đặt lịch (Schedule): lần đầu cứ để chạy tay; sau này đặt chạy hằng đêm.
  5. Bấm Deploy, rồi Run để chạy ngay.

Theo dõi tiến trình ở tab Ingestions (trạng thái RunningSuccess). Nếu muốn xem log chi tiết, mở Airflow tại http://localhost:8080 (admin/admin).

Nếu ingestion Failed: bấm vào dòng đó để xem log. Lỗi hay gặp: sai quyền (thiếu USAGE/SELECT), timeout mạng, hoặc filter pattern viết sai.


Bạn vừa chạy loại đầu tiên. Còn hai loại nữa, chạy sau khi Metadata đã xong:

LoạiNó làm gìCó đụng dữ liệu thật không?
MetadataNạp cấu trúc: schema, bảng, cột, kiểu dữ liệuKhông
ProfilerTính thống kê (số dòng, tỷ lệ rỗng, min/max) và lấy mẫu nhỏ — tùy chọn, bật/tắt được
Usage / LineageĐọc query log để biết bảng nào hay dùng và suy ra lineageĐọc query log

Lời khuyên: lần đầu chỉ chạy Metadata. Khi đã quen và đã xin phép về mặt bảo mật, mới bật Profiler. Bài 5 sẽ dùng tới Profiler.


6. Khám phá: tìm tài sản dữ liệu vừa nạp

Phần tiêu đề “6. Khám phá: tìm tài sản dữ liệu vừa nạp”

Vào tab Explore (hoặc gõ thẳng vào thanh tìm kiếm).

Những thứ đáng nghịch:

  • Tìm kiếm theo từ khóa:sales, khach_hang… Kết quả trả về bảng, view, và (sau này) dashboard liên quan.
  • Bộ lọc bên trái: lọc theo Service, Database, Schema, Tag, Owner, loại tài sản.
  • Mở trang chi tiết một bảng, bạn sẽ thấy các tab:
    • Schema — danh sách cột, kiểu dữ liệu, mô tả từng cột.
    • Sample Data — vài dòng mẫu (chỉ có nếu đã chạy Profiler).
    • Profiler / Data Quality — thống kê và các bài kiểm tra (Bài 5).
    • Lineage — sơ đồ dòng chảy dữ liệu (Bài 5).
    • Activity Feed — nơi thảo luận, giao việc trên chính tài sản đó.

7. Biến catalog “trống rỗng” thành catalog “có giá trị”

Phần tiêu đề “7. Biến catalog “trống rỗng” thành catalog “có giá trị””

Nạp xong metadata mới chỉ là bộ xương. Giá trị thật đến khi con người bổ sung ngữ cảnh. Ba việc nên làm ngay trên vài bảng quan trọng nhất:

Mở bảng → ô Owner → chọn một người hoặc một team. 👉 Vì sao: có người chịu trách nhiệm trả lời khi ai đó thắc mắc. Đây là chỉ số quản trị dữ liệu quan trọng nhất khi bắt đầu.

Mô tả bảng, và mô tả những cột dễ hiểu nhầm.

Ví dụ tốt: revenue: doanh thu đã trừ chiết khấu, chưa gồm VAT. Đơn vị: VND.” Chính một dòng này giải quyết được câu chuyện sales vs sales_v2 ở Bài 1.

Gắn thẻ phân loại cho cột nhạy cảm: số điện thoại, email, CCCD → tag PII.Sensitive. 👉 Vì sao: sau này bạn lọc được “tất cả tài sản chứa PII” chỉ bằng một cú click — cực kỳ hữu ích khi kiểm toán tuân thủ.

OpenMetadata còn có Auto-classification: tự đoán và đề xuất gắn thẻ PII dựa trên tên cột và dữ liệu mẫu. Bạn vẫn nên rà lại bằng mắt.


8. Mẹo triển khai thực tế: đừng nạp tất cả cùng lúc

Phần tiêu đề “8. Mẹo triển khai thực tế: đừng nạp tất cả cùng lúc”

Sai lầm phổ biến là nạp toàn bộ kho dữ liệu ngay hôm đầu → hàng chục nghìn bảng không mô tả, không chủ sở hữu → không ai dùng, dự án chết yểu.

Cách làm hiệu quả hơn:

  1. Chọn một lĩnh vực nghiệp vụ (ví dụ: bán hàng) và một nhóm người dùng thật.
  2. Nạp đúng schema của lĩnh vực đó.
  3. Gán owner + mô tả cho 10–20 bảng quan trọng nhất (nguyên tắc 80/20).
  4. Cho nhóm người dùng đó dùng thử 2 tuần, lấy phản hồi.
  5. Rồi mới mở rộng sang lĩnh vực kế tiếp.

Lộ trình đầy đủ 90 ngày sẽ có ở Bài 6.


  • Cấp tài khoản chỉ-đọc cho ingestion — không dùng admin.
  • Nhớ bẫy localhost trong Docker → dùng host.docker.internal hoặc IP thật.
  • Khai Database ServiceTest Connection → chạy Metadata ingestion (lọc phạm vi nhỏ trước).
  • Ba loại ingestion: Metadata (an toàn), Profiler (chạm dữ liệu, tùy chọn), Usage/Lineage.
  • Catalog chỉ có giá trị khi bạn thêm Owner + Description + Tag.

Bước tiếp theo: Bài 5 — vẽ lineage, đặt bài kiểm tra chất lượng, và lập từ điển nghiệp vụ.


💬 Kẹt ở bước nào? Hỏi cộng đồng BSD

Phần tiêu đề “💬 Kẹt ở bước nào? Hỏi cộng đồng BSD”

Test Connection đỏ hoài? Ingestion Failed mà log khó hiểu? Bạn không phải người đầu tiên gặp.

👉 Đăng câu hỏi tại Forum BSD Insights — nêu rõ loại database, cách bạn điền ô Host, và đoạn log lỗi. Chia sẻ cả ca thành công của bạn nữa, để người sau đỡ mò.

(Bài viết thuộc loạt “Bắt đầu với OpenMetadata” trên tài liệu BSD.)

Chia sẻ: