Introducción a las rutinas
Crear rutinas en BigQuery te permite encapsular lógica compleja con funciones y procedimientos almacenados reutilizables. Elegir la rutina adecuada para tu carga de trabajo te permite agregar datos, automatizar tareas de administración y realizar integraciones en servicios externos directamente desde tus consultas de manera eficiente.
Rutinas compatibles
BigQuery admite las siguientes rutinas:
- Funciones definidas por el usuario (UDF)
- Funciones de agregación definidas por el usuario (UDAF)
- Funciones de tabla
- Funciones remotas
- Procedimientos almacenados
Cómo elegir una rutina
En esta sección, se describen los factores que se deben tener en cuenta cuando se elige una rutina y se comparan las rutinas por tarea.
Factores que se deben tener en cuenta
Para elegir una rutina, ten en cuenta los siguientes factores, que se describen en las secciones de cada tipo de rutina:
- Es el tipo de tarea que se implementará.
- Es el lenguaje de programación que se usará.
- Es 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 una o varias consultas.
- Consideraciones sobre el rendimiento
- Accede a servicios externos.
- Compartir la rutina con los usuarios
Compara las 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 externos de Google Cloud a través de una conexión a recursos de Cloud. |
UDF de Python |
Crear 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 en Cloud Run Functions y Cloud Run. |
Funciones remotas |
Ejecuta varias instrucciones en una consulta como una consulta de varias instrucciones con el lenguaje de procedimiento. Puedes usar una consulta de varias instrucciones para hacer lo siguiente:
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 con una expresión de SQL, código de JavaScript o código de Python. Las UDF aceptan columnas de entrada, realizan acciones en la entrada y devuelven 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 única consulta.
Puedes crear UDF para usar con rutinas de enmascaramiento personalizadas, que devuelven 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:
- Funciones definidas por el usuario
- Funciones definidas por el usuario en SQL heredado
- Compara las UDF y las UDAF
UDF basadas en lenguajes
- Las UDF basadas en SQL admiten parámetros de UDF con plantilla, que pueden coincidir con más de un tipo de argumento cuando se llama a la UDF. Las UDF de SQL también pueden mostrar el valor de una subconsulta escalar.
- Las UDF basadas en JavaScript te permiten llamar al código escrito en JavaScript desde una consulta
en SQL.
- Las UDF de JavaScript suelen consumir más recursos de ranuras en comparación con las consultas en SQL estándar, lo que disminuye el rendimiento del trabajo.
- Si la función se puede expresar en SQL, suele ser más óptimo ejecutar el código como un trabajo de consulta en SQL estándar.
- Las UDF basadas en Python se compilan y ejecutan en recursos administrados
de BigQuery. Estas UDF te permiten implementar una función en Python y usarla en una
consulta en SQL.
- Puedes acceder a un servicio de Google Cloud o a un servicio externo desde una UDF de Python con la cuenta de servicio de conexión a recursos de Cloud.
- También puedes instalar bibliotecas de terceros desde el índice de paquetes de Python (PyPI).
UDF aportadas por la comunidad
Además de las UDF que creas, las UDF que aporta la comunidad están disponibles en
el conjunto de datos públicos bigquery-public-data.persistent_udfs y en el
repositorio de GitHub bigquery-utils de código abierto.
Funciones de agregación definidas por el usuario (UDAF)
Una UDAF te permite crear una función de agregación con una expresión que contiene código de SQL o JavaScript. Una UDAF acepta columnas de entrada, realiza un cálculo en un grupo de filas a la vez y, luego, devuelve 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:
- Funciones de agregación definidas por el usuario
- Limitaciones
- Referencia de funciones de agregación de SQL
UDAF de SQL
Por lo general, las UDAF de SQL agregan 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 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, puede ser útil consultar estas sugerencias de rendimiento.
Las UDAF de JavaScript tienen algunas restricciones. Solo se permiten codificaciones de tipos específicas, y hay requisitos para la serialización y deserialización.
Compara las UDF y las UDAF
Elegir una UDF en lugar de una UDAF depende de la tarea específica que intentes 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 deseas calcular el promedio de una columna de números, usa una UDAF. Si deseas convertir una columna de cadenas en mayúsculas, usa una UDF.
Las UDF y las UDAF tienen las siguientes similitudes:
- Las UDF y las UDAF no pueden mutar datos, comunicarse con sistemas externos ni enviar registros a Google Cloud Observability o a aplicaciones similares. La excepción son las UDF de Python, que pueden acceder a servicios externos con una conexión a recursos de Cloud. Sin embargo, las UDF de Python no admiten los Controles del servicio de VPC ni las claves de encriptación administradas por el cliente (CMEK).
- Las UDAF tienen las mismas limitaciones que las UDF, además de algunas más.
- Las UDF y las UDAF tienen las mismas cuotas y límites.
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 devuelven 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, devuelven el resultado de ese cálculo como un valor único. |
Lenguajes compatibles |
SQL, JavaScript y Python |
SQL y JavaScript |
Persistencia |
|
|
Argumentos y tipos de datos |
Las UDF aceptan valores de parámetros que se ajustan a los tipos de datos de GoogleSQL para BigQuery. Algunos tipos de SQL se corresponden de forma directa con 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 Solo las UDF de JavaScript tienen un especificador de determinismo que proporciona una sugerencia a BigQuery sobre si el resultado de la consulta se puede almacenar en caché. |
Las UDAF 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 UDF se usan comúnmente para la limpieza, transformación y validación de datos. |
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 devuelve 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:
- Pasa varios parámetros.
- Llama 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
- Usa 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 usar bibliotecas o servicios que no se admiten en las UDF de BigQuery.
Una función remota de BigQuery integra tu función de Google SQL con Cloud Run Functions y Cloud Run con cualquier lenguaje compatible y, luego, invoca esas funciones desde consultas en SQL.
Las siguientes tareas son ejemplos de lo que puedes hacer con las funciones remotas:
Para crear una función remota, se deben seguir estos pasos:
- Crea el extremo HTTP en Cloud Run Functions o Cloud Run.
- Crea una función remota en BigQuery con el tipo de conexión
CLOUD_RESOURCE. - 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 en 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 sentencias de lenguaje de procedimiento, que te permiten realizar acciones 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:
- Toman argumentos de entrada y devuelven valores como salida.
- Acceder a los datos o modificarlos en varios conjuntos de datos de 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. Estos procedimientos tienen cuotas y límites.
Para obtener más información sobre los procedimientos almacenados, consulta Procedimientos almacenados de SQL.
Usa rutinas con agentes de IA
Si creas agentes de IA que funcionan con datos de BigQuery, los agentes pueden recuperar metadatos de rutinas de Knowledge Catalog, incluidos los argumentos, el tipo de datos que se devuelve y el código fuente de la rutina, para comprender qué hace una rutina y cómo llamarla. Para obtener más información, consulta Recupera el contexto de las rutinas.