Cómo usar dimensiones que cambian lentamente en Dataform

En este documento, se muestra cómo usar el paquete de dimensiones de código abierto que cambia lentamente en Dataform como ejemplo del uso de un paquete de código abierto.

El paquete de dimensiones que cambia lentamente contiene modelos de datos comunes para crear tablas de dimensiones que cambian lentamente de fuentes de datos mutables en Dataform.

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

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

  • NAME: Es una vista con los campos scd_valid_from y scd_valid_to.
  • NAME_updates: Es 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 lentamente. Es posible que quieras programar una tabla de dimensiones que cambie lentamente para ejecutarse a diario o a cada hora, según el nivel de detalle de los cambios que quieras capturar.

Si quieres 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 e inicializa un lugar de trabajo en el repositorio.
  4. Instala el paquete de dimensiones que cambian lentamente en tu repositorio de Dataform.

Roles obligatorios

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

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Cree una tabla de dimensiones que cambie lentamente con el paquete de dimensiones que cambian lentamente

Para crear una tabla de dimensiones que cambie lentamente con el paquete de dimensiones que cambia lentamente en Dataform, siga estos pasos:

  1. En el panel Archivos, junto a definitions/, haz clic en el menú Más.

  2. Haga clic en Crear archivo.

  3. En el panel Crear archivo nuevo, haz lo siguiente:

    1. En el campo Add a file path, después de definitions/, ingresa el nombre del archivo, seguido de .js. Por ejemplo, definitions/definitions.js

    2. Haga clic en Crear archivo.

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

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

     const CONSTANT-NAME = require("dataform-scd");
    
    1. Reemplaza CONSTANT-NAME por un nombre para la constante, por ejemplo, scd.
  6. Cree tablas de dimensiones que cambien 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",
        },
      },
    });
    
    1. Reemplaza UNIQUE_ID por un identificador único para las filas de la tabla.
    2. Reemplaza UPDATED_AT por un nombre para el campo que almacene una marca de tiempo o una fecha de la última vez que se modificó la fila, por ejemplo, updated_at.
    3. Reemplaza SOURCE_SCHEMA por el esquema de la tabla de origen, por ejemplo, dataform_scd_example.
    4. Reemplaza SOURCE_SCHEMA_NAME por el nombre de la tabla de origen, por ejemplo, source_data.

En la siguiente muestra de código, se muestra una definición de tabla de dimensiones que cambia lentamente con el paquete de dimensiones que cambia 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?