Introducción a las rutinas

En este documento se describe cómo elegir una rutina, que es un tipo de recurso que se usa 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 tener en cuenta al elegir una rutina y se comparan las rutinas por tarea.

Factores que debes tener en cuenta

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

  • El tipo de tarea que se va a implementar.
  • El lenguaje de programación que se va a usar.
  • El tipo de persistencia que se va a implementar en la rutina: temporal o persistente.
  • El tipo de reutilización que requiere la rutina: en una o varias consultas.
  • Consideraciones sobre el rendimiento.
  • Acceder a servicios externos.
  • Compartir la rutina con los usuarios.

Comparar rutinas por tarea

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

Tarea

Tipo de recurso de rutina

Crea funciones que realicen tareas generales en BigQuery.

UDF de SQL o JavaScript

UDAF de SQL o JavaScript

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

FDU de Python

Crea funciones que agreguen datos.

UDAFs

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 mediante lenguaje procedimental. Puedes usar una consulta de varias instrucciones para hacer lo siguiente:

  • Ejecuta varias instrucciones en una secuencia con un estado compartido.
  • Automatiza tareas de gestión, como crear o eliminar tablas.
  • Implementar lógica compleja mediante 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)

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

Puedes definir FDU persistentes o temporales. Las FDUs persistentes se pueden reutilizar en varias consultas, mientras que las FDUs temporales solo existen en el ámbito de una consulta.

Puede crear funciones definidas por el usuario para usarlas con rutinas de enmascaramiento personalizadas, que devuelven el valor de una columna después de aplicar una función definida por el usuario a la columna. Una vez que hayas creado la rutina de enmascaramiento personalizada, estará disponible como regla de enmascaramiento en Crear políticas de datos.

Para obtener más información sobre las funciones definidas por el usuario, consulta los siguientes recursos:

Funciones definidas por el usuario basadas en el lenguaje

  • Las UDFs basadas en SQL admiten parámetros de UDFs con plantillas, que pueden coincidir con más de un tipo de argumento cuando se llama a la UDF. Las funciones definidas por el usuario de SQL también pueden devolver el valor de una subconsulta escalar.
  • Las FDUs basadas en JavaScript te permiten llamar a código escrito en JavaScript desde una consulta SQL.
    • Las funciones definidas por el usuario en JavaScript suelen consumir más recursos de ranura que las consultas de SQL estándar, lo que reduce el rendimiento de las tareas.
    • Si la función se puede expresar en SQL, suele ser más óptimo ejecutar el código como una tarea de consulta de SQL estándar.
  • Las UDFs basadas en Python se compilan y ejecutan en recursos gestionados de BigQuery. Estas funciones definidas por el usuario te permiten implementar una función en Python y usarla en una consulta SQL.

Funciones definidas por el usuario aportadas por la comunidad

Además de las funciones definidas por el usuario que cree, puede usar las que haya aportado la comunidad en el bigquery-public-data.persistent_udfsconjunto de datos público y en el bigquery-utilsrepositorio de código abierto de GitHub.

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

Las funciones de agregación definidas por el usuario te permiten crear una función de agregación mediante una expresión que contiene código SQL o JavaScript. Una FUDA acepta columnas de entrada, realiza un cálculo en un grupo de filas a la vez y, a continuación, devuelve el resultado de ese cálculo como un único valor.

Las UDAFs no pueden modificar datos, comunicarse con sistemas externos ni enviar registros a Google Cloud Observability u otras aplicaciones similares.

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

UDAFs de SQL

Las UDAFs de SQL suelen agregar parámetros de función en todas las filas de un grupo. Sin embargo, puedes especificar un parámetro de función como no agregado mediante la palabra clave NOT AGGREGATE. Un parámetro de función no agregada es un parámetro de función escalar con un valor constante para todas las filas de un grupo. Las UDAFs de SQL pueden contener parámetros agregados y no agregados.

UDAFs de JavaScript

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

Como las funciones basadas en JavaScript suelen usar más recursos, puede ser útil consultar estos consejos sobre el rendimiento.

Las UDAFs de JavaScript tienen algunas restricciones. Solo se permiten codificaciones de tipo específico y hay requisitos para la serialización y deserialización.

Comparar funciones definidas por el usuario y funciones de agregación definidas por el usuario

Elegir una función definida por el usuario en lugar de una función de agregación definida por el usuario depende de la tarea específica que quieras realizar.

  • Para realizar un cálculo o una transformación en valores de datos concretos, usa una función definida por el usuario.
  • Para hacer lo mismo con grupos de valores de datos, usa una UDAF.

Por ejemplo, si quieres calcular la media de una columna de números, usa una UDAF. Si quieres convertir una columna de cadenas a mayúsculas, usa una función definida por el usuario.

Las funciones definidas por el usuario y las funciones de agregación definidas por el usuario tienen las siguientes similitudes:

  • Las funciones definidas por el usuario y las funciones de agregación definidas por el usuario no pueden modificar datos, comunicarse con sistemas externos ni enviar registros a Google Cloud Observability u otras aplicaciones similares. La excepción son las funciones definidas por el usuario de Python, que pueden acceder a servicios externos mediante una conexión de recursos de Cloud. Sin embargo, las UDFs de Python no admiten Controles de Servicio de VPC ni claves de cifrado gestionadas por el cliente (CMEK).
  • Las UDAFs tienen las mismas limitaciones que las UDFs, además de algunas más.
  • Las funciones definidas por el usuario y las funciones de agregación definidas por el usuario tienen las mismas cuotas y límites.

Las UDFs y las UDAFs tienen las siguientes diferencias:

Atributo

UDFs

UDAFs

Definición

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

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

Idiomas disponibles

SQL, JavaScript y Python

SQL y JavaScript

Persistencia

  • Puede ser temporal o persistente.
  • Puedes usar FDUs persistentes en varias consultas.
  • Solo puedes usar FDUs temporales en una consulta.
  • Las funciones definidas por el usuario de Python solo pueden ser persistentes, no temporales.
  • Puede ser temporal o persistente.
  • Puedes usar UDAFs persistentes en varias consultas.
  • Solo puedes usar UDAFs temporales en una consulta, secuencia de comandos, sesión o procedimiento.
  • Se pueden llamar a las UDAFs persistentes de forma segura cuando se comparten entre propietarios.

Argumentos y tipos de datos

Las funciones definidas por el usuario aceptan valores de parámetros que se ajustan a los tipos de datos de GoogleSQL para BigQuery. Algunos tipos de SQL se asignan directamente a tipos de JavaScript, pero otros no. Consulta los tipos admitidos de JavaScript.

En el caso de las funciones definidas por el usuario de SQL, los valores de los parámetros pueden ser ANY TYPE, lo que puede coincidir con más de un tipo de argumento cuando se llama a la función.

Solo las funciones definidas por el usuario de JavaScript tienen un especificador de determinismo que proporciona una pista a BigQuery sobre si se pueden almacenar en caché los resultados de la consulta.

Las UDAFs de SQL y JavaScript aceptan valores de parámetros que se ajustan a los tipos de datos de GoogleSQL para BigQuery.

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

Uso

Las UDFs se suelen usar para limpiar, transformar y validar datos.

Las UDAFs se suelen usar para calcular estadísticas de resumen, como medias, sumas y recuentos.

Funciones de tabla

Una función de tabla, también llamada función con valores de tabla (TVF), es una función definida por el usuario que devuelve una tabla. Puedes usar una función de tabla en cualquier lugar donde puedas usar una tabla. Las funciones de tabla se comportan de forma similar a las vistas, pero pueden aceptar parámetros.

Puedes hacer lo siguiente con las funciones de tabla:

  • Transfiere varios parámetros.
  • Llama a una función de tabla en cualquier contexto en el que sea válida una tabla.
  • Unir la salida 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 otros idiomas que no sean SQL ni JavaScript, o bien usar bibliotecas o servicios que no sean compatibles con las funciones definidas por el usuario de BigQuery.

Una función remota de BigQuery integra tu función de Google SQL con Cloud Run Functions y Cloud Run usando cualquier idioma compatible y, a continuación, invoca esas funciones desde consultas de Google SQL.

Estas son algunas de las tareas que puedes realizar con funciones remotas:

Para crear una función remota, sigue estos pasos:

  1. Crea el endpoint HTTP en Cloud Run Functions 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 igual que cualquier otra función definida por el usuario de 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 u otros procedimientos almacenados. Asigna un nombre a un procedimiento y lo almacenas en un conjunto de datos de BigQuery.

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

Un procedimiento almacenado puede hacer lo siguiente:

  • Toma argumentos de entrada y devuelve valores como salida.
  • Acceder a datos de varios conjuntos de datos o modificarlos por varios usuarios.
  • Contener una consulta con varias instrucciones.

Algunos procedimientos almacenados están integrados en BigQuery y no es necesario crearlos. Se denominan procedimientos del sistema y puedes consultar más información sobre ellos en la referencia de procedimientos del sistema.

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

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