用途
lookml-ojof 用于在 Looker 中设计、构建、重构和优化多事实表 LookML Explores,采用 Outer Join On False(OJOF)模式。它针对的问题是:在标准 Looker explore 中查询多个粒度不同的独立事实表(如销售订单、行项目履约、库存、Web 事件)时,连接会造成笛卡尔扇出、鸿沟陷阱,或需要繁重的对称聚合计算。
主要能力
OJOF 模式将各事实表作为平行对等表,通过 sql_on: FALSE 的全外连接挂接到一个 0 行虚拟表上,再用 Liquid 动态绑定共享维度与共同维度。资料给出的核心规则包括:
- 0 行基表:explore 根必须为返回 0 行的表值表达式,如 SELECT NULL FROM UNNEST([]),explore 使用 from: none。
- 事实/度量连接:每个事实表以 type: full_outer、relationship: one_to_one、sql_on: FALSE 连接,声明在 explore 顶部,惯例使用复数别名。
- 复合度量连接:跨事实表计算的度量放入仅含字段的视图,用裸连接(sql: ;;)接入,命名可对应所引用事实表集合,并用 view_label 合并字段展示。
- 维度连接:共享维度表(客户、产品、供应商、地理等)以 type: left_outer、relationship: many_to_one 连接,sql_on 使用 COALESCE 配合 {% if fact._in_query %} 与原始 SQL 列名(而非 ${} 替换),末尾加 NULL 避免尾逗号语法错误。
- 共同维度连接:以横向连接统一多表共享的维度字段,典型为日期;使用 type: cross、relationship: one_to_one、sql_table_name: UNNEST([COALESCE(...)]),并定义 date_filter(可作为 filter 或 dimension 两种写法)。
扩展模式
资料还涵盖:过滤条件下推(在 sql_table_name 中按分区列裁剪数据,常配合 always_filter);双用途表(同一表既提供度量又提供维度时连接两次,用 fields 参数分别暴露);聚合感知(在 OJOF explore 上定义 aggregate_table);多日期实体(按里程碑实例化多个事实连接并各自对齐日期共同维度);用户自定义期间对比(两个日期共同维度分别跟踪两个时间段)与预定义期间对比(在 SQL 中自动平移前一周/前一年等窗口)。文末附面向代理的检查清单,逐条核对各连接的 type、relationship、sql_on 与 sql_table_name 写法。
使用方式
资料以 LookML 代码片段说明各参数与模式,示例仅展示当前章节所说明的参数,并非完整可用定义;实际中 explore 与其引用的视图常维护在不同文件。
适用场景与限制
该模式适用于所有维度连接直接针对事实表的星型模式。资料明确指出:若为雪花模式等多级间接维度结构,部分动态写入的连接条件对 Looker 的引用系统不透明,Looker 无法判断中间维度表应何时参与查询,因此需先将外键预连接到事实表,把多级维度结构转为直接维度结构。此外,该模式主要在 BigQuery 上测试,其他 SQL 引擎/方言可能支持也可能不支持。资料还提示:若 join 的 sql_table_name 引用 ${view_name.SQL_TABLE_NAME} 且 join 名与视图名相同,Looker 会报错,需改名或直接引用原始表名。
暂未提供
收费、价格、平台支持范围(除 BigQuery 测试说明外)、效果数据等暂未提供。