sql_preamble

用法

explore: explore_name {
  sql_preamble: SQL STATEMENT  ;;
}
层次结构
sql_preamble
默认值
接受
SQL 表达式

定义

sql_preamble 参数用于指定在运行探索中的查询之前执行的 SQL 语句。sql_preamble 的主要用途是在 Google BigQuery 上创建用户定义的函数 (UDF)。大多数数据库方言都允许您直接在数据库服务器上安装 UDF,但 Google BigQuery 是无状态的,因此 sql_preamble 提供了此功能。

sql_preamble 中使用 Liquid

sql_preamble 参数支持 Liquid 和用户属性,这使得动态 SQL 生成可用于多种用例,例如设置会话变量、选择不同的仓库或数据库、在 BigQuery 中实现分区剪除,以及通过更直接地与底层数据库交互来实现灵活的数据过滤。

sql_preamble 参数支持以下 Liquid 使用模式:

sql_preamble 不支持以下 Liquid 使用模式:

  • value
  • rendered_value
  • filterable_value
  • link
  • linked_value
  • _field._name

示例

使用 sql_preamble 指定 BigQuery 预留

sql_preamble 参数中使用 BigQuery SET @@reservation SQL 语句,指定要用于探索查询的 Google BigQuery 预留

explore: orders {
  sql_preamble:
    SET @@reservation='projects/your-project/locations/your-location/reservations/your-reservation';
}

使用 sql_preamble 添加临时中位数

在 Google BigQuery 上创建一个用户定义的函数 (UDF),该函数使用 Google BigQuery CREATE TEMP FUNCTION 语句计算中位数,并在每次运行探索中的查询之前将中位数函数插入到 Google BigQuery SQL 中。

explore: salary {
  sql_preamble:
    CREATE TEMP FUNCTION MEDIAN(a_num ARRAY<FLOAT64>)
    RETURNS FLOAT64 AS ((
       SELECT
          AVG(num)
        FROM (
          SELECT
            row_number() OVER (ORDER BY num) -1 as rn
            , num
          FROM UNNEST(a_num) num
        )
        WHERE
          rn = TRUNC(ARRAY_LENGTH(a_num)/2)
            OR (
             MOD(ARRAY_LENGTH(a_num), 2) = 0 AND
              rn = TRUNC(ARRAY_LENGTH(a_num)/2)-1 )
    ));
  ;;
}

sql_preamble 中使用 Liquid 来本地化表格名称

sql_preamble 中使用 Liquid 创建一个根据用户所选语言命名的临时表,以便单个 LookML 模型能够适应不同的内部命名惯例:

explore: orders {
  sql_preamble: 
    WITH {{ _localization['storage_table_name'] }} AS (select * from users);;
  ...
}

此代码不会使用硬编码的名称(如 mytable)作为临时表,而是会将 Liquid 变量替换为本地化字符串文件中为键 storage_table_name 定义的实际字符串。如需了解详情,请参阅在 Liquid 变量中使用语言区域

前导语后面的 Looker 查询随后会引用此动态命名的表。例如,SQL 查询会使用 FROM {{ _localization['storage_table_name'] }}