Introducción a las rutinas

En este documento, se describe cómo elegir una rutina, que es un tipo de recurso que usas para crear funciones o procedimientos almacenados en BigQuery.

Rutinas admitidas

BigQuery admite las siguientes rutinas:

Cómo elegir una rutina

En esta sección, se describen los factores que debes considerar cuando elijas una rutina y se comparan las rutinas por tarea.

Factores que debes considerar

Para elegir una rutina, considera los siguientes factores, que se describen en las secciones de cada tipo de rutina:

  • El tipo de tarea que se implementará
  • El lenguaje de programación que se usará
  • El tipo de persistencia que se implementará para la rutina: temporal o persistente
  • El tipo de reutilización que se requiere para la rutina: en consultas únicas o múltiples
  • Consideraciones sobre el rendimiento
  • Acceso a servicios externos
  • Cómo compartir la rutina con los usuarios

Comparación de rutinas por tarea

En la siguiente tabla, se muestra el tipo de tareas que puedes realizar para cada tipo de rutina:

Tarea

Tipo de recurso de rutina

Crea funciones que realicen tareas de uso general en BigQuery.

UDF de SQL o JavaScript

UDAF de SQL o JavaScript

Crea funciones que realicen tareas de uso general en BigQuery y que se comuniquen con sistemas Google Cloud externos mediante una conexión de recursos de Cloud.

UDF de Python

Crea funciones que agreguen datos.

UDAF

Crea una tabla con parámetros.

Funciones de tabla

Crea funciones que usen lenguajes, bibliotecas o servicios que no sean compatibles con BigQuery. Estas funciones se integran directamente con Cloud Run functions y Cloud Run.

Funciones remotas

Ejecuta varias instrucciones en una consulta como una consulta de varias instrucciones con lenguaje de procedimiento. Puedes usar una consulta de varias instrucciones para hacer lo siguiente:

  • Ejecuta varias consultas en una secuencia, con estado compartido.
  • Automatiza las tareas de administración, como crear o descartar tablas
  • Implementa lógica compleja con construcciones de programación como IF y WHILE.

Crea y llama a procedimientos almacenados para Apache Spark en BigQuery.

Procedimientos almacenados

Funciones definidas por el usuario (UDF)

Una UDF te permite crear una función mediante una expresión de SQL, un código JavaScript o un código Python. Las UDF aceptan columnas de entrada, realizan acciones en la entrada y muestran el resultado de esas acciones como un valor.

Puedes definir una UDF como persistente o temporal. Puedes reutilizar las UDF persistentes en varias consultas, mientras que las UDF temporales solo existen en el alcance de una sola consulta.

Puedes crear UDF para usar con rutinas de enmascaramiento personalizadas, que muestran el valor de una columna después de aplicarle una UDF. Después de crear la rutina de enmascaramiento personalizada, estará disponible como una regla de enmascaramiento en Crea políticas de datos.

Para obtener más información sobre las UDF, consulta los siguientes recursos:

UDF basadas en lenguaje

UDF que aporta la comunidad

Además de las UDF que creas, las UDF que aporta la comunidad están disponibles en el bigquery-public-data.persistent_udfs conjunto de datos públicos y en el repositorio de GitHub de código abierto bigquery-utils.

Funciones de agregación definidas por el usuario (UDAF)

Una UDAF te permite crear una función de agregación mediante una expresión que contiene código SQL o JavaScript. Una UDAF acepta columnas de entrada, realiza un cálculo en un grupo de filas a la vez y, luego, muestra el resultado de ese cálculo como un valor único.

Las UDAF no pueden mutar datos, comunicarse con sistemas externos ni enviar registros a Google Cloud Observability o a aplicaciones similares.

Para obtener más información, consulta los siguientes recursos:

UDAF de SQL

Por lo general, las UDAF de SQL agregan parámetros de función de agregación en todas las filas de un grupo. Sin embargo, puedes especificar un parámetro de función como no agregado con la palabra clave NOT AGGREGATE. Un parámetro de función sin agregación es un parámetro de función escalar con un valor constante para todas las filas de un grupo. Las UDAF de SQL pueden contener parámetros agregados y no agregados.

UDAF de JavaScript

Las UDAF de JavaScript pueden incluir bibliotecas de JavaScript. El cuerpo de la función de JavaScript puede incluir código de JavaScript personalizado, como variables globales de JavaScript y funciones personalizadas.

Debido a que las funciones basadas en JavaScript suelen usar más recursos, consultar estas sugerencias de rendimiento puede ser útil.

Las UDAF de JavaScript tienen algunas restricciones. Solo se permiten codificaciones de tipos específicas, y existen requisitos para la serialización y deserialización.

Comparación entre UDF y UDAF

Elegir una UDF en lugar de una UDAF depende de la tarea específica que intentas realizar.

  • Para realizar un cálculo o una transformación en valores de datos individuales, usa una UDF.
  • Para hacer lo mismo en grupos de valores de datos, usa una UDAF.

Por ejemplo, si quieres calcular el promedio de una columna de números, usa una UDAF. Si quieres convertir una columna de cadenas a mayúsculas, usa una UDF.

Las UDF y las UDAF tienen las siguientes similitudes:

Las UDF y las UDAF tienen las siguientes diferencias:

Atributo

UDF

UDAF

Definición

Las funciones definidas por el usuario (UDF) aceptan columnas de entrada, realizan acciones en la entrada y muestran el resultado de esas acciones como un valor.

Las funciones de agregación definidas por el usuario (UDAF) aceptan columnas de entrada, realizan un cálculo en un grupo de filas a la vez y, luego, muestran el resultado de ese cálculo como un valor único.

Lenguajes compatibles

SQL, JavaScript y Python

SQL y JavaScript

Persistencia

  • Puede ser temporal o persistente.
  • Puedes usar UDF persistentes en varias consultas.
  • Puedes usar UDF temporales solo para una sola consulta.
  • Las UDF de Python solo pueden ser persistentes, no temporales.
  • Puede ser temporal o persistente.
  • Puedes usar UDAF persistentes en varias consultas.
  • Puedes usar UDAF temporales solo para una sola consulta, secuencia de comandos, sesión o procedimiento.
  • Es seguro llamar a las UDAF persistentes cuando se comparten entre propietarios.

Argumentos y tipos de datos

Las UDF aceptan valores de parámetros que cumplen con GoogleSQL para los tipos de datos de BigQuery. Algunos tipos de SQL tienen una asignación directa a los tipos de JavaScript, pero otros no. Consulta los tipos admitidos para JavaScript.

Para una UDF de SQL, los valores de los parámetros pueden ser ANY TYPE, que puede coincidir con más de un tipo de argumento cuando se llama a la función.

Solo las UDF de JavaScript tienen un especificador de determinismo que proporciona una sugerencia a BigQuery para decidir si el resultado de la consulta se puede almacenar en caché.

Las UDAF de SQL y JavaScript aceptan valores de parámetros que cumplen con GoogleSQL para los tipos de datos de BigQuery.

Los parámetros de función pueden ser agregados o no agregados.

Uso

Las UDF son de uso frecuente para la limpieza de datos, la transformación y la validación.

Las UDAF se usan comúnmente para calcular estadísticas de resumen, como promedios, sumas y recuentos.

Funciones de tabla

Una función de tabla, también llamada función con valor de tabla (TVF), es una UDF que muestra una tabla. Puedes usar una función de tabla en cualquier lugar en el que puedas usar una tabla. Las funciones de tabla se comportan de manera similar a las vistas, pero una función de tabla puede tomar parámetros.

Puedes hacer lo siguiente con las funciones de tabla:

  • Pasar varios parámetros
  • Llamar a una función de tabla en cualquier contexto en el que una tabla sea válida
  • Unir el resultado de una función de tabla con otra tabla
  • Usar una función de tabla en una subconsulta.

Para obtener más información sobre las funciones de tabla, consulta Funciones de tabla, Limitaciones, y Cuotas y límites.

Funciones remotas

Las funciones remotas te permiten implementar tu función en lenguajes que no sean SQL y JavaScript, o te permiten usar bibliotecas o servicios que no son compatibles con las UDF de BigQuery.

Una función remota de BigQuery integra tu función de GoogleSQL con las funciones de Cloud Run y Cloud Run con cualquier lenguaje compatible y, luego, invoca esas funciones desde consultas de GoogleSQL.

Las siguientes tareas son ejemplos de lo que puedes hacer con las funciones remotas:

Para crear una función remota, debes seguir estos pasos:

  1. Crea el extremo HTTP en las funciones de Cloud Run o Cloud Run.
  2. Crea una función remota en BigQuery con el tipo de conexión CLOUD_RESOURCE.
  3. Usa la función remota en una consulta como cualquier otra UDF para BigQuery.

Para obtener más información sobre las funciones remotas, consulta Funciones remotas, Limitaciones, y Cuotas y límites.

Procedimientos almacenados

Un procedimiento almacenado de SQL es un conjunto de instrucciones que se pueden llamar desde otras consultas o desde otros procedimientos almacenados. Debes nombrar y almacenar un procedimiento en un conjunto de datos de BigQuery.

Los procedimientos almacenados admiten declaraciones de lenguaje de procedimiento, que te permiten realizar variables como definir variables e implementar el flujo de control. Puedes obtener más información sobre las declaraciones de lenguaje de procedimiento en la referencia del lenguaje de procedimiento.

Un procedimiento almacenado puede hacer lo siguiente:

  • Tomar argumentos de entrada y mostrar valores como salida
  • Acceder a datos o modificarlos en varios conjuntos de datos por varios usuarios
  • Contener una consulta de varias instrucciones.

Algunos procedimientos almacenados están compilados en BigQuery y no necesitan crearse. Estos se llaman procedimientos del sistema, y puedes obtener más información sobre ellos en la referencia de procedimientos del sistema.

También se admiten los procedimientos almacenados para Spark en BigQuery también se admiten. Estos procedimientos tienen cuotas y límites.

Para obtener más información sobre los procedimientos almacenados, consulta Procedimientos almacenados de SQL.