SuperAPI AI 工具集

generate-view-from-table

数据与分析

查看项目

更新于 10-21 04:05

技能介绍

用途

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 写权限时:

  1. 调用 dev_mode MCP 工具并设为 true,使文件生成在开发者工作区中运行。
  2. 调用 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>)。
  3. 用 get_project_file 获取生成的视图内容(或通过 lkr tools lookml pull 拉取),使本地 bronze/:table.view.lkml 与实例一致。

生成后验证与细化边界

生成并拉取 bronze/:table.view.lkml 后,在继续 agentic-lookml 之前需完成两步验证:

  1. 对 SQL 查询和本地 LookML 目录重新运行 lkr parse sql-lookml-compare,确认 parsed_query.tables 中每个物理表现在都对应到 views 中指向 bronze/:table.view.lkml 的 LookmlViewMatch 条目,且 unmodeled_db_columns 为空([])。
  2. 遵守 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 连接,具体权限与配置要求资料中未完整说明。
  • 资料未提供收费、价格或平台兼容性信息。