本文详解如何使用 looker python sdk 安全、可靠地获取查询的原始 sql(即 result_format=”sql”),重点解决因工作区(workspace)或 git 分支配置不匹配导致的 run_query() 或 run_look() 调用失败问题。
在 Looker SDK 中,通过设置 result_format=”sql” 可直接获取某 Explore 查询或 Look 对应的已解析、可执行的原始 SQL(非 LookML,而是数据库层实际运行的 SQL)。这是调试、审计、迁移或集成下游系统(如数据仓库 ETL)的关键能力。但实践中,许多开发者调用 sdk.run_query(…, result_format=”sql”) 或 sdk.run_look(…, result_format=”sql”) 时遭遇静默失败或 Exception: Error running query XXX —— 根本原因往往并非权限或语法错误,而是 SDK 会话的工作区(workspace)与目标内容所在环境不一致。
Looker 平台严格区分 production 和 dev 工作区:所有开发中的 Look、Explore 查询、仪表板默认仅存在于 dev 环境;而 SDK 初始化后默认连接 production 工作区。若强行在 production 下请求一个仅存在于 dev 的查询 ID,API 将返回 404 或 400 错误,Python SDK 捕获后抛出通用异常,掩盖了真实原因。
✅ 正确做法是:显式切换 SDK 会话至目标工作区。以下为完整流程:
1. 切换至 dev 工作区(最常见场景)
from looker_sdk import models, methods
# 假设 sdk 已正确初始化(credentials、base_url 等已配置)
sdk.update_session(
body=models.WriteApiSession(workspace_id="dev")
)
执行此操作后,后续所有 run_query()、run_look() 等 API 调用均作用于 dev 环境,可成功访问开发中的资源。