En este documento se explica cómo definir la relación entre los objetos de tu flujo de trabajo en Dataform declarando dependencias.
Puedes definir una relación de dependencia entre los objetos de un flujo de trabajo. 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 la dependencia después de la dependencia. Para definir la relación, debes declarar las dependencias en el archivo de definición SQLX del objeto dependiente.
Las declaraciones de dependencia forman un árbol de dependencias de tu flujo de trabajo que determina el orden en el que Dataform ejecuta las acciones del flujo de trabajo.
Puede definir la relación de dependencia entre las siguientes acciones de flujo de trabajo:
- 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 y operaciones SQL de Dataform. Puedes definir una declaración de fuente de datos como dependencia, pero no como elemento dependiente.
- Tablas
- Tablas que creas en Dataform a partir de las fuentes de datos declaradas u otras tablas de tu flujo de trabajo. Dataform admite los siguientes tipos de tablas: tabla, tabla incremental, vista y vista materializada. Puedes definir una tabla como dependencia y como elemento dependiente.
- Operaciones de SQL personalizadas
- Instrucciones SQL que Dataform ejecuta en BigQuery tal cual, sin modificaciones. Puedes definir una operación SQL personalizada definida en un archivo
type: operations
como dependencia y como elemento dependiente. Para declarar una operación SQL personalizada como dependencia en la funciónref
, debes asignar el valortrue
a la propiedadhasOutput
en el archivo de definición SQLX de la operación SQL personalizada. - Aserciones
- Consultas de prueba de calidad de los datos que puede usar para probar los datos de las tablas.
Dataform ejecuta aserciones cada vez que actualiza tu flujo de trabajo y te avisa si falla alguna. Puedes definir una aserción definida en un archivo
type: assertion
como dependencia y como elemento dependiente declarando dependencias en el bloqueconfig
.
Puede definir la relación de dependencia de las siguientes formas:
- Declara una dependencia mediante la función
ref
principal de Dataform para hacer referencia a la dependencia en una instrucciónSELECT
. - Declara una lista de dependencias en el bloque
config
de un archivo de definición SQLX.
Antes de empezar
- Crea e inicializa un espacio de trabajo de desarrollo en tu repositorio.
- Opcional: declarar una fuente de datos.
- Crea al menos dos acciones de flujo de trabajo: tablas, aserciones, declaraciones de fuentes de datos u operaciones.
Roles obligatorios
Para obtener los permisos que necesitas para declarar dependencias de tablas, aserciones, declaraciones de fuentes de datos y operaciones SQL personalizadas,
pide a tu administrador que te conceda el
rol de editor de Dataform (roles/dataform.editor
)
de gestión de identidades y accesos en los espacios de trabajo.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Declarar una dependencia como argumento de la función ref
Para hacer referencia a una dependencia y declararla automáticamente en una instrucción SELECT
, añade la dependencia como argumento de la función ref
.
La función ref
es una función integrada de Dataform Core que te permite hacer referencia a cualquier tabla, declaración de fuente de datos u operación de SQL personalizada y depender automáticamente de ella con la propiedad hasOutput
definida como true
en tu flujo de trabajo.
Para obtener más información sobre la función ref
, consulta la referencia de métodos de contexto principales de Dataform.
Para obtener más información sobre cómo usar la función ref
en una definición de tabla, consulta Acerca de las definiciones de tabla.
En el siguiente ejemplo de código se muestra la declaración de la fuente de datos source_data
añadida como argumento de la función ref
en el archivo de definición incremental_table.sqlx
SQLX de una tabla incremental:
// filename is incremental_table.sqlx
config { type: "incremental" }
SELECT * FROM ${ref("source_data")}
En el ejemplo de código anterior, source_data
se declara automáticamente como dependencia de incremental_table
.
En el siguiente ejemplo de código se muestra el archivo SQLX de definición de tabla some_table
añadido como argumento de la función ref
en el archivo de definición 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 el ejemplo de código anterior, some_table
se declara automáticamente como dependencia de custom_assertion
. Durante la ejecución, Dataform ejecuta some_table
primero y, a continuación, ejecuta custom_assertion
una vez que se ha creado some_table
.
Declarar dependencias en el bloque config
Para declarar dependencias que no se referencian en la definición de la instrucción SQL de la dependencia, pero que deben ejecutarse antes de la tabla, la aserción o la operación SQL personalizada, sigue estos pasos:
- En tu espacio de trabajo de desarrollo, en el panel Archivos, expande el directorio
definitions/
. - Selecciona el archivo SQLX de tabla, aserción u operación SQL personalizada que quieras editar.
En el bloque
config
del archivo, introduce el siguiente fragmento de código:dependencies: [ "DEPENDENCY", ]
Sustituye DEPENDENCY por la cadena de destino. Por ejemplo, el nombre de archivo de la acción que quieras añadir como dependencia. Puedes introducir varios objetivos separados por comas.
Opcional: Haz clic en Formato.
En el siguiente ejemplo de código se muestran la tabla some_table
y la aserción some_assertion
añadidas como dependencias al bloque config
de un archivo de definición de tabla:
config { dependencies: [ "some_table", "some_assertion" ] }
Definir aserciones como dependencias
Cuando la acción de flujo de trabajo B depende de la acción de flujo de trabajo A, que tiene aserciones, el fallo de las aserciones de la acción A no impide que Dataform ejecute la acción B. Para ejecutar la acción B solo si se cumplen las aserciones de la acción A, debes definir las aserciones de la acción A como dependencias de la acción B.
Puedes definir aserciones como dependencias de una acción seleccionada de las siguientes formas:
- Definir las aserciones seleccionadas como dependencias
Puedes definir manualmente las aserciones seleccionadas como dependencias añadiéndolas a la línea
dependencies: [ "" ]
del bloqueconfig
de la acción editada.Por ejemplo, si la acción B depende de la acción A y quieres que la acción B dependa solo de las aserciones seleccionadas de la acción A, puedes añadir esas aserciones seleccionadas al bloque
config
de la acción B.Puedes definir manualmente las aserciones seleccionadas como dependencias de todos los tipos de acción, excepto las declaraciones de fuentes de datos.
- Definir las aserciones de una acción de dependencia seleccionada como dependencias
Puedes definir el parámetro
includeDependentAssertions
para que se establezcan automáticamente todas las aserciones directas de una acción de flujo de trabajo de dependencia seleccionada como dependencias de la acción editada. Dataform añade estas aserciones como dependencias durante cada compilación de la acción para verificar que las dependencias estén actualizadas si cambian las aserciones de la acción de dependencia.Por ejemplo, si la acción C depende de las acciones A y B, pero solo quieres que la acción C dependa de las aserciones de la acción A, puedes editar la acción C y definir el parámetro
includeDependentAssertions
para que todas las aserciones de la acción A se definan automáticamente como dependencias de la acción C.Puedes definir el parámetro
includeDependentAssertions
para acciones de los siguientes tipos:table
view
operations
- Definir las aserciones de todas las acciones de dependencia como dependencias
Puede definir el parámetro
dependOnDependencyAssertions
para que se definan automáticamente todas las aserciones directas de todas las acciones de dependencia de la acción editada como dependencias adicionales de la acción editada. Dataform añade estas aserciones como dependencias durante cada compilación de la acción para verificar que las dependencias estén actualizadas si cambian las aserciones de la acción de dependencia.Por ejemplo, si la acción C depende de las acciones A y B, puedes editar la acción C y definir el parámetro
dependOnDependencyAssertions
para que se definan automáticamente todas las aserciones de las acciones A y B como dependencias de la acción C.Puedes definir el parámetro
dependOnDependencyAssertions
para acciones de los siguientes tipos:table
view
operations
Si define el parámetro dependOnDependencyAssertions
y los parámetros includeDependentAssertions
en un mismo archivo, el parámetro includeDependentAssertions
tiene prioridad. Por ejemplo, si asignas el valor true
a dependOnDependencyAssertions
, pero también asignas el valor false
a includeDependentAssertions
para una acción de dependencia seleccionada, Dataform no añadirá las aserciones de esa acción a las dependencias.
En el siguiente ejemplo de código se muestran los parámetros dependOnDependencyAssertions
y includeDependentAssertions
definidos en el mismo archivo de definición de tabla:
// filename is tableName.sqlx
config {
type: "table",
dependOnDependencyAssertions: true,
dependencies: [ "actionA", {name: "actionB", includeDependentAssertions: false} ]
}
SELECT * FROM ${ref("actionC")}
En el ejemplo de código anterior, Dataform añade todas las aserciones directas de actionA
y actionC
a las dependencias de tableName
durante la compilación.
Definir las aserciones seleccionadas como dependencias
Para ejecutar una acción de flujo de trabajo solo cuando se cumplan las aserciones seleccionadas, puedes añadir la aserción seleccionada a la línea dependencies: [ "" ]
del bloque config
de la acción editada.
Para definir una aserción seleccionada como dependencia de una acción de flujo de trabajo seleccionada, sigue estos pasos:
- En tu espacio de trabajo de desarrollo, en el panel Archivos, despliega
definitions/
. - Selecciona un archivo SQLX de acción de flujo de trabajo.
- En el bloque
config
del archivo de acciones, introducedependencies: [ "" ]
. En
dependencies: [ "" ]
, introduce el nombre de la aserción de acción o el nombre de archivo de la aserción manual que quieras definir como dependencia en uno de los siguientes formatos:nonNull
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_nonNull"] }
Haz los cambios siguientes:
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - ACTION_DATASET_NAME: el nombre del conjunto de datos en el que se define la acción. El conjunto de datos predeterminado se define en el archivo de configuración del flujo de trabajo.
- ACTION_NAME: el nombre de la acción en la que se define la aserción.
rowConditions
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_rowConditions"] }
Haz los cambios siguientes:
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DATASET_NAME: el nombre del conjunto de datos en el que se define la acción. El conjunto de datos predeterminado se define en el archivo de configuración del flujo de trabajo.
- ACTION_NAME: el nombre de la acción en la que se define la aserción.
uniqueKey
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKey_INDEX"] }
Haz los cambios siguientes:
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DATASET_NAME: el nombre del conjunto de datos en el que se define la tabla. El conjunto de datos predeterminado se define en el archivo de configuración del flujo de trabajo.
- ACTION_NAME: el nombre de la tabla en la que se define la aserción.
- INDEX: el índice del array de claves definido en la aserción
uniqueKey
que quieras añadir como dependencia (por ejemplo,0
o1
). Si solo se define una matriz de claves en la aserción, el índice es0
.
uniqueKeys
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKeys_INDEX"] }
Haz los cambios siguientes:
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DATASET_NAME: el nombre del conjunto de datos en el que se define la tabla. El conjunto de datos predeterminado se define en el archivo de configuración del flujo de trabajo.
- ACTION_NAME: el nombre de la tabla en la que se define la aserción.
- INDEX: el índice del array de claves definido en la aserción
uniqueKeys
que quieras añadir como dependencia (por ejemplo,0
o1
). Si solo se define una matriz de claves en la aserción, el índice es0
.
aserción manual
config { type: "ACTION_TYPE", dependencies: [ "MANUAL_ASSERTION_NAME"] }
Haz los cambios siguientes:
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - MANUAL_ASSERTION_NAME el nombre de la aserción manual.
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
Para añadir otra aserción como dependencia a la tabla editada, repite el paso 4.
Opcional: Haz clic en Formato.
En el siguiente ejemplo de código se muestran las aserciones añadidas a la tabla A, que se define en el conjunto de datos dataform
:
config {
type: "table",
assertions: {
uniqueKey: ["user_id"],
nonNull: ["user_id", "customer_id"],
}
}
En el siguiente ejemplo de código se muestran las aserciones de la tabla A añadidas como dependencias a la tabla B:
config {
type: "table",
dependencies: [ "dataform_A_assertions_uniqueKey_0", "dataform_A_assertions_nonNull"]
}
En el siguiente ejemplo de código se muestra una aserción manual definida en el archivo manualAssertion.sqlx
y añadida como dependencia a una vista:
config {
type: "view",
dependencies: [ "manualAssertion"]
}
En el siguiente ejemplo de código se muestra el archivo manual_assertion
y las aserciones de la tabla sometable
añadidas como dependencias a una tabla:
config {
type: "table",
dependencies: [ "manual_assertion", "dataform_sometable_assertions_nonNull" , "dataform_sometable_assertions_rowConditions"]
}
SELECT * FROM ${ref("referenced_table")} LEFT JOIN ...
Definir las aserciones de una acción seleccionada como dependencias
Para ejecutar una acción de flujo de trabajo solo cuando se cumplan todas las aserciones directas de una acción de dependencia seleccionada, asigna el valor true
al parámetro includeDependentAssertions
en la acción editada. Dataform añade automáticamente las aserciones directas de la acción de dependencia seleccionada a las dependencias durante la compilación. El valor predeterminado es false
.
Para definir todas las aserciones de una acción de dependencia seleccionada como dependencias, sigue estos pasos:
- En tu espacio de trabajo de desarrollo, en el panel Archivos, despliega
definitions/
. - Selecciona un archivo SQLX de acción de flujo de trabajo.
En el archivo, define el parámetro
includeDependentAssertions
comotrue
de una de las siguientes formas:En el bloque
config
config { type: "ACTION_TYPE", dependencies: [{name: "dEPENDENCY_ACTION_NAME", includeDependentAssertions: true}] }
Haz los cambios siguientes:
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DEPENDENCY_ACTION_NAME: el nombre de la acción de dependencia con las aserciones que quieras definir como dependencias de la acción editada.
En la instrucción
SELECT
config { type: "ACTION_TYPE" } SELECT * FROM ${ref({name: "DEPENDENCY_ACTION_NAME", includeDependentAssertions: true})}
Haz los cambios siguientes:
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DEPENDENCY_ACTION_NAME: el nombre de la acción de dependencia con las aserciones que quieras definir como dependencias de la acción editada.
- ACTION_TYPE: el tipo de acción del flujo de trabajo:
Opcional: Haz clic en Formato.
En el siguiente ejemplo de código se muestra tableC
, que depende de viewA
, tableB
y todas las aserciones de tableB
:
// filename is tableC.sqlx
config {
type: "table",
dependencies: ["viewA", {name: "tableB", includeDependentAssertions: true}]
}
SELECT * FROM ...
En el ejemplo de código anterior, Dataform añade automáticamente todas las aserciones directas de tableB
como dependencias de tableC
durante la compilación.
Definir las aserciones de todas las acciones de dependencia como dependencias
Para ejecutar una acción de flujo de trabajo solo cuando se cumplan todas las aserciones directas de todas las acciones de dependencia, define el parámetro dependOnDependencyAssertions
como true
en la acción editada. Dataform añade automáticamente las aserciones directas de las acciones de dependencia como dependencias durante la compilación. El valor predeterminado es false
.
Si define el parámetro dependOnDependencyAssertions
y los parámetros includeDependentAssertions
en un mismo archivo, el parámetro includeDependentAssertions
tendrá prioridad en la acción de dependencia para la que se haya definido.
Para definir todas las aserciones de una acción de dependencia seleccionada como dependencias, sigue estos pasos:
- En tu espacio de trabajo de desarrollo, en el panel Archivos, despliega
definitions/
. - Selecciona un archivo SQLX de acción de flujo de trabajo.
En el archivo, asigna el valor
true
al parámetrodependOnDependencyAssertions
con el siguiente formato:config { type: "ACTION_TYPE", dependOnDependencyAssertions: true, dependencies: [ "dependency1", "dependency2" ] }
Sustituye ACTION_TYPE por el tipo de acción del flujo de trabajo. Los valores admitidos son
table
,view
yoperations
.Opcional: Haz clic en Formato.
En el siguiente ejemplo de código se muestra sometableE
, que depende de sometableA
, sometabletableB
, sometableC
, sometableD
y todas las aserciones directas de las tablas de dependencias:
// filename is sometableE.sqlx
config {
type: "table",
dependOnDependencyAssertions: true,
dependencies: [ "sometableA", "sometableB" ]
}
SELECT * FROM ${ref("sometableC")}
SELECT * FROM ${ref("sometableD")}
En el ejemplo de código anterior, Dataform añade automáticamente todas las aserciones directas de sometableA
, sometableB
, sometableC
y sometableD
como dependencias de sometableE
durante la compilación.
Hacer referencia a una tabla con un nombre de tabla sustituido
- Para hacer referencia a una tabla con un nombre de tabla sustituido, en la función
ref
, introduce el nombre de tabla sustituido que se ha definido enname: ""
.
En el siguiente ejemplo de código se hace referencia a una tabla cuyo nombre se ha sustituido por overridden_name
:
SELECT * FROM ${ref("overridden_name")}
Para obtener más información sobre cómo anular nombres de tablas, consulta Anular la configuración de tablas.
Siguientes pasos
- Para saber cómo definir aserciones como dependencias, consulta el artículo Calidad de los datos de prueba.
- Para saber cómo declarar una fuente de datos, consulta el artículo Declarar una fuente de datos.
- Para saber cómo definir operaciones SQL personalizadas, consulta Crear operaciones.
- Para saber cómo reutilizar código en tu flujo de trabajo con includes, consulta Reutilizar código en un mismo repositorio con includes.