En este documento, se muestra 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 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 el elemento dependiente después de la dependencia. Para definir la relación, debes declarar dependencias dentro del archivo de definición de SQLX del objeto dependiente.
Las declaraciones de dependencia conforman un árbol de dependencias de tu flujo de trabajo que determina el orden en el que Dataform ejecuta las acciones de tu flujo de trabajo.
Puedes definir la relación de dependencia entre las siguientes acciones del 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 las definiciones de tablas de Dataform y las operaciones de SQL Puedes establecer una declaración de fuente de datos como una dependencia, pero no como un elemento dependiente.
- Tablas
- Tablas que creas en Dataform en función de las fuentes de datos declaradas o de otras tablas de tu flujo de trabajo. 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 SQL que Dataform ejecuta en BigQuery tal como están, sin modificaciones. Puedes establecer una operación de 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 establecer la propiedadhasOutput
entrue
en el archivo de definición SQLX de la operación SQL personalizada. - Aserciones
- Consultas de prueba de calidad de los datos que puedes usar para probar los datos de la tabla.
Dataform ejecuta aserciones cada vez que actualiza tu flujo de trabajo y te avisa si alguna falla. Puedes establecer una aserción definida en un archivo
type: assertion
como una dependencia y como un elemento dependiente declarando dependencias en el bloqueconfig
.
Puedes definir la relación de dependencia de las siguientes maneras:
- Declara una dependencia con la función
ref
principal de Dataform para hacer referencia a la dependencia en una sentenciaSELECT
. - Declara una lista de dependencias en el bloque
config
de un archivo de definición de SQLX.
Antes de comenzar
- Crea e inicializa un espacio de trabajo de desarrollo en tu repositorio.
- Opcional: Declara una fuente de datos.
- Crea al menos dos acciones de flujo de trabajo: tablas, aseveraciones, declaraciones de fuentes de datos o operaciones.
Roles obligatorios
Para obtener los permisos que necesitas para declarar dependencias para tablas, aserciones, declaraciones de fuentes de datos y operaciones de SQL personalizadas,
pídele a tu administrador que te otorgue el
rol de IAM de Editor de Dataform (roles/dataform.editor
)
en los espacios de trabajo.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Declarar una dependencia como argumento de la función ref
Para hacer referencia a una dependencia y declararla automáticamente en una sentencia SELECT
, agrega la dependencia como un 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 o operación de SQL personalizada y depender automáticamente de ellos con la propiedad hasOutput
establecida en true
en tu flujo de trabajo.
Para obtener más información sobre la función ref
, consulta la referencia de los métodos de contexto principales de Dataform.
Para obtener más información sobre el uso de la función ref
en una definición de tabla, consulta Acerca de las definiciones de tabla.
En el siguiente muestra de código, se muestra la declaración de la fuente de datos source_data
agregada como un 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 la muestra de código anterior, source_data
se declara automáticamente como una dependencia de incremental_table
.
En el siguiente muestra de código, se muestra el archivo SQLX de definición de la tabla some_table
agregado 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 elemento dependiente, pero que deben ejecutarse antes de la tabla, la aserción o la operación de SQL personalizada, sigue estos pasos:
- En el espacio de trabajo de desarrollo, en el panel Archivos, expande el directorio
definitions/
. - Selecciona el archivo SQLX de la tabla, la aserción o la operación SQL personalizada que deseas editar.
En el bloque
config
del archivo, ingresa el siguiente fragmento de código:dependencies: [ "DEPENDENCY", ]
Reemplaza DEPENDENCY por el destino de la cadena, por ejemplo, el nombre de archivo de la acción que deseas agregar como dependencia. Puedes ingresar varios objetivos separados por comas.
Opcional: Haz clic en Formato.
En el siguiente muestra de código, se muestran la tabla some_table
y la aserción some_assertion
agregadas como dependencias al bloque config
de un archivo de definición de tabla:
config { dependencies: [ "some_table", "some_assertion" ] }
Cómo establecer 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, la falla 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 aprueban las aserciones de la acción A, debes establecer las aserciones de la acción A como dependencias de la acción B.
Puedes establecer aserciones como dependencias de una acción seleccionada de las siguientes maneras:
- Establece las aserciones seleccionadas como dependencias
Puedes establecer manualmente las aserciones seleccionadas como dependencias agregándolas a la línea
dependencies: [ "" ]
en el 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 solo dependa de las aserciones seleccionadas de la acción A, puedes agregar esas aserciones seleccionadas al bloque
config
de la acción B.Puedes establecer manualmente las aserciones seleccionadas como dependencias para todos los tipos de acciones, excepto las declaraciones de fuentes de datos.
- Cómo establecer las aserciones de una acción de dependencia seleccionada como dependencias
Puedes configurar el parámetro
includeDependentAssertions
para establecer 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 agrega 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 establecer el parámetro
includeDependentAssertions
para establecer automáticamente todas las aserciones de la acción A como dependencias de la acción C.Puedes establecer el parámetro
includeDependentAssertions
para las acciones de los siguientes tipos:table
view
operations
- Establece las aserciones de todas las acciones de dependencia como dependencias
Puedes establecer el parámetro
dependOnDependencyAssertions
para configurar 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 agrega 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 establecer el parámetro
dependOnDependencyAssertions
para configurar automáticamente todas las aserciones de las acciones A y B como dependencias de la acción C.Puedes establecer el parámetro
dependOnDependencyAssertions
para las acciones de los siguientes tipos:table
view
operations
Cuando configuras el parámetro dependOnDependencyAssertions
y los parámetros includeDependentAssertions
en un solo archivo, el parámetro includeDependentAssertions
tiene prioridad. Por ejemplo, si estableces dependOnDependencyAssertions
en true
, pero también estableces includeDependentAssertions
en false
para una acción de dependencia seleccionada, Dataform no agregará las aserciones de esa acción a las dependencias.
En la siguiente muestra de código, se muestran los parámetros dependOnDependencyAssertions
y includeDependentAssertions
establecidos 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 la muestra de código anterior, Dataform agrega todas las aserciones directas de actionA
y actionC
a las dependencias de tableName
durante la compilación.
Establece las aserciones seleccionadas como dependencias
Para ejecutar una acción de flujo de trabajo solo cuando se aprueban las aserciones seleccionadas, puedes agregar la aserción seleccionada a la línea dependencies: [ "" ]
en el bloque config
de la acción editada.
Para establecer una aserción seleccionada como dependencia de una acción de flujo de trabajo seleccionada, sigue estos pasos:
- En el espacio de trabajo de desarrollo, en el panel Files, expande
definitions/
. - Selecciona un archivo .sqlx de acción de flujo de trabajo.
- En el bloque
config
del archivo de acción, ingresadependencies: [ "" ]
. Dentro de
dependencies: [ "" ]
, ingresa el nombre de la aserción de acción o el nombre de archivo de la aserción manual que deseas establecer como dependencia en uno de los siguientes formatos:nonNull
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_nonNull"] }
Reemplaza lo siguiente:
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - ACTION_DATASET_NAME: Es 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: Es 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"] }
Reemplaza lo siguiente:
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DATASET_NAME: Es 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: Es 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"] }
Reemplaza lo siguiente:
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DATASET_NAME: Es 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: Es el nombre de la tabla en la que se define la aserción.
- INDEX: Es el índice del array de claves definido en la aserción
uniqueKey
que deseas agregar como dependencia, por ejemplo,0
o1
. Si solo se define un array de claves en la aserción, el índice es0
.
uniqueKeys
config { type: "ACTION_TYPE", dependencies: [ "ACTION_DATASET_NAME_ACTION_NAME_assertions_uniqueKeys_INDEX"] }
Reemplaza lo siguiente:
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DATASET_NAME: Es 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: Es el nombre de la tabla en la que se define la aserción.
- INDEX: Es el índice del array de claves definido en la aserción
uniqueKeys
que deseas agregar como dependencia, por ejemplo,0
o1
. Si solo se define un array de claves en la aserción, el índice es0
.
Aserción manual
config { type: "ACTION_TYPE", dependencies: [ "MANUAL_ASSERTION_NAME"] }
Reemplaza lo siguiente:
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - MANUAL_ASSERTION_NAME es el nombre de la aserción manual.
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
Para agregar otra aserción como dependencia a la tabla editada, repite el paso 4.
Opcional: Haz clic en Formato.
En el siguiente muestra de código, se muestran las aserciones agregadas 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 la siguiente muestra de código, se muestran las aserciones de la tabla A agregadas como dependencias a la tabla B:
config {
type: "table",
dependencies: [ "dataform_A_assertions_uniqueKey_0", "dataform_A_assertions_nonNull"]
}
En el siguiente muestra de código, se muestra una aserción manual que se define en el archivo manualAssertion.sqlx
y se agrega como dependencia a una vista:
config {
type: "view",
dependencies: [ "manualAssertion"]
}
En el siguiente muestra de código, se muestran el archivo manual_assertion
y las aserciones de la tabla sometable
agregadas 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 ...
Establece las aserciones de una acción seleccionada como dependencias
Para ejecutar una acción del flujo de trabajo solo cuando se aprueban todas las aserciones directas de una acción de dependencia seleccionada, establece el parámetro includeDependentAssertions
en true
en la acción editada. Dataform agrega 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 establecer todas las aserciones de una acción de dependencia seleccionada como dependencias, sigue estos pasos:
- En el espacio de trabajo de desarrollo, en el panel Files, expande
definitions/
. - Selecciona un archivo .sqlx de acción de flujo de trabajo.
En el archivo, configura el parámetro
includeDependentAssertions
comotrue
de una de las siguientes maneras:En el bloque
config
config { type: "ACTION_TYPE", dependencies: [{name: "dEPENDENCY_ACTION_NAME", includeDependentAssertions: true}] }
Reemplaza lo siguiente:
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DEPENDENCY_ACTION_NAME: Es el nombre de la acción de dependencia con las aserciones que deseas establecer como dependencias de la acción editada.
En la sentencia
SELECT
config { type: "ACTION_TYPE" } SELECT * FROM ${ref({name: "DEPENDENCY_ACTION_NAME", includeDependentAssertions: true})}
Reemplaza lo siguiente:
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
table
,view
ooperations
. - DEPENDENCY_ACTION_NAME: Es el nombre de la acción de dependencia con las aserciones que deseas establecer como dependencias de la acción editada.
- ACTION_TYPE: Es el tipo de acción del flujo de trabajo:
Opcional: Haz clic en Formato.
En el siguiente muestra 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 muestra de código anterior, Dataform agrega automáticamente todas las aserciones directas de tableB
como dependencias de tableC
durante la compilación.
Establece las aserciones de todas las acciones de dependencia como dependencias
Para ejecutar una acción del flujo de trabajo solo cuando todas las aserciones directas de todas las acciones de dependencia se aprueban, establece el parámetro dependOnDependencyAssertions
en true
en la acción editada. Dataform agrega automáticamente las aserciones directas de las acciones de dependencia como dependencias durante la compilación. El valor predeterminado es false
.
Cuando configuras el parámetro dependOnDependencyAssertions
y los parámetros includeDependentAssertions
en un solo archivo, el parámetro includeDependentAssertions
tiene prioridad para la acción de dependencia para la que se configuró.
Para establecer todas las aserciones de una acción de dependencia seleccionada como dependencias, sigue estos pasos:
- En el espacio de trabajo de desarrollo, en el panel Files, expande
definitions/
. - Selecciona un archivo .sqlx de acción de flujo de trabajo.
En el archivo, configura el parámetro
dependOnDependencyAssertions
comotrue
con el siguiente formato:config { type: "ACTION_TYPE", dependOnDependencyAssertions: true, dependencies: [ "dependency1", "dependency2" ] }
Reemplaza ACTION_TYPE: Es el tipo de acción del flujo de trabajo. Los valores admitidos son
table
,view
yoperations
.Opcional: Haz clic en Formato.
En la siguiente muestra de código, se muestra sometableE
, que depende de sometableA
, sometabletableB
, sometableC
, sometableD
y todas las aserciones directas de las tablas de dependencia:
// filename is sometableE.sqlx
config {
type: "table",
dependOnDependencyAssertions: true,
dependencies: [ "sometableA", "sometableB" ]
}
SELECT * FROM ${ref("sometableC")}
SELECT * FROM ${ref("sometableD")}
En el muestra de código anterior, Dataform agrega automáticamente todas las aserciones directas de sometableA
, sometableB
, sometableC
y sometableD
como dependencias de sometableE
durante la compilación.
Haz referencia a una tabla con un nombre de tabla anulado
- Para hacer referencia a una tabla con un nombre anulado, en la función
ref
, ingresa el nombre anulado que se configuró enname: ""
.
La siguiente muestra de código hace referencia a una tabla con un nombre anulado a overridden_name
:
SELECT * FROM ${ref("overridden_name")}
Para obtener más información sobre cómo anular los nombres de las tablas, consulta Cómo anular la configuración de la tabla.
¿Qué sigue?
- Para obtener información sobre cómo establecer aserciones como dependencias, consulta Prueba la calidad de los datos.
- Para obtener información sobre cómo declarar una fuente de datos, consulta Cómo declarar una fuente de datos.
- Para aprender a definir operaciones de SQL personalizadas, consulta Crea operaciones.
- Si quieres obtener información para reutilizar código en tu flujo de trabajo con la función de inclusión, consulta Reutiliza código en un solo repositorio con la función de inclusión.