Operaciones de creación

En este documento se explica cómo definir operaciones SQL personalizadas en un archivo SQLX específico.

Dataform puede ejecutar operaciones SQL personalizadas que no se ajusten al modelo de Dataform de publicar una tabla o escribir una aserción. Puedes definir comandos SQL personalizados para que Dataform los ejecute en BigQuery.

Antes de empezar

  1. En la Google Cloud consola, ve a la página Dataform.

    Ir a la página de Dataform

  2. Seleccione o cree un repositorio.

  3. Seleccione o cree un espacio de trabajo de desarrollo.

Roles obligatorios

Para obtener los permisos que necesitas para definir una operación de SQL personalizada, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Editor de Dataform (roles/dataform.editor) 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.

Crear un archivo para la definición de la operación personalizada

Almacena los archivos SQLX de definición de operaciones personalizadas en el directorio definitions/. Para crear un archivo SQLX en el directorio definitions/, sigue estos pasos:

  1. Ve a tu espacio de desarrollo.
  2. En el panel Archivos, junto a definitions/, haz clic en el menú Más.
  3. Haz clic en Crear archivo.
  4. En el campo Añadir una ruta de archivo, introduce el nombre del archivo seguido de .sqlx después de definitions/. Por ejemplo, definitions/sample-operation.sqlx.

    Los nombres de archivo solo pueden incluir números, letras, guiones y guiones bajos.

  5. Haz clic en Crear archivo.

Definir una operación de SQL personalizada

Puedes definir una operación SQL personalizada en un archivo SQLX de type: operations. Puedes escribir cualquier instrucción SQL de BigQuery en un archivo operations. Dataform ejecuta tus operaciones de SQL personalizadas en BigQuery sin modificaciones.

Puedes definir varias operaciones SQL personalizadas en un archivo SQLX. BigQuery ejecuta todas las operaciones de un archivo en el mismo contexto y crea el SQL de ejecución combinando todas las operaciones con un punto y coma (;).

Para definir varias operaciones de SQL personalizadas al usar el framework de código abierto Dataform con un almacén de datos que no sea BigQuery, separa las operaciones con ---.

Para definir una operación SQL personalizada en un archivo SQLX específico, sigue estos pasos:

  1. En tu espacio de trabajo de desarrollo, selecciona el archivo SQLX de la definición de operación personalizada.
  2. En el archivo, introduce el siguiente fragmento de código:

    config { type: "operations" }
    
  3. Fuera del bloque config, escribe tu operación de SQL.

  4. Opcional: Haz clic en Formato.

En el siguiente código de ejemplo se muestran varias operaciones SQL personalizadas definidas en un archivo operations:

config { type: "operations" }

DELETE FROM dataset.table WHERE country = 'GB';

DELETE FROM dataset.table WHERE country = 'FR';

En el siguiente ejemplo de código se muestra una operación SQL personalizada que crea una vista manualmente:

config { type: "operations" }
CREATE OR REPLACE VIEW dataset.table AS (SELECT 1 AS TEST)

Crear una tabla de salida a la que se pueda hacer referencia

Puedes crear manualmente una tabla en una operación SQL personalizada a la que puedes hacer referencia en otras secuencias de comandos. Para crear una tabla que esté disponible para otras secuencias de comandos, debes declarar que la operación tiene una salida.

Para que el nombre de la tabla de salida coincida con el nombre del archivo operations, puedes usar la función self en la operación CREATE.

Para crear una tabla en una operación personalizada y que esté disponible para otras secuencias de comandos, sigue estos pasos:

  1. En tu espacio de trabajo de desarrollo, selecciona el archivo SQLX para la definición de la operación personalizada.
  2. En el archivo SQLX, introduce el siguiente fragmento de código:

    config {
     type: "operations",
     hasOutput: true
    }
    
  3. Para que el nombre de la tabla de salida coincida con el del archivo, escribe una operación CREATE de SQL con la función self en el siguiente formato:

    CREATE OR REPLACE TABLE ${self()} AS (CUSTOM_SQL_QUERY)
    

    Sustituye CUSTOM_SQL_QUERY por la SELECTdeclaración SQL de definición de tabla.

  4. Opcional: Haz clic en Formato.

Hacer referencia a una tabla de resultados de una operación de SQL personalizada

  • Para hacer referencia a una tabla de salida de una operación SQL personalizada en una definición SQLX de otra tabla, introduce el nombre del archivo de la tabla de salida en la función ref.

En el siguiente código de ejemplo se muestra una operación SQL personalizada en un archivo custom_SQL_operation_table.sqlx que crea una tabla a la que se puede hacer referencia llamada custom_SQL_operation_table:

// filename is custom_SQL_operation_table.sqlx
config {
type: "operations",
hasOutput: true
}
CREATE OR REPLACE VIEW ${self()} AS (SELECT 1 AS TEST)

En el siguiente ejemplo de código se muestra cómo hacer referencia a custom\_SQL\_operation\_table table en un archivo SQLX de definición de tabla:

config { type: "table" }
SELECT * FROM ${ref("custom_SQL_operation_table")}

Crear una tabla vacía

Puede que quieras crear una tabla vacía para que otro servicio pueda rellenarla con datos. Puede crear una tabla vacía en una operación de SQL personalizada con la función CREATE TABLE. Para poder hacer referencia a la tabla vacía en otras definiciones de acciones de flujo de trabajo (por ejemplo, tablas y vistas), puedes añadir la propiedad hasOutput:true al bloque config de la operación de tabla vacía.

  • Para crear una tabla vacía, usa la función CREATE TABLE en un archivo type: "operations" con el siguiente formato:
config {
  type: "operations",
  hasOutput: true  // optional, lets you reference the empty table
}

CREATE TABLE ${self()} (

)

En el siguiente código de ejemplo se muestra una operación SQL personalizada que crea una tabla vacía con una columna de números enteros y otra de cadenas. Otras acciones del flujo de trabajo no pueden hacer referencia a la tabla vacía creada:

config {
  type: "operations"
}

CREATE TABLE ${self()} (
  x INT64,
  y STRING
)

Siguientes pasos