今天在 GitHub Trending 上看到一个有意思的项目:Google Cloud Platform/knowledge-catalog,这是 Google Cloud 官方开源的 Knowledge Catalog 工具与示例集合,展示了如何构建企业级的数据目录与元数据管理解决方案。

一、项目概述

项目定位

Knowledge Catalog(原 Dataplex)是 Google Cloud 推出的 AI 驱动的数据目录和元数据管理平台。它通过动态知识图谱技术,将企业内部的结构化数据(数据库、数据仓库)和非结构化数据(文档、图片、音视频)统一管理,为 AI 智能体提供语义理解与业务上下文。

核心价值

  1. 统一数据目录:跨数据源(BigQuery、Cloud Storage、Pub/Sub 等)统一元数据管理
  2. 动态知识图谱:自动构建数据实体、属性、关系图谱,支持语义查询
  3. AI 上下文注入:为 AI 智能体(如 Vertex AI Agent)提供业务语义和数据血缘
  4. 数据治理与合规:自动分类、敏感数据检测、访问控制策略管理

适用场景

  • 企业数据资产发现与血缘追溯
  • AI/ML 数据准备与特征工程
  • 数据治理与合规审计
  • 跨部门数据协作与知识共享

二、技术原理

架构设计

Knowledge Catalog 采用 联邦式元数据架构,核心组件包括:

┌─────────────────────────────────────────────────────────┐
│                    Knowledge Catalog                      │
├──────────────────┬──────────────────┬───────────────────┤
│  Metadata Store  │   Knowledge Graph   │  Policy Engine    │
│  (统一元数据存储)  │   (知识图谱引擎)     │  (策略与权限)     │
├──────────────────┴──────────────────┴───────────────────┤
│                  Integration Layer                        │
│     (BigQuery, Cloud Storage, Spanner, Pub/Sub...)       │
└─────────────────────────────────────────────────────────┘

关键技术点:

  1. 元数据采集

    • 自动扫描 BigQuery 表结构、字段类型、分区信息
    • 解析 Cloud Storage 文件格式(Parquet、Avro、JSON)
    • 提取数据血缘(从 SQL 查询日志、Dataflow/Dataproc 任务)
  2. 知识图谱构建

    • 实体识别:自动识别数据实体(客户、订单、产品)
    • 关系推断:通过外键、查询模式推断数据关联关系
    • 语义标注:使用 NLP 模型自动标注字段语义(如 user_id → “用户标识符”)
  3. AI 集成

    • 提供 REST API 供 Vertex AI Agent 查询数据上下文
    • 支持自然语言查询:"显示所有包含 PII 数据的表"
    • 自动生成数据字典和业务术语表

核心技术栈

  • 数据源集成:BigQuery、Cloud Storage、Spanner、Cloud SQL、Pub/Sub
  • 元数据存储:Google Cloud Data Catalog(底层托管服务)
  • 知识图谱:基于 RDF/SPARQL 或自定义图存储
  • AI 能力:Vertex AI NLP 模型(自动分类、敏感数据检测)
  • 权限控制:Cloud IAM + 数据级策略(如"禁止非授权用户访问 PII 字段")

三、安装与快速开始

环境要求

  • Google Cloud 项目(需启用 Knowledge Catalog / Dataplex API)
  • gcloud CLI 已安装并认证
  • Python 3.8+(用于运行示例脚本)

快速部署示例

本仓库提供了多种示例,最简单的方式是使用 Cloud Shell 一键部署:

方式一:Cloud Shell 一键启动

点击仓库中的 Open in Cloud Shell ,自动克隆仓库并进入开发环境。

方式二:本地运行

# 1. 克隆仓库
git clone https://github.com/GoogleCloudPlatform/knowledge-catalog.git
cd knowledge-catalog

# 2. 安装依赖
pip install -r requirements.txt

# 3. 设置项目 ID
export PROJECT_ID="your-gcp-project-id"
gcloud config set project $PROJECT_ID

# 4. 运行示例:自动扫描 BigQuery 表并生成元数据
python examples/scan_bigquery_metadata.py \
    --project $PROJECT_ID \
    --dataset your_dataset

最简运行示例

以下代码演示如何使用 Knowledge Catalog API 查询数据目录:

from google.cloud import datacatalog_v1

# 初始化客户端
client = datacatalog_v1.DataCatalogClient()

# 搜索包含"customer"关键词的数据资产
results = client.search_catalog(
    request={
        "scope": {"project": "your-project-id"},
        "query": "customer",
    }
)

for result in results:
    print(f"发现资产: {result.search_result.retrievable_fields['name']}")
    print(f"类型: {result.search_result.retrievable_fields['type']}")
    print(f"描述: {result.search_result.retrievable_fields['description']}")

四、使用方法与实战

基础用法:自动扫描与注册数据资产

# 扫描 BigQuery 数据集并自动注册到目录
python scripts/register_bigquery_assets.py \
    --project my-project \
    --dataset sales_data \
    --tags "PII,sales,customer"

# 查看已注册的资产
gcloud dataplex assets list --project my-project --region us-central1

进阶用法:构建自定义知识图谱

仓库中的 examples/custom_graph/ 提供了扩展知识图谱的示例:

# custom_graph/add_entity.py
from google.cloud import dataplex_v1

client = dataplex_v1.DataplexServiceClient()

# 定义业务实体:客户
entity = {
    "name": "Customer",
    "attributes": [
        {"name": "customer_id", "type": "STRING", "description": "客户唯一标识"},
        {"name": "email", "type": "STRING", "description": "客户邮箱"},
        {"name": "created_at", "type": "TIMESTAMP", "description": "注册时间"},
    ],
    "labels": {"category": "pii", "department": "marketing"},
}

# 注册到知识图谱
response = client.create_entity(
    request={
        "parent": "projects/my-project/locations/us-central1/lakes/my-lake",
        "entity_id": "customer_entity",
        "entity": entity,
    }
)
print(f"实体已创建: {response.name}")

实战案例:AI 驱动的数据发现

以下示例展示如何使用 Knowledge Catalog 为 AI 智能体提供数据上下文:

# ai_integration/agent_context.py
from vertexai.preview.language_models import TextGenerationModel

# 1. 查询知识图谱获取数据上下文
def get_data_context(query):
    from google.cloud import datacatalog_v1
    client = datacatalog_v1.DataCatalogClient()
    results = client.search_catalog(
        request={"scope": {"project": "my-project"}, "query": query}
    )
    context = "\n".join([
        f"- {r.search_result.retrievable_fields['name']}: {r.search_result.retrievable_fields['description']}"
        for r in results[:5]  # 取前 5 个相关资产
    ])
    return context

# 2. 构建提示词,将数据上下文注入 AI 模型
def ask_ai(question):
    context = get_data_context("sales data")
    prompt = f"""
    你是一个数据分析师助手。以下是我们数据库中的相关数据资产:

    {context}

    用户问题: {question}
    请基于以上数据资产回答,并提供 SQL 查询建议。
    """
    model = TextGenerationModel.from_pretrained("text-bison@002")
    return model.predict(prompt, max_output_tokens=256)

# 示例:询问 AI 如何查询月度销售数据
response = ask_ai("我想分析过去 6 个月的销售趋势,应该用哪些表?")
print(response)

五、常见问题与解决方案

Q1: 元数据扫描失败,提示权限不足

原因:Knowledge Catalog 需要访问数据源的读取权限。

解决方案

# 授予 Dataplex 服务账户 BigQuery 数据查看者权限
gcloud projects add-iam-policy-binding my-project \
    --member="serviceAccount:[email protected]" \
    --role="roles/bigquery.dataViewer"

# 授予 Cloud Storage 对象查看者权限
gcloud projects add-iam-policy-binding my-project \
    --member="serviceAccount:[email protected]" \
    --role="roles/storage.objectViewer"

Q2: 知识图谱构建缓慢

原因:数据量大或网络延迟导致扫描耗时长。

解决方案

# 1. 分批扫描,限制并发数
python scripts/scan_with_limit.py \
    --project my-project \
    --batch-size 100 \
    --concurrency 5

# 2. 增量扫描(只扫描新增/修改的数据)
python scripts/incremental_scan.py \
    --project my-project \
    --since "2026-07-01"

Q3: 自动生成的字段描述不准确

原因:NLP 模型对特定领域术语理解不足。

解决方案

# 手动导入自定义术语表(CSV 格式)
gcloud dataplex glossaries import \
    --location us-central1 \
    --source gs://my-bucket/business_terms.csv

# 示例 CSV 格式:
# term,definition,category
# customer_id,客户唯一标识符,营销
# churn_rate,客户流失率,运营

Q4: 如何删除已注册的元数据

# 删除单个资产
gcloud dataplex assets delete my-asset \
    --project my-project \
    --location us-central1 \
    --lake my-lake \
    --zone my-zone

# 删除整个湖(谨慎操作!)
gcloud dataplex lakes delete my-lake \
    --project my-project \
    --location us-central1

六、总结

Google Cloud Knowledge Catalog 是企业级数据治理和 AI 数据准备的核心基础设施。通过本项目提供的工具与示例,你可以快速搭建:

  1. 自动化数据目录:跨数据源统一元数据管理
  2. 动态知识图谱:自动构建数据实体与关系图谱
  3. AI 智能体集成:为 AI 应用注入数据上下文与业务语义

核心优势

  • ✅ 全托管服务,无需维护底层基础设施
  • ✅ 原生集成 Google Cloud 数据服务(BigQuery、Cloud Storage 等)
  • ✅ AI 驱动的自动标注与分类,减少人工维护成本
  • ✅ 支持自然语言查询,降低数据发现门槛

推荐下一步

  • 查看 examples/ 目录下的完整示例代码
  • 阅读 官方文档 了解 API 详情
  • 尝试将 Knowledge Catalog 与 Vertex AI Agent 集成,构建智能数据助手