用途
generate-view-from-table 是 Medallion LookML 架构(agentic-lookml)中的一项技能,目标是确保每一个物理数据库表都在 bronze/ 目录下拥有一个 1:1 自动生成的视图文件 bronze/:table.view.lkml。按照该架构的约定,Bronze 视图文件不得由人或智能体手工编写、手工编辑,只能由工具从数据库表结构直接生成或刷新。该技能应在每次处理 SQL 查询中引用的所有物理表时运行,并在编写任何 refinement、Silver *_fields 视图、NDT 或 Explore 之前完成,以保证下游建模基于最新、完整的 Bronze 层。
主要能力
检测缺失或过期的 Bronze 视图
通过 lkr parse sql-lookml-compare 对指定 SQL 查询和本地 LookML 项目目录进行比对。命令接受 --sql 与 --path 参数,输出 queries[] 中的 QueryLookmlMapping 条目。技能要求逐条检查 parsed_query.tables 与 views 的对应关系:
- 列出 parsed_query.tables 中的所有物理表。每个条目是 TableRef,包含 name(表名)、db(schema 或 dataset 名)、catalog(数据库或 GCP 项目 ID)和 alias。需排除 name 与 parsed_query.ctes[].name 中定义的 CTE 相匹配的条目。
- 检查缺失的 Bronze 视图:若某物理表在 views 中没有匹配项(views[].sql_table 与表匹配),说明该表尚无 LookML 视图,应立即触发生成,再继续下游建模。
- 检查已有 Bronze 视图上未建模的物理列:若物理表匹配到已有的 bronze/:table.view.lkml,则检查 views[].unmodeled_db_columns。当该字段非空时,说明 SQL 查询引用了该表中缺失于视图的物理列,应从数据库表重新生成 Bronze 视图,而不是手工编辑。
碰撞感知的 Bronze 文件夹路由
运行生成器前,需根据表名在整个项目中的唯一性确定 bronze/ 内的目标文件夹:
- 默认无表名冲突时,目标文件夹为 bronze,文件路径为 bronze/:table.view.lkml。
- 当表名 :table 在不同 schema(db)间冲突时,目标文件夹为 bronze/:schema,文件路径为 bronze/:schema/:table.view.lkml。
- 当 :schema.:table 在不同数据库或 GCP 项目(catalog)间也冲突时,目标文件夹为 bronze/:dataset_or_database/:schema,文件路径为 bronze/:dataset_or_database/:schema/:table.view.lkml。
若生成新表时与来自其他 schema 的现有扁平 bronze/:table.view.lkml 发生冲突,应把现有视图(及其伴随的 .refinement.lkml,如存在)移入其 bronze/:schema/ 子文件夹,并更新其 include: 引用,使两张表都按碰撞层级组织。
生成 Bronze 视图
根据当前环境选择以下三种方式之一。
方式一:lkr tools lookml create 命令行工具(推荐)
该命令会切换到 Looker 开发工作区、重置到生产环境、创建同步分支,调用 generate_lookml_with_new_files(file_type_for_explores="none"、generate_descriptions=True、add_autogenerated_header=True,即写入 # AUTOGENERATED 头),并提交/部署生成的 .view.lkml 文件。示例命令:
# 从数据库表生成单个 Bronze 视图
uvx lkr-dev-cli tools lookml create \
--project-id "<project_id>" \
--connection "<connection_name>" \
--schema "<schema_name>" \
--table "<table_name>" \
--folder "bronze"
# 将新生成的 Bronze 视图拉取到本地 LookML 工作区
uvx lkr-dev-cli tools lookml pull ./lookml_project --project-id "<project_id>"
若同一 schema 中有多张表缺失于 bronze/,可传 --match "<schema_name>.*",或对 parsed_query.tables 中识别出的每张缺失表分别运行 lkr tools lookml create。注意:对于缺少 # AUTOGENERATED 头的现有 .view.lkml 文件,lkr tools lookml create 会拒绝覆盖,除非传入 --allow-update-without-header。
方式二:lkr code-mode sandbox --dev-mode(generate_lookml_with_new_files)
当在活动分支或 lkr code-mode sandbox 会话中操作时,使用 --dev-mode 运行 scripts/generate_bronze_view.py,让 Looker 仅在 bronze/ 中生成 1:1 物理 .view.lkml 文件,而不重置活动分支或创建原始 Explore。示例:
lkr --base-url="$BASE_URL" --dev code-mode sandbox --dev-mode \
--file=.agents/skills/generate-view-from-table/scripts/generate_bronze_view.py \
--var project_id="<project_id>" \
--var model_name="<model_name>" \
--var connection_name="<connection_name>" \
--var schema_name="<schema_name>" \
--var table_name="<table_a>,<table_b>" \
--var folder_name="bronze"
沙箱生成完成后,用以下命令把生成的文件拉取到本地:
lkr --base-url="$BASE_URL" --dev tools lookml pull ./lookml_project --project-id "<project_id>"
方式三:Looker MCP Server(generate_view_from_table / create_view_from_table)
当通过 Looker MCP Server 连接 Looker 实例、但没有对远程项目的直接 CLI 写权限时:
- 调用 dev_mode MCP 工具并设为 true,使文件生成在开发者工作区中运行。
- 调用 generate_view_from_table(或在 MCP Toolbox 服务器上调用 create_view_from_table),传入目标 project_id、connection、schema(parsed_query.tables[].db)、table(parsed_query.tables[].name)以及目标文件夹 bronze(或 bronze/<schema>)。
- 用 get_project_file 获取生成的视图内容(或通过 lkr tools lookml pull 拉取),使本地 bronze/:table.view.lkml 与实例一致。
生成后验证与细化边界
生成并拉取 bronze/:table.view.lkml 后,在继续 agentic-lookml 之前需完成两步验证:
- 对 SQL 查询和本地 LookML 目录重新运行 lkr parse sql-lookml-compare,确认 parsed_query.tables 中每个物理表现在都对应到 views 中指向 bronze/:table.view.lkml 的 LookmlViewMatch 条目,且 unmodeled_db_columns 为空([])。
- 遵守 Bronze 细化边界:bronze/:table.view.lkml 保持不动,其中已包含自动生成的物理维度、基础 dimension_group 块和 measure: count。若 SQL 查询需要主键覆盖(primary_key: yes)、复合主键(dimension: pk)、计算维度、type: duration 的 dimension_group、对原始 JSON 列设置 hidden: yes 与 suggestable: no、分区/聚簇元数据描述,或单表度量(sum、average、count_distinct、过滤的单表度量、单表比率),则按需创建 bronze/:table.refinement.lkml,并以 include: ":table.view.lkml" 作为第一行。
使用方式
该技能以命令行工具和脚本形式提供,需在具备 lkr 工具链或 Looker MCP Server 连接的环境中运行。典型流程为:先执行 sql-lookml-compare 比对,识别缺失表与未建模列;再按碰撞规则选择目标文件夹;然后选择三种生成方式之一;最后重新比对验证并拉取文件。
适用场景
- 在 Medallion LookML 架构中为 SQL 查询引用的物理表补齐缺失的 Bronze 视图。
- 在数据库 schema 变更后重新生成过期的 Bronze 视图,使未建模列得到覆盖。
- 在编写 Silver 层、NDT 或 Explore 之前,确保 Bronze 层完整且最新。
限制
- 只能依据数据库表结构生成 1:1 物理视图,不应手工编辑 Bronze 视图文件。
- 对缺少 # AUTOGENERATED 头的现有视图,lkr tools lookml create 默认拒绝覆盖。
- 需要相应的 lkr 工具、开发模式环境或 Looker MCP Server 连接,具体权限与配置要求资料中未完整说明。
- 资料未提供收费、价格或平台兼容性信息。