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:
- 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 debes tener en cuenta cuando elijas 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.
- Es el tipo de reutilización requerido para la rutina: en una o varias consultas.
- Consideraciones sobre el rendimiento
- Acceso a servicios externos
- Compartir la rutina con los usuarios
Compara 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 |
Crear funciones que agreguen datos |
UDAF |
Crea una tabla con parámetros. |
Funciones de tabla |
Crear funciones que usen lenguajes, bibliotecas o servicios que no son compatibles con BigQuery Estas funciones se integran directamente con las funciones de Cloud Run 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 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 mediante una expresión 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 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:
- Funciones definidas por el usuario
- Funciones definidas por el usuario en SQL heredado
- Compara UDF y UDAF
UDF basadas en el lenguaje
- 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 de 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 óptimo ejecutar el código como un trabajo de consulta de SQL estándar.
- Las UDF basadas en Python se compilan y ejecutan en recursos administrados por BigQuery. Estas UDF te permiten implementar una función en Python y usarla en una consulta SQL.
- Puedes acceder a un servicio Google Cloud o a un servicio externo desde una UDF de Python con la cuenta de servicio de conexión de recursos de Cloud.
- También puedes instalar bibliotecas de terceros desde el índice de paquetes de Python (PyPI).
UDF que aportó 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 agregada 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 la observabilidad de Google Cloud 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.
Dado 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íficos, 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 deseas calcular el promedio de una columna de números, usa una UDAF. Si deseas 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 no pueden mutar datos, comunicarse con sistemas externos ni enviar registros a la observabilidad de Google Cloud o a aplicaciones similares. La excepción son las UDF de Python, que pueden acceder a servicios externos mediante una conexión de recursos de Cloud. Sin embargo, las UDF de Python no admiten Controles del servicio de VPC ni 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 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 |
|
|
Argumentos y tipos de datos |
Las UDF aceptan valores de parámetros que se ajustan a GoogleSQL para los tipos de datos de BigQuery. Algunos tipos de SQL se corresponden de forma directa con tipos de JavaScript, pero otros no. Consulta los tipos compatibles 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 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 se ajustan a los tipos de datos de GoogleSQL para BigQuery. Los parámetros de la función pueden ser agregados o no. |
Uso |
Las UDF suelen usarse para la limpieza, transformación y validación de datos. |
Las UDAF se suelen usar 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:
- Pasa varios parámetros.
- Llama a una función de tabla en cualquier contexto en el que una tabla sea válida.
- Une 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 otros lenguajes que no sean SQL y JavaScript, o usar bibliotecas o servicios que no son compatibles con las UDF de BigQuery.
Una función remota de BigQuery integra tu función de Google SQL con funciones de Cloud Run y Cloud Run con cualquier lenguaje compatible y, luego, invoca esas funciones desde las consultas de Google SQL.
Las siguientes tareas son ejemplos de lo que puedes hacer con las funciones remotas:
Para crear una función remota, debes seguir estos pasos:
- Crea el extremo HTTP en las funciones de Cloud Run o en 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 a las que se puede 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 instrucciones de lenguaje de procedimiento, que te permiten realizar acciones como definir variables e implementar un 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 muestran valores como resultados.
- Varios usuarios pueden acceder a los datos o modificarlos en varios conjuntos de datos.
- Contiene una consulta de varias instrucciones.
Algunos procedimientos almacenados están compilados en BigQuery y no necesitan crearse. Estos se denominan 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.