PDT incrementales

En Looker, las tablas derivadas persistentes (PDT) se escriben en el esquema desde cero de su base de datos. Looker persiste y vuelve a compilar un PDT en función de su estrategia de persistencia. Cuando se activa un PDT para volver a compilar, de forma predeterminada, Looker vuelve a compilar toda la tabla.

Si su dialecto admite PDT incrementales, puede agregar datos actualizados al PDT en lugar de volver a compilarlo por completo:

La primera vez que ejecute una consulta en un PDT incremental, Looker compilará el PDT completo para obtener los datos iniciales. Si la tabla es grande, la compilación inicial puede llevar mucho tiempo, al igual que la compilación de cualquier tabla grande. Una vez que se haya creado la tabla inicial, las compilaciones posteriores serán incrementales y tardarán menos tiempo si el PDT incremental se configura de forma estratégica.

Además, asegúrate de que la tabla de origen incremental de PDT esté optimizada para las consultas basadas en el tiempo. Específicamente, la columna basada en el tiempo que se usa para la clave de incremento debe tener una estrategia de optimización, como partición, claves de clasificación, índices o cualquier estrategia de optimización compatible con el dialecto. Se recomienda la optimización de la tabla de origen, ya que cada vez que se actualiza la tabla incremental, Looker consulta la tabla de origen a fin de determinar los valores más recientes de la columna basada en el tiempo que se usa para la clave de incremento. Si la tabla de origen no está optimizada para estas consultas, la consulta de Looker para los valores más recientes puede ser lenta y costosa.

Si tu dialecto admite PDT incrementales, puedes convertir los siguientes tipos de PDT en PDT incrementales:

  • Tablas agregadas
  • PDT nativos basados en LookML
  • PDT basados en SQL

    Para los PDT basados en SQL, la consulta de tabla debe definirse con el parámetro sql para usar como PDT incremental. Los PDT basados en SQL que se definen con los parámetros sql_create o create_process no se pueden compilar de forma incremental. Como puede ver en el Ejemplo 1 en esta página, Looker usa un comando INSERT o MERGE para crear los incrementos de un PDT incremental. La tabla derivada no se puede definir con declaraciones personalizadas del lenguaje de definición de datos (DDL), ya que Looker no podría determinar qué declaraciones DDL se requerirían para crear un incremento preciso.

Define un PDT incremental

Puedes usar los siguientes parámetros para convertir un PDT en un PDT incremental:

  • increment_key (obligatorio para hacer que el PDT sea un PDT incremental): Define el período para el que se deben consultar registros nuevos.
  • {% incrementcondition %} Filtro líquido (obligatorio para hacer que un PDT basado en SQL sea un PDT incremental; no se aplica a PDT basados en LookML): Conecta la clave de incremento a la columna de tiempo de la base de datos en la que se basa la clave de incremento. Consulta la página de documentación de increment_key para obtener más información.
  • increment_offset (opcional): Es un número entero que define la cantidad de períodos anteriores (en el nivel de detalle de la clave de incremento) que se vuelven a compilar para cada compilación incremental. El parámetro increment_offset es útil en el caso de datos tardíos, en los que los períodos anteriores pueden tener datos nuevos que no se incluyeron cuando se creó el incremento correspondiente y se agregó al PDT por primera vez.

Consulta la página de documentación de parámetros de increment_key para ver ejemplos que muestran cómo crear PDT incrementales de tablas derivadas nativas persistentes, tablas derivadas basadas en SQL persistentes y tablas agregadas.

Este es un ejemplo simple de un archivo de vista que define un PDT incremental basado en LookML:

view: flights_lookml_incremental_pdt {
  derived_table: {
    indexes: ["id"]
    increment_key: "departure_date"
    increment_offset: 3
    datagroup_trigger: flights_default_datagroup
    distribution_style: all
    explore_source: flights {
      column: id {}
      column: carrier {}
      column: departure_date {}
    }
  }

  dimension: id {
    type: number
  }
  dimension: carrier {
    type: string
  }
   dimension: departure_date {
    type: date
  }
}

Esta tabla se compilará en su totalidad la primera vez que se ejecute una consulta en ella. Luego, el PDT se reconstruirá en incrementos de un día (increment_key: departure_date), desde tres días (increment_offset: 3).

La clave de incremento se basa en la dimensión departure_date, que en realidad es el plazo date del grupo de dimensiones departure. (Consulta la página de documentación sobre el parámetro dimension_group para obtener una descripción general del funcionamiento de los grupos de dimensiones). El grupo de dimensiones y el período se definen en la vista flights, que es la explore_source de este PDT. A continuación, se muestra cómo se define el grupo de dimensiones departure en el archivo de vista flights:

...
  dimension_group: departure {
    type: time
    timeframes: [
      raw,
      date,
      week,
      month,
      year
    ]
    sql: ${TABLE}.dep_time ;;
  }
...

Interacción de los parámetros de incremento y la estrategia de persistencia

La configuración de increment_key y increment_offset de la PDT es independiente de la estrategia de persistencia de la PDT:

  • La estrategia de persistencia del PDT incremental solo determina cuándo se incrementa el PDT. El compilador PDT no modifica el PDT incremental, a menos que se active la estrategia de persistencia de la tabla o que el PDT se active manualmente con la opción Volver a compilar las tablas derivadas y ejecutar en Explorar.
  • Cuando se incrementa el PDT, el compilador PDT determinará cuándo se agregaron previamente los últimos datos a la tabla, en términos del incremento de tiempo más actual (el período definido por el parámetro increment_key). Según eso, el compilador PDT truncará los datos al comienzo del incremento de tiempo más reciente en la tabla y, luego, compilará el incremento más reciente desde allí.
  • Si el PDT tiene un parámetro increment_offset, el compilador PDT también volverá a compilar la cantidad de períodos anteriores especificados en el parámetro increment_offset. Los períodos anteriores comienzan desde el principio del incremento de tiempo más actual (el período definido por el parámetro increment_key).

En las siguientes situaciones de ejemplo, se muestra cómo se actualizan los PDT incrementales, ya que se muestra la interacción de increment_key, increment_offset y la estrategia de persistencia.

Ejemplo 1

En este ejemplo, se usa un PDT con las siguientes propiedades:

  • Clave de incremento: fecha
  • Desplazamiento del incremento: 3
  • Estrategia de persistencia: Se activa una vez al mes el primer día del mes

A continuación, le mostramos cómo se actualizará esta tabla:

  • Una estrategia de persistencia mensual significa que la tabla se crea automáticamente una vez al mes. Por ejemplo, el 1 de junio, por ejemplo, la última fila de la tabla se agregó el 1 de mayo.
  • Dado que este PDT tiene una clave de incremento basada en la fecha, el compilador de PDT truncará el día 1 de mayo al comienzo del día y volverá a compilar los datos del 1 de mayo y hasta el día actual, el 1 de junio.
  • Además, este PDT tiene un desplazamiento de 3. Por lo tanto, el compilador PDT también vuelve a compilar los datos de los tres períodos de tiempo anteriores (días) antes del 1 de mayo. Como resultado, los datos se vuelven a compilar para el 28, 29 y 30 de abril, y hasta el día de hoy, 1 de junio.

En términos de SQL, este es el comando que el compilador de PDT ejecutará el 1 de junio para determinar las filas del PDT existente que se debe volver a compilar:

## Example SQL for BigQuery:
SELECT FORMAT_TIMESTAMP('%F %T',TIMESTAMP_ADD(MAX(pdt_name),INTERVAL -3 DAY))

## Example SQL for other dialects:
SELECT CAST(DATE_ADD(MAX(pdt_name),INTERVAL -3 DAY) AS CHAR)

Este es el comando de SQL que ejecutará el compilador PDT el 1 de junio para compilar el último incremento:

## Example SQL for BigQuery:

MERGE INTO [pdt_name] USING (SELECT [columns]
   WHERE created_at >= TIMESTAMP('4/28/21 12:00:00 AM'))
   AS tmp_name ON FALSE
WHEN NOT MATCHED BY SOURCE AND created_date >= TIMESTAMP('4/28/21 12:00:00 AM')
   THEN DELETE
WHEN NOT MATCHED THEN INSERT [columns]

## Example SQL for other dialects:

START TRANSACTION;
DELETE FROM [pdt_name]
   WHERE created_date >= TIMESTAMP('4/28/21 12:00:00 AM');
INSERT INTO [pdt_name]
   SELECT [columns]
   FROM [source_table]
   WHERE created_at >= TIMESTAMP('4/28/21 12:00:00 AM');
COMMIT;

Ejemplo 2

En este ejemplo, se usa un PDT con las siguientes propiedades:

  • Estrategia de persistencia: Se activa una vez al día
  • Clave de incremento: mes
  • Desplazamiento del incremento: 0

Esta tabla se actualizará el 1 de junio:

  • La estrategia de persistencia diaria significa que la tabla se crea automáticamente una vez al día. El 1 de junio, la última fila de la tabla se habrá agregado el 31 de mayo.
  • Debido a que la clave de incremento se basa en el mes, el compilador PDT truncará el período desde el 31 de mayo hasta el comienzo del mes y volverá a compilar los datos de todo mayo y hasta el día actual, incluido el 1 de junio.
  • Debido a que este PDT no tiene compensación de incremento, no se vuelven a compilar períodos anteriores.

Esta tabla se actualizará el 2 de junio:

  • El 2 de junio, la última fila de la tabla se habrá agregado el 1 de junio.
  • Debido a que el compilador PDT truncará el inicio del mes de junio y, luego, se volverán a compilar los datos a partir del 1 de junio y hasta el día de hoy, los datos se volverán a compilar solo el 1 y el 2 de junio.
  • Debido a que este PDT no tiene compensación de incremento, no se vuelven a compilar períodos anteriores.

Ejemplo 3

En este ejemplo, se usa un PDT con las siguientes propiedades:

  • Clave de incremento: mes
  • Desplazamiento del incremento: 3
  • Estrategia de persistencia: Se activa una vez al día

Esta situación ilustra una configuración deficiente para un PDT incremental, ya que es un activador PDT diario con una compensación de tres meses. Esto significa que se reconstruirán al menos tres meses de datos todos los días, lo que sería un uso muy ineficiente de un PDT incremental. Sin embargo, es una situación interesante para examinar como una forma de entender cómo funcionan los PDT incrementales.

Esta tabla se actualizará el 1 de junio:

  • La estrategia de persistencia diaria significa que la tabla se crea automáticamente una vez al día. Por ejemplo, el 1 de junio, la última fila de la tabla se agregó el 31 de mayo.
  • Debido a que la clave de incremento se basa en el mes, el compilador PDT truncará el período desde el 31 de mayo hasta el comienzo del mes y volverá a compilar los datos de todo mayo y hasta el día actual, incluido el 1 de junio.
  • Además, este PDT tiene un desplazamiento de 3. Esto significa que el compilador PDT también vuelve a compilar los datos de los tres períodos de tiempo anteriores (meses) antes de mayo. El resultado es que los datos se vuelven a compilar desde febrero, marzo, abril hasta el día actual, el 1 de junio.

Esta tabla se actualizará el 2 de junio:

  • El 2 de junio, la última fila de la tabla se agregó el 1 de junio.
  • El compilador PDT truncará el mes al 1 de junio y volverá a compilar los datos del mes de junio, incluido el 2 de junio.
  • Además, debido al desplazamiento de incremento, el compilador de PDT volverá a compilar los datos de los tres meses anteriores antes de junio. Como resultado, los datos se reconstruyen desde marzo, abril, mayo y hasta el día de hoy, 2 de junio.

Cómo probar un PDT incremental en modo de desarrollo

Antes de implementar un PDT incremental nuevo en su entorno de producción, puede probarlo para asegurarse de que se compile y se incremente. Para probar un PDT incremental en modo de desarrollo:

  1. Cree una exploración para el PDT:
    • En un archivo de modelo asociado, usa el parámetro include para incluir el archivo de vista de PDT en el archivo de modelo.
    • En el mismo archivo de modelo, usa el parámetro explore a fin de crear una exploración para la vista incremental del PDT.
  include: "/views/e_faa_pdt.view"
  explore: e_faa_pdt {}
  1. Abra Explorar para el PDT.

    SUGERENCIA: Una vez que hayas incluido la vista en tu archivo de modelo y hayas creado Explorar, puedes navegar directamente a Explorar desde el archivo de vista o archivo de modelo en tu proyecto de LookML mediante el menú de acciones de archivos en la parte superior del archivo LookML:

  2. En Explorar, seleccione algunas dimensiones o medidas y haga clic en Ejecutar. Looker compilará todo el PDT. Si esta es la primera consulta que ejecuta en el PDT incremental, el compilador PDT compilará el PDT completo para obtener los datos iniciales. Si la tabla es grande, la compilación inicial puede llevar mucho tiempo, al igual que la compilación de cualquier tabla grande.

  3. Puedes verificar que el PDT inicial se compiló de las siguientes maneras:

    • Si tiene el permiso see_logs, puede verificar que se haya creado la tabla en el Registro de eventos de ADT. Si no ve eventos de creación de PDT en el Registro de eventos de PDT, consulte la información de estado en la parte superior de la sección de exploración del registro de eventos de PDT. Si dice "Desde la caché", puedes seleccionar Borrar caché & Actualizar para obtener la información más reciente.
    • De lo contrario, puedes ver los comentarios en la pestaña SQL de la barra Datos de Explorar. La pestaña SQL muestra la consulta y las acciones que se llevarán a cabo cuando ejecute la consulta en Explorar. Por ejemplo, si los comentarios en la pestaña SQL dicen -- generate derived table e_incremental_pdt, esa es la acción que se realizará cuando haga clic en Ejecutar.
  4. Una vez que cree la compilación inicial del PDT, solicite una compilación incremental del PDT mediante la opción Volver a compilar las tablas derivadas y ejecutar de Explorar.

  5. Puede usar los mismos métodos que antes para verificar que el PDT se compile de forma incremental:

    • Si tiene el permiso see_logs, puede usar el Registro de eventos de PDT para ver los eventos de create increment complete del PDT incremental. Si no ve este evento en el registro de acontecimientos de PDT y el estado de la consulta dice "from cache, seleccione Clear Cache & Refresh para obtener información más reciente.
    • Mira los comentarios en la pestaña SQL de la barra Datos de Explorar. En este caso, los comentarios indicarán que el PDT aumentó. Por ejemplo: -- increment persistent derived table e_incremental_pdt to generation 2
  6. Una vez que hayas verificado que el PDT se compila y que aumenta de forma correcta, si no quieres mantener la función Explorar exclusiva para el PDT, puedes quitar o comentar los parámetros explore y include de tu PDT desde el archivo del modelo.

Después de compilar el PDT en modo de desarrollo, se utilizará la misma tabla para la producción una vez que implementes los cambios, a menos que realices más cambios en la definición de la tabla. Consulta la sección Tablas persistentes en modo de desarrollo de la página de documentación Tablas derivadas en Looker.

Dialectos de base de datos admitidos para PDT incrementales

Para que Looker admita PDT incrementales en su proyecto de Looker, su dialecto de base de datos debe admitir comandos de lenguaje de definición de datos (DDL) que habiliten la eliminación y la inserción de filas.

En la siguiente tabla, se muestra qué dialectos admiten PDT incrementales en la versión más reciente de Looker: