Usar dimensões com alterações lentas no Dataform

Este documento mostra como usar o pacote de código aberto de dimensões que mudam lentamente no Dataform como um exemplo de uso de um pacote de código aberto.

O pacote de dimensões que mudam lentamente contém modelos de dados comuns para criar tabelas de dimensões que mudam lentamente de tipo 2 a partir de fontes de dados mutáveis no Dataform.

As tabelas de dimensões de mudança lenta são tabelas incrementais que contêm dados que podem mudar de forma imprevisível, não em uma programação regular, como clientes ou produtos. Em uma tabela de dimensões de mudança lenta do tipo 2, os novos dados são anexados em uma nova linha sem substituir as linhas de tabela atuais. O histórico da tabela é preservado em vários registros para uma determinada chave na chave de dimensão que muda lentamente. Cada registro tem uma chave exclusiva.

O pacote de dimensões com alterações lentas cria as seguintes relações no BigQuery para um determinado NAME:

  • NAME: uma visualização com campos scd_valid_from e scd_valid_to
  • NAME_updates: uma tabela incremental que armazena o histórico de alterações da tabela de origem

O Dataform atualiza as dimensões com alterações lentas sempre que executa uma tabela incremental de dimensões com alterações lentas. Talvez você queira programar a tabela de dimensões que mudam lentamente para ser executada todos os dias ou a cada hora, dependendo da granularidade das mudanças que você quer capturar.

Para saber como programar execuções do Dataform, consulte Programar execuções com o Cloud Composer ou Programar execuções com o Workflows e o Cloud Scheduler.

Antes de começar

  1. Na página Versões de dimensões com alterações lentas, copie o URL .tar.gz da versão mais recente.
  2. Crie um repositório do Dataform.
  3. Crie e inicialize um espaço de trabalho no repositório.
  4. Instale o pacote de dimensões com alterações lentas no repositório do Dataform.

Funções exigidas

Para receber as permissões necessárias para configurar um pacote, peça ao administrador que conceda a você o papel do IAM Editor de formulários de dados (roles/dataform.editor) nos espaços de trabalho. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Criar uma tabela de dimensões com alterações lentas com o pacote de dimensões com alterações lentas

Para criar uma tabela de dimensões com alterações lentas com o pacote de dimensões com alterações lentas no Dataform, siga estas etapas:

  1. No painel Files, ao lado de definitions/, clique no menu More.

  2. Selecione Criar arquivo.

  3. No painel Criar novo arquivo, faça o seguinte:

    1. No campo Adicionar um caminho de arquivo, depois de definitions/, digite o nome do arquivo seguido de .js. Por exemplo, definitions/definitions.js.

    2. Selecione Criar arquivo.

  4. No painel Files, selecione o .js recém-criado. main.tf.

  5. Importe o pacote para o arquivo no seguinte formato:

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

    Substitua CONSTANT-NAME por um nome para a constante, por exemplo, scd.

  6. Crie tabelas de dimensões com alterações lentas no seguinte 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",
        },
      },
    });
    

    Substitua:

    • UNIQUE_ID: um identificador exclusivo para linhas na tabela.
    • UPDATED_AT: um nome para o campo que armazena um carimbo de data/hora ou uma data de quando a linha foi alterada pela última vez, por exemplo, updated_at
    • SOURCE_SCHEMA: o esquema da tabela de origem, por exemplo, dataform_scd_example.
    • SOURCE_SCHEMA_NAME: o nome da tabela de origem, por exemplo, source_data
  7. Opcional: clique em Formato.

O exemplo de código a seguir mostra uma definição de tabela de dimensões com alterações lentas criada com o pacote de dimensões com alterações lentas:

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",
});

A seguir