今天在 GitHub Trending 上看到一个有意思的项目:Google Cloud Platform/knowledge-catalog,这是 Google Cloud 官方开源的 Knowledge Catalog 工具与示例集合,展示了如何构建企业级的数据目录与元数据管理解决方案。
一、项目概述
项目定位
Knowledge Catalog(原 Dataplex)是 Google Cloud 推出的 AI 驱动的数据目录和元数据管理平台。它通过动态知识图谱技术,将企业内部的结构化数据(数据库、数据仓库)和非结构化数据(文档、图片、音视频)统一管理,为 AI 智能体提供语义理解与业务上下文。
核心价值
- 统一数据目录:跨数据源(BigQuery、Cloud Storage、Pub/Sub 等)统一元数据管理
- 动态知识图谱:自动构建数据实体、属性、关系图谱,支持语义查询
- AI 上下文注入:为 AI 智能体(如 Vertex AI Agent)提供业务语义和数据血缘
- 数据治理与合规:自动分类、敏感数据检测、访问控制策略管理
适用场景
- 企业数据资产发现与血缘追溯
- AI/ML 数据准备与特征工程
- 数据治理与合规审计
- 跨部门数据协作与知识共享
二、技术原理
架构设计
Knowledge Catalog 采用 联邦式元数据架构,核心组件包括:
┌─────────────────────────────────────────────────────────┐
│ Knowledge Catalog │
├──────────────────┬──────────────────┬───────────────────┤
│ Metadata Store │ Knowledge Graph │ Policy Engine │
│ (统一元数据存储) │ (知识图谱引擎) │ (策略与权限) │
├──────────────────┴──────────────────┴───────────────────┤
│ Integration Layer │
│ (BigQuery, Cloud Storage, Spanner, Pub/Sub...) │
└─────────────────────────────────────────────────────────┘
关键技术点:
元数据采集
- 自动扫描 BigQuery 表结构、字段类型、分区信息
- 解析 Cloud Storage 文件格式(Parquet、Avro、JSON)
- 提取数据血缘(从 SQL 查询日志、Dataflow/Dataproc 任务)
知识图谱构建
- 实体识别:自动识别数据实体(客户、订单、产品)
- 关系推断:通过外键、查询模式推断数据关联关系
- 语义标注:使用 NLP 模型自动标注字段语义(如
user_id→ “用户标识符”)
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)
gcloudCLI 已安装并认证- Python 3.8+(用于运行示例脚本)
快速部署示例
本仓库提供了多种示例,最简单的方式是使用 Cloud Shell 一键部署:
方式一: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 数据准备的核心基础设施。通过本项目提供的工具与示例,你可以快速搭建:
- 自动化数据目录:跨数据源统一元数据管理
- 动态知识图谱:自动构建数据实体与关系图谱
- AI 智能体集成:为 AI 应用注入数据上下文与业务语义
核心优势:
- ✅ 全托管服务,无需维护底层基础设施
- ✅ 原生集成 Google Cloud 数据服务(BigQuery、Cloud Storage 等)
- ✅ AI 驱动的自动标注与分类,减少人工维护成本
- ✅ 支持自然语言查询,降低数据发现门槛
推荐下一步:
- 查看
examples/目录下的完整示例代码 - 阅读 官方文档 了解 API 详情
- 尝试将 Knowledge Catalog 与 Vertex AI Agent 集成,构建智能数据助手