En este documento, se muestra cómo definir tablas con Dataform core en Dataform.
Acerca de las definiciones de tablas
Para definir una tabla, debes definir el tipo de tabla y escribir una instrucción SELECT
en un archivo SQLX type: "table"
. Luego, Dataform compila tu código principal de Dataform en SQL, ejecuta el código de SQL y crea las tablas definidas en BigQuery.
En una instrucción SELECT
principal de Dataform, defines la estructura de la tabla y haces referencia a otros objetos de tu flujo de trabajo de SQL.
Además de definir tablas en un archivo SLQX de type: "table"
, puedes crear tablas vacías si defines una consulta en SQL personalizada en un archivo SQLX type: "operations"
.
Para obtener más información, consulta Crea una tabla vacía.
Cómo hacer referencia a dependencias con ref
Para hacer referencia a un objeto de flujo de trabajo de SQL en una instrucción SELECT
y agregarlo automáticamente como una dependencia, usa la función ref
. Dataform ejecuta las dependencias antes que las tablas que dependen de ellas para garantizar un orden correcto de la canalización.
La función ref
es una función integrada principal de Dataform que es fundamental para la administración de dependencias en Dataform. La función ref
te permite hacer referencia a los siguientes objetos definidos en tu flujo de trabajo de SQL de Dataform y depender automáticamente de ellos, en lugar de codificar de forma fija los nombres del esquema y la tabla:
- tablas de todos los tipos de tabla compatibles
- declaraciones de fuentes de datos
- Operaciones personalizadas de SQL con la propiedad
hasOutput
establecida entrue
Dataform usa la función ref
para compilar un árbol de dependencias de todas las tablas que se crearán o actualizarán.
Después de la compilación, Dataform agrega sentencias estándar, como CREATE
, REPLACE
, INSERT
o MERGE
a la instrucción de SQL.
En la siguiente muestra de código, se incluye una definición de tabla con el uso de la función ref
:
config { type: "table" }
SELECT
order_date AS date,
order_id AS order_id,
order_status AS order_status,
SUM(item_count) AS item_count,
SUM(amount) AS revenue
FROM ${ref("store_clean")}
GROUP BY 1, 2
En la función ref
, debes proporcionar el nombre de la tabla o la declaración de fuente de datos de la que deseas depender. Por lo general, este es el nombre de archivo del archivo SQLX en el que se define esa declaración de tabla o fuente de datos.
Si se anula el nombre de una tabla, usa el nombre anulado en la función ref
.
Por ejemplo, haz referencia a una tabla con config { name: "overridden_name" }
como ref("overridden_name")
. Para obtener más información sobre cómo anular los nombres de las tablas, consulta Establece parámetros de configuración adicionales para las tablas.
Cuando tienes varias tablas con el mismo nombre en diferentes esquemas, puedes hacer referencia a una tabla específica si proporcionas dos argumentos a la función ref
: nombre del esquema y nombre de la tabla.
En la siguiente muestra de código, se ve la función ref
con dos argumentos para especificar una tabla dentro de un esquema específico:
config { type: "table" }
SELECT * FROM ${ref("schema", "store_clean")}
También puedes agregar dependencias de tablas de forma manual al bloque config
para tablas, aserciones, operaciones de SQL personalizadas o declaraciones de fuente de datos a las que no se hace referencia en una función ref
en la declaración SELECT
. Dataform ejecuta estas dependencias antes que las tablas dependientes.
En la siguiente muestra de código, se incluye una dependencia de tabla en el bloque config
:
config { dependencies: [ "unreferenced_table" ] }
SELECT * FROM ...
Para obtener más información sobre la administración de dependencias en tu flujo de trabajo de SQL, consulta Cómo declarar dependencias.
Cómo hacer referencia a otras tablas con resolve
La función resolve
te permite hacer referencia a una tabla o una declaración de fuente de datos en una declaración SELECT
, como la función ref
, pero no agrega la referencia como una dependencia. Esto significa que el objeto al que se hace referencia mediante resolve
no afecta la ejecución de la tabla que usa resolve
.
Para obtener más información sobre las funciones principales integradas de Dataform, consulta la referencia principal de Dataform.
Antes de comenzar
- Crea y, luego, inicializa un lugar de trabajo de desarrollo en tu repositorio.
- Opcional: Declara una fuente de datos.
Funciones obligatorias
Si quieres obtener los permisos que necesitas para definir una tabla,
pídele a tu administrador que te otorgue el
rol de IAM de Editor de Dataform (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.
Crea un archivo SQLX para la definición de tablas
Almacena los archivos SQLX de definición de tablas en el directorio definitions/
. Para crear un archivo SQLX nuevo en el directorio definitions/
, sigue estos pasos:
En la consola de Cloud, ve a la página Dataform.
Para abrir un repositorio, haz clic en su nombre.
Para abrir un lugar de trabajo de desarrollo, haz clic en su nombre.
En el panel Archivos, junto a
definitions/
, haz clic en el menú Más.Haz clic en Crear archivo.
En el campo Agregar una ruta de acceso al archivo, ingresa el nombre del archivo, seguido de
.sqlx
después dedefinitions/
. Por ejemplo,definitions/my-table.sqlx
.Los nombres de archivo solo pueden incluir números, letras, guiones y guiones bajos.
Haz clic en Crear archivo.
Define el tipo de tabla
Para crear una nueva definición de tipo de tabla, sigue estos pasos:
- En tu lugar de trabajo de desarrollo, en el panel Archivos, expande el directorio
definitions/
. - Selecciona el archivo SQLX de definición de tablas que deseas editar.
En el archivo, ingresa el siguiente fragmento de código:
config { type: "TABLE_TYPE" }
Reemplaza TABLE_TYPE por uno de los siguientes tipos de tabla:
table
incremental
view
Opcional: Para definir una vista materializada, ingresa la propiedad
materialized
entype: "view"
con el siguiente formato:config { type: "view", materialized: true }
Para obtener más información, consulta la Referencia principal de Dataform de
ITableConfig
.Opcional: Haz clic en Formato.
Cómo definir la estructura y las dependencias de la tabla
Para escribir una declaración SELECT
de definición de tablas y definir la estructura y las dependencias de la tabla, sigue estos pasos:
- En el lugar de trabajo de desarrollo, en el panel Archivos, expande
el directorio
definitions/
. - Selecciona el archivo SQLX de definición de tablas que deseas editar.
- Debajo del bloque
config
, escribe una sentenciaSELECT
. - Opcional: Haz clic en Formato.
En la siguiente muestra de código, se incluye una definición de tabla con una declaración SELECT
y la función ref
:
config { type: "table" }
SELECT
customers.id AS id,
customers.first_name AS first_name,
customers.last_name AS last_name,
customers.email AS email,
customers.country AS country,
COUNT(orders.id) AS order_count,
SUM(orders.amount) AS total_spent
FROM
dataform-samples.dataform_sample.crm_customers AS customers
LEFT JOIN ${ref('order_stats')} orders
ON customers.id = orders.customer_id
WHERE
customers.id IS NOT NULL
AND customers.first_name <> 'Internal account'
AND country IN ('UK', 'US', 'FR', 'ES', 'NG', 'JP')
GROUP BY 1, 2, 3, 4, 5
Cómo agregar dependencias de tablas manuales
Para agregar dependencias de tabla a las que no se hace referencia en la declaración SELECT
, pero que deben ejecutarse antes que la tabla actual, sigue estos pasos:
- En el lugar de trabajo de desarrollo, en el panel Archivos, expande
el directorio
definitions/
. - Selecciona el archivo SQLX de definición de tablas que deseas editar.
En el bloque
config
de la tabla, ingresa el siguiente fragmento de código:dependencies: [ "DEPENDENCY_TABLE", ]
Reemplaza DEPENDENCY_TABLE por el nombre de archivo de la tabla que deseas agregar como dependencia. Puedes ingresar varios nombres de archivo.
Opcional: Haz clic en Formato.
En la siguiente muestra de código, se ven dos tablas que se agregaron como dependencias de tablas manuales al bloque config
de un archivo de definición de tablas:
config { dependencies: [ "some_table", "some_other_table" ] }
¿Qué sigue?
- Si quieres aprender a configurar tablas incrementales, consulta Cómo configurar tablas incrementales.
- Para aprender a configurar clústeres y particiones de tablas, consulta Crea particiones y clústeres de tablas.
- Para aprender a agregar documentación a las tablas, consulta Cómo agregar documentación a tablas.
- Si quieres aprender a probar datos de tablas con aserciones, consulta Cómo probar tablas con aserciones.
- Para aprender a definir tablas con JavaScript, consulta Crea flujos de trabajo de SQL con JavaScript.
- Si deseas obtener información sobre cómo configurar los ajustes adicionales de la tabla, consulta Establece parámetros de configuración adicionales de la tabla.