Cómo declarar dependencias

En este documento, se muestra cómo definir la relación entre objetos en el flujo de trabajo de SQL en Dataform mediante la declaración de dependencias.

Puedes definir una relación de dependencia entre los objetos de un flujo de trabajo de SQL. En una relación de dependencia, la ejecución del objeto dependiente depende de la ejecución del objeto de dependencia. Esto significa que Dataform ejecuta lo dependiente después de la dependencia. Para definir la relación, declara las dependencias dentro del archivo de definición SQLX del objeto dependiente.

Las declaraciones de dependencia conforman un árbol de dependencias del flujo de trabajo de SQL que determina el orden en el que Dataform ejecuta los objetos de flujo de trabajo de SQL.

Puedes definir la relación de dependencia entre los siguientes objetos del flujo de trabajo de SQL:

Declaraciones de fuentes de datos
Declaraciones de fuentes de datos de BigQuery que te permiten hacer referencia a estas fuentes de datos en definiciones de tablas de Dataform y operaciones de SQL. Puedes establecer una declaración de fuente de datos como dependencia, pero no como dependiente.
Tablas
Tablas que creas en Dataform basadas en las fuentes de datos declaradas o en otras tablas en tu flujo de trabajo de SQL. Dataform admite los siguientes tipos de tablas: tabla, tabla incremental, vista y vista materializada. Puedes establecer una tabla como dependencia y como dependiente.
Operaciones de SQL personalizadas
Instrucciones de SQL que Dataform ejecuta en BigQuery tal como están, sin modificaciones. Puedes configurar una operación de SQL personalizada definida en un archivo type: operations como dependencia y como dependiente. Para declarar una operación de SQL personalizada como una dependencia en la función ref, debes establecer la propiedad hasOutput en true en el archivo de definición de SQLX de la operación de SQL personalizada.
Aserciones
Consultas de prueba de calidad de los datos que puedes usar para probar datos de tablas. Dataform ejecuta aserciones cada vez que actualiza tu flujo de trabajo de SQL y te alerta si falla alguna aserción. Puedes establecer una aserción definida en un archivo type: assertion como dependencia y como dependiente declarando las dependencias en el bloque config.

Puedes definir la relación de dependencia de las siguientes maneras:

Antes de comenzar

  1. Crea y, luego, inicializa un lugar de trabajo de desarrollo en tu repositorio.
  2. Opcional: Declara una fuente de datos.
  3. Crea al menos dos objetos de flujo de trabajo de SQL: tablas, aserciones, operations o declaraciones de fuentes de datos.

Funciones obligatorias

Si quieres obtener los permisos que necesitas para declarar dependencias de tablas, aserciones, declaraciones de fuente de datos y operaciones de SQL personalizadas, pídele a tu administrador que te otorgue el rol de IAM de Editor de formularios de datos (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.

Declara una dependencia como un argumento de la función ref.

Para hacer referencia a una dependencia en una sentencia SELECT y declararla automáticamente, agrégala como argumento de la función ref.

La función ref es una función integrada principal de Dataform que te permite hacer referencia a cualquier tabla, declaración de fuente de datos o operación de SQL personalizada, y depender automáticamente de ellas con la propiedad hasOutput establecida en true en tu flujo de trabajo de SQL.

Para obtener más información sobre la función ref, consulta la referencia de los métodos de contexto principal de Dataform.

Para obtener más información sobre el uso de la función ref en una definición de tablas, consulta Acerca de las definiciones de tablas.

En la siguiente muestra de código, se observa la declaración de fuente de datos source_data agregada como argumento de la función ref en el archivo de definición de SQLX incremental_table.sqlx de una tabla incremental:

// filename is incremental_table.sqlx

config { type: "incremental" }

SELECT * FROM ${ref("source_data")}

En la muestra de código anterior, source_data se declara automáticamente como una dependencia de incremental_table.

En la siguiente muestra de código, se ve el archivo SQLX de definición de tabla some_table que se agregó como argumento de la función ref en el archivo de definición de SQLX custom_assertion.sqlx de una aserción:

// filename is custom_assertion.sqlx

config { type: "assertion" }

SELECT
  *
FROM
  ${ref("some_table")}
WHERE
  a is null
  or b is null
  or c is null

En la muestra de código anterior, some_table se declara automáticamente como una dependencia de custom_assertion. Durante la ejecución, Dataform primero ejecuta some_table y, luego, ejecuta custom_assertion una vez que se crea some_table.

Cómo declarar dependencias en el bloque config

Para declarar dependencias a las que no se hace referencia en la definición de la instrucción de SQL del dependiente, pero que necesitan ejecutarse antes que la tabla, la aserción o la operación de SQL personalizada, sigue estos pasos:

  1. En el lugar de trabajo de desarrollo, en el panel Archivos, expande el directorio definitions/.
  2. Selecciona la tabla, la aserción o el archivo SQLX de la operación de SQL personalizada que deseas editar.
  3. En el bloque config del archivo, ingresa el siguiente fragmento de código:

    dependencies: [ "DEPENDENCY", ]
    

    Reemplaza DEPENDENCY por el nombre de archivo de la tabla, la aserción, la declaración de la fuente de datos o la operación de SQL personalizada que deseas agregar como dependencia. Puedes ingresar varios nombres de archivo, separados por comas.

  4. Opcional: Haz clic en Formato.

En la siguiente muestra de código, se puede ver la tabla some_table y la aserción some_assertion agregadas como dependencias al bloque config de un archivo de definición de tablas:

config { dependencies: [ "some_table", "some_assertion" ] }

¿Qué sigue?