sql (para tablas derivadas)

En esta página, se hace referencia al parámetro sql que forma parte de una tabla derivada.

También puedes usar sql como parte de un campo, como se describe en la página de documentación del parámetro sql (para campos).

Uso

view: my_derived_table {
  derived_table: {
    sql: 
      SELECT *
      FROM events
      WHERE type NOT IN ('test', 'staff')
 ;;
    ...
  }
}
Jerarquía
sql
Valor predeterminado
Ninguno

Acepta
Un bloque de SQL

Definición

sql te permite especificar el código SQL que se usará para generar una tabla derivada. Puedes usar cualquier consulta en SQL válida en el parámetro sql, siempre y cuando la consulta en SQL esté escrita en SQL sin procesar y no haga referencia a campos de Looker. Para comprender mejor las tablas derivadas, consulta la página de documentación Tablas derivadas en Looker.

Además de hacer referencia a tablas de bases de datos normales, también puedes hacer referencia a vistas de LookML o tablas derivadas en sql. Para ello, usa lo siguiente:

${view_or_derived_table_name.SQL_TABLE_NAME} AS view_or_derived_table_name

El SQL_TABLE_NAME de esta referencia es una cadena literal, por lo que no es necesario que la reemplaces por nada. Por ejemplo, si quisieras hacer referencia a una tabla derivada llamada key_customer en tu tabla derivada key_customer_order_facts, podrías tener algo como lo siguiente:

view: key_customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT( * ) AS lifetime_orders
      FROM
        order
      INNER JOIN
        ${key_customer.SQL_TABLE_NAME} AS key_customer
      ON
        order.customer_id = key_customer.id
      GROUP BY 1
      ;;
  }
}

Variables de Liquid con sql

También puedes usar variables de Liquid con el parámetro sql. Las variables de Liquid te permiten acceder a datos como los valores de un campo, datos sobre el campo y los filtros aplicados al campo.

Las variables de Liquid date_start y date_end son muy útiles para los dialectos de bases de datos que particionan los datos en varias tablas por fecha, como BigQuery. Consulta la página de prácticas recomendadas Uso de date_start y date_end con filtros de fecha para obtener una explicación detallada.

En particular, las variables de Liquid _in_query, _is_selected y _is_filtered pueden agregar algunas funcionalidades interesantes a las tablas derivadas. Devuelven verdadero o falso según si se incluyó un campo o un filtro en una consulta. Hay algunas complejidades que se deben tener en cuenta para usar correctamente estos valores verdadero/falso. Consulta la página de variables de Liquid para obtener más información.

Por ejemplo, esta tabla derivada cambia la tabla de la base de datos que consulta según los campos que seleccionó el usuario:

view: dynamic_order_counts {
  derived_table: {
    sql:
      SELECT
        period, number_of_orders
      FROM
        {% if dates.reporting_date._in_query %}
          daily_orders
        {% elsif dates.reporting_week._in_query %}
          weekly_orders
        {% else %}
          monthly_orders
        {% endif %}
      GROUP BY 1
      ;;
  }
}

Ejemplos

Crea una tabla derivada customer_order_facts:

view: customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT( * ) AS lifetime_orders
      FROM
        order
      GROUP BY 1
      ;;
  }
}

Aspectos para tener en cuenta

Se debe poder acceder a las tablas a las que hace referencia sql desde la conexión actual.

Los views que contienen una tabla derivada se referencian con un parámetro explore o join, que, a su vez, se referencia con un modelo. El modelo determina qué conexión de base de datos se usa (consulta la página de documentación del parámetro connection). Las conexiones de bases de datos se definen en la sección Administrador de Looker. Cuando haces referencia a una tabla en el parámetro sql, la tabla debe ser accesible dentro de la conexión asociada.

Usa SQL sin procesar con sql, no referencias de campos de Looker

El SQL que escribas en un parámetro sql de tabla derivada debe ser SQL sin procesar, que haga referencia a las columnas y tablas subyacentes de tu base de datos. No debe hacer referencia a nombres de campos ni de vistas de Looker.

El uso de _filters['view_name.field_name'] en una tabla derivada requiere sql_quote

Cuando defines una tabla derivada basada en SQL, si usas la variable de Liquid _filters['view_name.field_name'] en la que el valor se renderiza en SQL y el filtro devuelve un valor de cadena, debes agregar comillas simples alrededor del resultado. Para ello, incluye el filtro sql_quote de Liquid.

De lo contrario, recibirás la siguiente advertencia de LookML si no agregas la variable de Liquid con | sql_quote:

Using "_filters[]" in Derived Table SQL without "sql_quote" is discouraged.

Consulta la página de documentación de la referencia de variables de Liquid para obtener más información.