You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python Parser及GraphQL提取ThoughtSpot元数据?

ThoughtSpot元数据提取:Python Parser与GraphQL实现步骤

一、通过Python Parser提取元数据

步骤1:准备基础文件与依赖

  • 先从ThoughtSpot后台导出元数据:进入系统管理 > 元数据管理,选择要导出的对象类型(表、仪表盘、用户等),导出为CSV或JSON格式文件
  • 安装Python依赖:如果用CSV就装pandas,JSON用内置模块即可,命令:pip install pandas

步骤2:编写解析脚本

解析CSV格式元数据

import pandas as pd

# 读取导出的CSV文件
metadata_df = pd.read_csv("ts_metadata_export.csv")

# 筛选出所有工作表元数据
table_data = metadata_df[metadata_df["object_type"] == "TABLE"]

# 输出核心字段:表名、所属库、所有者
print(table_data[["object_name", "database_name", "owner"]])

解析JSON格式元数据

import json

# 读取JSON元数据文件
with open("ts_metadata_export.json", "r", encoding="utf-8") as f:
    metadata = json.load(f)

# 遍历提取仪表盘信息
for item in metadata["objects"]:
    if item["type"] == "DASHBOARD":
        print(f"仪表盘名称: {item['name']}")
        print(f"创建人: {item['creator']}")
        print(f"更新时间: {item['last_updated']}\n")

步骤3:自动化扩展

  • 用schedule库定时触发解析脚本,自动同步元数据到本地存储
  • 加校验逻辑,比如检查元数据字段是否缺失、是否存在重复对象

二、通过GraphQL API提取元数据

步骤1:获取API访问权限

  • 在ThoughtSpot创建带metadata_read权限的API专用用户
  • 生成API令牌:在用户设置里找到API令牌选项创建,或者用tscli api-token create命令生成

步骤2:编写GraphQL请求脚本

import requests

# 配置实例地址和令牌
TS_INSTANCE = "https://your-ts-instance.com"
API_TOKEN = "your-generated-api-token"

# GraphQL查询:拉取所有表及列信息
graphql_query = """
query FetchTableMetadata {
  metadata {
    objects(filter: {type: TABLE}) {
      name
      type
      details {
        ... on TableDetails {
          dbName
          schemaName
          columns {
            name
            dataType
          }
        }
      }
      owner {
        name
      }
    }
  }
}
"""

# 发送请求
headers = {
    "Authorization": f"Bearer {API_TOKEN}",
    "Content-Type": "application/json"
}

response = requests.post(
    f"{TS_INSTANCE}/api/graphql",
    headers=headers,
    json={"query": graphql_query}
)

# 处理响应结果
if response.status_code == 200:
    result = response.json()
    tables = result["data"]["metadata"]["objects"]
    for table in tables:
        print(f"表名: {table['name']} | 所属数据库: {table['details']['dbName']}")
        print("列清单:")
        for col in table["details"]["columns"]:
            print(f"  - {col['name']} ({col['dataType']})")
else:
    print(f"请求失败: {response.status_code} - {response.text}")

步骤3:常见查询场景

  • 提取仪表盘:把查询里的filter: {type: TABLE}改成filter: {type: DASHBOARD},并通过DashboardDetails获取组件、关联数据源
  • 提取权限信息:查询User类型对象,获取用户所属组、权限范围

内容的提问来源于stack exchange,提问作者user22153493

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:42:22