Python版Looker SDK获取原始查询及run_look/run_query调用报错排查
问题解决与方法说明
一、修复run_look/run_query的报错问题
你的代码中except块直接抛出自定义异常,丢失了原始错误详情,这是无法定位问题的核心原因。先修改异常处理逻辑,获取真实错误信息:
修改后的代码示例(以run_look为例)
import json try: response = sdk.run_look( look_id=look.id, result_format="json" ) data = json.loads(response) print(data) except Exception as e: # 打印原始错误,这是排查问题的关键 print(f"原始错误信息: {str(e)}") raise Exception(f'Error running look {look.id}: {str(e)}')
常见报错原因及排查方向
- 认证问题:检查SDK初始化时的
client_id、client_secret、base_url是否正确,可调用sdk.me()验证,返回用户信息则认证正常。 - 资源不存在:确认
look.id或query_id是Looker实例中真实存在的ID,可在Looker界面查看对应look/query的URL确认ID。 - 权限不足:当前认证用户没有运行该look/query的权限,联系管理员检查角色权限配置。
- API版本不兼容:确保Python SDK版本与Looker实例的API版本匹配,可通过
sdk.api_version查看SDK版本,Looker实例版本在管理员界面查看。
二、获取原始查询语句的方法
有两种可靠方式获取Looker生成的原始SQL:
方法1:使用run_query并指定result_format="sql"
当run_query调用成功时,指定该格式会直接返回执行的原始SQL语句:
try: raw_sql = sdk.run_query( query_id=explore_query.id, result_format="sql" ) print("原始查询语句:", raw_sql) except Exception as e: print(f"获取SQL失败: {str(e)}")
方法2:通过查询对象获取预生成SQL
如果只是需要查看查询的SQL(无需执行),可以先获取Query对象,读取其sql字段:
try: query = sdk.query(query_id=explore_query.id) print("预生成SQL:", query.sql) except Exception as e: print(f"获取查询对象失败: {str(e)}")
注意:这种方式返回的是Looker解析后的SQL,可能包含未执行的参数占位符,若需要最终执行的SQL,优先使用方法1。
内容的提问来源于stack exchange,提问作者avelino
相关产品推荐
相关产品推荐

