🧩 问题背景
在使用 DataHub 进行数据血缘分析时,一个典型问题是:
👉 无法正确解析复杂 SQL(尤其是 BigQuery procedural SQL)
例如在这个 issue 中被提到:
- DataHub issue #11654
常见表现:
- 多语句 SQL(BEGIN...END)无法解析
- 血缘缺失或不完整
- 列级 lineage 无法提取
💡 解决方案
使用 Gudu 提供的 sidecar 工具:
👉 gsp-datahub-sidecar
GitHub 地址: https://github.com/gudusoftware/gsp-datahub-sidecar
能力:
- 支持 BigQuery procedural SQL
- 支持列级血缘
- 无需修改 DataHub 本身
🎯 本文验证目标
验证以下链路是否可行:
BigQuery procedural SQL
↓
gsp-datahub-sidecar
↓
DataHub GMS
↓
DataHub UI 展示 lineage
🧪 测试步骤(可直接复现)
前提:你已经有一个运行中的 DataHub(GMS 默认 http://localhost:8080)
Step 0:安装 sidecar
bash
pip install git+https://github.com/gudusoftware/gsp-datahub-sidecar.git
👉 如果你是 Mac + Homebrew Python(遇到 PEP 668),推荐:
brew install pipx
pipx install git+https://github.com/gudusoftware/gsp-datahub-sidecar.git
验证安装:
gsp-datahub-sidecar --version
Step 1:获取测试 SQL
git clone https://github.com/gudusoftware/gsp-datahub-sidecar.git
cd gsp-datahub-sidecar
使用内置示例:
examples/bigquery_procedural.sql
Step 2:验证 SQL 解析(dry-run调试模型)
gsp-datahub-sidecar \
--mode authenticated \
--user-id YOUR_USER_ID \
--secret-key YOUR_SECRET_KEY \
--sql-file examples/bigquery_procedural.sql \
--dry-run
dry-run 这个模式,是调试模式,只是为了解析出血缘结果进行Review,而不会真实发送到datahub server中。
✅ 解析结果
Detected procedural SQL --- sending as single statement
Lineage: PROJECT.DATASET.VIEW_NAME --> TEMP_TABLE (12 columns)
Lineage: TEMP_TABLE_DELTA --> FINAL_OUTPUT (5 columns)
[DRY RUN] Would emit 10 MCPs

Step 3:写入 DataHub
使用BigQuery数据库的测试SQL验证
gsp-datahub-sidecar \
--mode authenticated \
--user-id YOUR_USER_ID \
--secret-key YOUR_SECRET_KEY \
--sql-file examples/bigquery_procedural.sql \
✅ 解析结果
Detected procedural SQL --- sending as single statement
Lineage: PROJECT.DATASET.VIEW_NAME --> TEMP_TABLE (12 columns)
Lineage: TEMP_TABLE_DELTA --> FINAL_OUTPUT (5 columns)
[DRY RUN] Would emit 10 MCPs
查看表级别血缘
-
在 DataHub UI 验证 🔎
temp_table表的血缘,可以看到:project.dataset.view_name → temp_table

-
验证
final_output表的血缘,可以看到:temp_table_delta → final_output

查看列级别血缘

可以看到 final_output 表和 temp_table_delta 表中的 email 、 idfield这些字段都是有关联的。
使用Oracle数据库的测试SQL验证
gsp-datahub-sidecar \
--mode authenticated \
--user-id YOUR_USER_ID \
--secret-key YOUR_SECRET_KEY \
--sql-file examples/oracle_create_view.sql \
--db-vendor dbvoracle \
--datahub-server http://localhost:8080
在 UI 搜索 vsal,可以看到所有的表和列的关联关系,所有结果都是正确的:

使用self_hosted 模式测试
也可以使用self_hosted模式,测试我们本地的 SQLFlow Server的情况
测试示例:
gsp-datahub-sidecar --mode self_hosted \
--sqlflow-url http://localhost:8165/api/gspLive_backend/sqlflow/generation/sqlflow/exportFullLineageAsJson \
--user-id YOUR_USER_ID \
--secret-key YOUR_SECRET_KEY \
--sql-file examples/oracle_create_view.sql \
--db-vendor dbvoracle
注意:你需要提前在本地安装好SQLFlow。
📊 验证结果
| 能力 | 结果 |
|---|---|
| Procedural SQL 解析 | ✅ |
| 表级血缘 | ✅ |
| 列级血缘 | ✅ |
| DataHub 集成 | ✅ |
| UI 展示 | ✅ |
🧨 关键结论
👉 gsp-datahub-sidecar 可以有效解决 DataHub 无法解析复杂 SQL 的问题
尤其适用于:
- 20+ 主流数据库
- 多语句 SQL
- 列级血缘分析
如果你的问题是:
DataHub 无法解析复杂 SQL 血缘
那么:👉 这个工具已经验证是一个可行解决方案