Cómo usar dimensiones que cambian lentamente en Dataform

En este documento, se explica cómo usar el paquete de dimensiones que cambian lentamente de código abierto en Dataform como ejemplo de un paquete de código abierto.

El paquete de dimensiones que cambian lentamente contiene modelos de datos comunes para crear tablas de dimensiones de tipo 2 que cambian lentamente a partir de fuentes de datos mutables en Dataform.

Las tablas de dimensiones que cambian lentamente son tablas incrementales que contienen datos que pueden cambiar de forma impredecible, no de forma periódica, como los clientes o los productos. En una tabla de dimensiones de tipo 2 que cambia lentamente, se agregan datos nuevos en una fila nueva sin reemplazar las filas de la tabla existente. El historial de la tabla se conserva en varios registros de una clave determinada en la clave de dimensión que cambia lentamente. Cada registro tiene una clave única.

El paquete de dimensiones que cambian lentamente crea las siguientes relaciones en BigQuery para un NAME determinado:

  • NAME: Una vista con campos scd_valid_from y scd_valid_to
  • NAME_updates: Una tabla incremental que almacena el historial de cambios de la tabla de origen

Dataform actualiza las dimensiones que cambian lentamente cada vez que ejecuta una tabla incremental de dimensiones que cambian con lentitud. Es posible que desees programar una tabla de dimensiones que cambia lentamente para que se ejecute todos los días o cada hora, según el nivel de detalle de los cambios que desees capturar.

Para aprender a programar ejecuciones de Dataform, consulta Programa ejecuciones con Cloud Composer o Programa ejecuciones con Workflows y Cloud Scheduler.

Antes de comenzar

  1. En la página de versiones de dimensiones que cambian lentamente, copia la URL .tar.gz de la versión más reciente.
  2. Crea un repositorio de Dataform.
  3. Crea y, luego, inicializa un lugar de trabajo en el repositorio.
  4. Instala el paquete de dimensiones que cambian lentamente en tu repositorio de Dataform.

Funciones obligatorias

Si quieres obtener los permisos que necesitas para configurar un paquete, pídele a tu administrador que te otorgue el rol de IAM de Editor de Dataform (roles/dataform.editor) en los lugares de trabajo. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Es posible que también puedas obtener los permisos necesarios mediante funciones personalizadas, o bien otras funciones predefinidas.

Cómo crear una tabla de dimensiones que cambian lentamente con el paquete de dimensiones que cambian lentamente

Para crear una tabla de dimensiones que cambian lentamente con el paquete de dimensiones que cambian lentamente en Dataform, sigue estos pasos:

  1. En el panel Files, junto a definitions/, haz clic en el menú More de .

  2. Haz clic en Crear archivo.

  3. En el panel Create new file, haz lo siguiente:

    1. En el campo Agregar una ruta de acceso al archivo, después de definitions/, ingresa el nombre del archivo seguido de .js. Por ejemplo, definitions/definitions.js

    2. Haz clic en Crear archivo.

  4. En el panel Files, selecciona el .js recién creado. main.tf.

  5. Importa el paquete al archivo en el siguiente formato:

     const CONSTANT-NAME = require("dataform-scd");
    

    Reemplaza CONSTANT-NAME por un nombre para la constante, por ejemplo, scd.

  6. Crea tablas de dimensiones que cambian lentamente en el siguiente formato:

    scd("source_data_scd", {
      uniqueKey: "UNIQUE_ID",
      timestamp: "UPDATED_AT", // A field that stores a timestamp or date of when the row was last changed.
      source: {
        schema: "SOURCE_SCHEMA",     // The source table to build slowly changing dimensions from.
        name: "SOURCE_SCHEMA_NAME",
      },
      incrementalConfig: {        // Any configuration parameters to apply to the incremental table that will be created.
        bigquery: {
          partitionBy: "UPDATED_AT",
        },
      },
    });
    

    Reemplaza lo siguiente:

    • UNIQUE_ID: Es un identificador único para las filas de la tabla.
    • UPDATED_AT: Es un nombre para el campo que almacena una marca de tiempo o la fecha de la última vez que se cambió la fila, por ejemplo, updated_at.
    • SOURCE_SCHEMA: Es el esquema de la tabla de origen, por ejemplo, dataform_scd_example.
    • SOURCE_SCHEMA_NAME: Es el nombre de la tabla de origen, por ejemplo, source_data.
  7. Opcional: Haz clic en Formato.

En la siguiente muestra de código, se muestra una definición de tabla de dimensiones que cambia lentamente creada con el paquete de dimensiones que cambian lentamente:

const scd = require("dataform-scd");

/**
 * Create an SCD table on top of the table defined in source_data.sqlx.
 */
const { updates, view } = scd("source_data_scd", {
  // A unique identifier for rows in the table.
  uniqueKey: "user_id",
  // A field that stores a timestamp or date of when the row was last changed.
  timestamp: "updated_at",
  // The source table to build slowly changing dimensions from.
  source: {
    schema: "dataform_scd_example",
    name: "source_data",
  },
  // Any tags that will be added to actions.
  tags: ["slowly-changing-dimensions"],
  // Documentation of table columns
  columns: {user_id: "User ID", some_field: "Data Field", updated_at: "Timestamp for updates"},
  // Configuration parameters to apply to the incremental table that will be created.
  incrementalConfig: {
    bigquery: {
      partitionBy: "updated_at",
    },
  },
});

// Additional customization of the created models can be done by using the returned actions objects.
updates.config({
  description: "Updates table for SCD",
});

¿Qué sigue?