如何通过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
相关产品推荐
相关产品推荐

