¿Qué es el lenguaje de consulta de Hive? HiveQL Operatoros

⚡ Resumen inteligente

Hive Query Language proporciona los operadores que impulsan cada expresión HiveQL, agrupadosping Las dividen en familias relacionales, aritméticas, lógicas, de tipos complejos y de constructores que, en conjunto, abarcan la comparación, el cálculo y el acceso a datos anidados.

  • 🧮 Cinco familias de operadores: Los operadores relacionales, aritméticos, lógicos, de tipos complejos y constructores cubren todas las expresiones que necesita una consulta HiveQL.
  • 🔍 La comparación toma cualquier elemento primitivo: Los operadores relacionales aceptan todos los tipos primitivos, mientras que LIKE, RLIKE y REGEXP solo funcionan con cadenas de caracteres.
  • La aritmética incluye operaciones bit a bit: Además de las cuatro operaciones básicas, HiveQL ofrece operaciones AND, OR, XOR y NOT a nivel de módulo y a nivel de bits en tipos numéricos.
  • 🧩 Los datos anidados tienen su propia sintaxis: A[n] llega a un elemento de la matriz y M[key] llega a un valor del mapa, ambos utilizables en cualquier lugar donde se permita una expresión.
  • ???? ️ Los constructores crean valores complejos: Las funciones array(), map(), struct(), named_struct() y create_union() ensamblan columnas complejas dentro de una consulta.
  • 📚 Las funciones extienden los operadores: Las funciones matemáticas, de cadena, de fecha, condicionales, de colección y de agregación realizan tareas que ningún operador cubre.

¿Qué son los operadores del lenguaje de consulta de Hive (HiveQL)?

¿Qué es el lenguaje de consulta Hive (HiveQL)?

Hive Query Language (HiveQL) es un lenguaje de consulta en Colmena Apache Para el procesamiento y análisis de datos estructurados, Hive se distingue de la complejidad de la programación MapReduce. Reutiliza conceptos comunes de las bases de datos relacionales, como tablas, filas, columnas y esquemas, para facilitar el aprendizaje. Hive proporciona una interfaz de línea de comandos (CLI) para escribir consultas mediante el lenguaje de consulta de Hive (HiveQL).

La mayoría de las interacciones tienden a tener lugar a través de una interfaz de línea de comandos (CLI). Generalmente, la sintaxis de HiveQL es similar a la SQL Sintaxis con la que la mayoría de los analistas de datos están familiarizados. Los cuatro formatos de archivo mencionados en la documentación original de Hive son TEXTFILE, SEQUENCEFILE, ORC y RCFILE (Record Columnar File); las versiones actuales también leen y escriben Parquet y Avro, y ORC es el formato que se suele utilizar en la mayoría de las guías de optimización.

Hive utiliza una base de datos Derby integrada para el almacenamiento de metadatos de un solo usuario. Para implementaciones de metastore compartidas o multiusuario, Hive utiliza MySQL o bien otra base de datos relacional externa, ya que Derby solo permite una sesión a la vez.

HiveQL incorporado Operatoros

Hive proporciona operadores integrados para las operaciones de datos que se ejecutan sobre las tablas almacenadas en el almacén de Hive.

Estos operadores actúan sobre los operandos dentro de una expresión y devuelven un valor según la lógica aplicada, ya sea una comparación, un cálculo o una búsqueda en una columna anidada.

A continuación se muestran los principales tipos de operadores integrados en HiveQL:

  • Operadores relacionales
  • Operadores aritméticos
  • Operadores logicos
  • Operators en tipos complejos
  • Constructores de tipos complejos

Cada familia se trata en su propia sección a continuación, con la tabla completa de operadores para esa familia.

Relacional Operators en HiveQL

Utilizamos operadores relacionales para comparar relaciones entre dos operandos.

  • Operatérminos como igual a, distinto de, menor que y mayor que.
  • En estos operadores, todos los tipos de operandos son tipos primitivos, y los operadores de coincidencia de patrones solo aceptan cadenas de caracteres.

Cada operador relacional devuelve un valor booleano, razón por la cual estos operadores son la base de las cláusulas WHERE, las condiciones JOIN y las ramas CASE WHEN. La siguiente tabla ofrece detalles sobre los operadores relacionales y su uso en HiveQL:

Incorporado Operator Mareas Ideales para Lecciones Operand
X = Y VERDADERO si la expresión X es equivalente a la expresión Y. En caso contrario, FALSO. Se necesitan todos los tipos primitivos.
X != Y VERDADERO si la expresión X no es equivalente a la expresión Y. En caso contrario, FALSO. Se necesitan todos los tipos primitivos.
X < Y VERDADERO si la expresión X es menor que la expresión Y. En caso contrario, FALSO. Se necesitan todos los tipos primitivos.
X <= Y VERDADERO si la expresión X es menor o igual que la expresión Y. En caso contrario, FALSO. Se necesitan todos los tipos primitivos.
X > Y VERDADERO si la expresión X es mayor que la expresión Y. En caso contrario, FALSO. Se necesitan todos los tipos primitivos.
X >= Y VERDADERO si la expresión X es mayor o igual que la expresión Y. En caso contrario, FALSO. Se necesitan todos los tipos primitivos.
X ES NULO VERDADERO si la expresión X se evalúa como NULA, de lo contrario FALSO. Se necesita todo tipo
X NO ES NULO FALSO si la expresión X se evalúa como NULA, de lo contrario VERDADERO. Se necesita todo tipo
X ME GUSTA Y VERDADERO si el patrón de cadena X coincide con Y, de lo contrario FALSO. Solo toma cuerdas
X RL COMO Y NULL si X o Y es NULL, TRUE si alguna subcadena de X coincide con el Java expresión regular Y, de lo contrario FALSO. Solo toma cuerdas
X REGEXP Y Lo mismo que RLIKE. Solo toma cuerdas

Tenga en cuenta que una comparación con NULL nunca devuelve VERDADERO ni FALSO. Por eso, la tabla enumera IS NULL e IS NOT NULL como operadores separados, en lugar de esperar que X = NULL funcione.

Aritmética de HiveQL Operatoros

Utilizamos operadores aritméticos para realizar operaciones aritméticas con operandos.

  • Operaciones aritméticas como la suma, la restatracLas operaciones de ción, multiplicación y división entre operandos utilizan estos operadores.
  • Los tipos de operandos en estos operadores son todos tipos numéricos.

Ejemplo de muestra:

2 + 3 da como resultado 5.

En este ejemplo, '+' es el operador, 2 y 3 son los operandos, y el valor de retorno es 5.

La siguiente tabla proporciona detalles sobre los operadores aritméticos en el lenguaje de consulta de Hive:

Incorporado Operator Mareas Ideales para Lecciones Operand
X+Y Devolverá el resultado de sumar los valores X e Y. Se necesitan todos los tipos de números.
X-Y Devolverá la salida de subtracCalcular Y a partir del valor X. Se necesitan todos los tipos de números.
X * Y Devolverá el resultado de multiplicar los valores X e Y. Se necesitan todos los tipos de números.
X/Y Devolverá el resultado de dividir Y de X. Se necesitan todos los tipos de números.
X % Y Devolverá el resto resultante de dividir X entre Y. Se necesitan todos los tipos de números.
X e Y Devolverá la salida del AND bit a bit de X e Y. Se necesitan todos los tipos de números.
X | Y Devolverá la salida del OR bit a bit de X e Y. Se necesitan todos los tipos de números.
X^Y Devolverá la salida del XOR bit a bit de X e Y. Se necesitan todos los tipos de números.
~X Devolverá la salida del NOT bit a bit de X. Se necesitan todos los tipos de números.

Las últimas cuatro filas son aritméticas a nivel de bits en lugar de aritmética ordinaria: operan sobre la representación binaria de operandos enteros, por lo que &, | y ^ no son lo mismo que los operadores lógicos AND, OR y NOT que se tratan en la siguiente sección.

Lógica de HiveQL Operatoros

Utilizamos operadores lógicos para realizar operaciones lógicas sobre los operandos.

  • Las operaciones lógicas como AND, OR y NOT entre operandos utilizan estos operadores.
  • Los tipos de operandos en estos operadores son todos de tipo BOOLEAN.

La siguiente tabla proporciona detalles sobre los operadores lógicos en HiveQL:

de telecomunicaciones Mareas Ideales para Lecciones OperaNDS
X Y Y VERDADERO si tanto X como Y son VERDADEROS, de lo contrario FALSO. Sólo tipos booleanos
X && Y Igual que X Y Y, pero aquí usamos el símbolo &&. Sólo tipos booleanos
X O Y VERDADERO si X o Y o ambos son VERDADEROS, de lo contrario FALSO. Sólo tipos booleanos
X || Y Igual que X O Y, pero aquí usamos el símbolo ||. Sólo tipos booleanos
NO X VERDADERO si X es FALSO, de lo contrario FALSO. Sólo tipos booleanos
!X Igual que NOT X, pero aquí usamos el símbolo !. Sólo tipos booleanos

Dado que los operadores relacionales devuelven valores booleanos, los operadores lógicos son los que los combinan: un predicado como salary > 50000 AND dept = 'Sales' encadena una familia con la otra.

Operators sobre tipos complejos

Los operadores relacionales, aritméticos y lógicos trabajan con valores escalares únicos. Hive también almacena columnas de tipo array, map y struct, las cuales requieren un mecanismo diferente para acceder a sus elementos. La siguiente tabla detalla los operadores de tipos complejos, que proporcionan dicho mecanismo:

de telecomunicaciones OperaNDS Mareas Ideales para Lecciones
Un] A es una matriz y n es un tipo entero Devolverá el enésimo elemento del array A. El primer elemento tiene el índice 0.
M[tecla] M es un Map y la clave tiene tipo K Devolverá el valor correspondiente a la clave en el mapa.

Ambas formas son expresiones ordinarias, por lo que pueden aparecer en una lista SELECT, una cláusula WHERE o un GROUP BY, y se accede a un campo de estructura con la notación de punto, como S.field, en lugar de un corchete.

Constructores de tipos complejos

Mientras que los operadores anteriores leen una columna compleja existente, los constructores la crean. La siguiente tabla ofrece detalles sobre los constructores de tipos complejos, que crean instancias de los tipos de datos complejos (Array, Map y Struct) en Hive.

En esta sección, vamos a ver las operaciones que se realizan en los constructores de tipos complejos.

de telecomunicaciones OperaNDS Mareas Ideales para Lecciones
matriz (val1, val2,…) Creará una matriz con los elementos dados como se mencionó, como val1, val2.
crear_unión (etiqueta, val1, val2,…) Creará un tipo de unión con el valor al que hace referencia el parámetro de etiqueta.
mapa (clave1, valor1, clave2, valor2,…) Creará un mapa con los pares clave/valor dados que se mencionan en los operandos.
estructura_con_nombre (nombre1, val1, nombre2, val2,…) Creará una estructura con los nombres de campo y los valores especificados en los operandos.
struct (val1, val2, val3,…) Crea una estructura con los valores de campo especificados. Los nombres de los campos de la estructura serán col1, col2, etc.

Los constructores se utilizan con mayor frecuencia en una instrucción INSERT que rellena una columna compleja, o en una instrucción SELECT que agrupa varias columnas escalares en una sola estructura antes de escribir el resultado en otra tabla.

Funciones integradas de HiveQL

OperaLos tors cubren la comparación, el cálculo y el acceso a elementos, pero no redondean un número, recortan una cadena ni realizan sustituciones.tract dos fechas. Ese trabajo pertenece a las funciones integradas de Hive, que se llaman por su nombre dentro de las mismas expresiones en las que aparecen los operadores. La tabla a continuación agrupa las familias con las que se encuentra primero un principiante.

Familia de funciones Miembros típicos Para qué se utiliza
Matemático round(), floor(), ceil(), abs(), pow(), sqrt(), rand() Redondeo, potencias y otros cálculos numéricos sobre un único valor de columna.
Cordón concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() Limpieza, recorte y reacondicionamientoping texto antes de ser comparado o agrupado.
Fecha fecha_actual, año(), mes(), dateiff(), date_add(), marca_de_tiempo_unix() Extracdeterminar partes de la fecha y medir intervalos entre dos fechas.
Condicional if(), CASE WHEN, coalesce(), nvl(), isnull() Seleccionar un valor a nivel de fila y reemplazar NULL con un valor de reserva.
Colección tamaño(), claves_mapa(), valores_mapa(), array_contiene(), ordenar_array() Inspeccionando las columnas de array, mapa y estructura a las que llegan los operadores de tipo complejo.
Conversión de tipo cast(), binary() Forzar que una columna tenga el tipo que espera un operador.
Agregado (UDAF) count(), sum(), avg(), min(), max(), collect_set() Combinar varias filas en un solo valor, normalmente junto con GROUP BY.

La lista de funciones depende de la versión de Hive, por lo que conviene leerla desde la propia sesión en lugar de desde una página estática. Dos instrucciones hacen eso:

SHOW FUNCTIONS;

DESCRIBE FUNCTION round;

DESCRIBE FUNCTION EXTENDED round;

SHOW FUNCTIONS enumera todos los nombres registrados, DESCRIBE FUNCTION imprime la firma de una línea y la forma EXTENDED agrega ejemplos de uso donde la clase implementadora los proporciona. Cuando ninguna función integrada se ajusta, Hive acepta una función definida por el usuario escrito en Java.

HiveQL vs SQL: Diferencias clave

HiveQL toma prestada la sintaxis SQL deliberadamente, y las tablas de operadores anteriores resultarán familiares para cualquiera que haya escrito SQL. El modelo de ejecución subyacente no es el mismo, y las diferencias se hacen evidentes en cuanto una consulta va más allá de un simple SELECT.

Comportamiento ColmenaQL SQL tradicional (RDBMS)
Manejo de esquemas Esquema en lectura: el esquema se aplica cuando se consulta el archivo. Esquema en escritura: el esquema se aplica cuando se inserta la fila.
Actualizar y eliminar a nivel de fila Solo compatible con tablas ACID; las tablas administradas son ACID por defecto a partir de Hive 3.0. Compatible con todas las tablas de forma predeterminada.
Índices La compatibilidad con índices se eliminó en Hive 3.0 (HIVE-18448); los índices a nivel de archivo ORC o Parquet y las vistas materializadas lo reemplazan. El árbol B y otros índices secundarios son una característica fundamental.
Ejecución y latencia Compila en trabajos por lotes en Tez, MapReduce o Spark, por lo que incluso las consultas pequeñas conllevan un coste de puesta en marcha del trabajo. Ejecución interactiva, generalmente en milisegundos.
Objetivo de diseño Rendimiento en archivos muy grandes en HDFS o en un almacén de objetos. Lecturas y escrituras de baja latencia en un único servidor o clúster.

La consecuencia práctica para la escritura expresiva es pequeña, pero real. OperaLos operadores se comportan como se espera, pero un predicado que se respondería a partir de un índice en una base de datos relacional se responde en Hive mediante el escaneo de archivos, por lo que filtrar en una columna de partición suele ser mucho más útil que ajustar el operador en sí.

Preguntas Frecuentes

Las palabras clave, los operadores como AND o LIKE y los nombres de las funciones no distinguen entre mayúsculas y minúsculas, por lo que SELECT y select se comportan igual. Los datos de cadena no: al comparar 'Sales' con 'sales', se devuelve FALSE a menos que se aplique primero upper() o lower().

La operación X / Y siempre devuelve un DOUBLE, incluso cuando ambos operandos son enteros; por lo tanto, 7 / 2 da como resultado 3.5 en lugar de 3. Utilice la palabra clave DIV para la división entera y el operador % para el resto.

Los operadores aritméticos y de comparación propagan NULL: cualquier expresión que incluya NULL se evalúa como NULL, no como FALSE. Compruebe con IS NULL o IS NOT NULL, y utilice coalesce() o nvl() como alternativa antes de que el valor llegue a un operador.

LIKE utiliza comodines SQL, donde % coincide con cualquier secuencia de caracteres y _ coincide con una. RLIKE coincide con una Java Expresión regular aplicada a cualquier subcadena del valor. REGEXP es sinónimo de RLIKE y se comporta de forma idéntica.

Primero se aplican los operadores aritméticos, luego los de comparación, después NOT, luego AND y finalmente OR. Dado que el orden puede interpretarse erróneamente en predicados largos, se recomienda el uso de paréntesis siempre que AND y OR aparezcan en la misma cláusula.

Sí. Los operadores relacionales y lógicos forman condiciones de unión, los operadores aritméticos pueden producir grupos.ping Las claves y el acceso de tipo complejo, como M[clave], son válidos dondequiera que se permita una expresión, incluidas las listas SELECT, las cláusulas WHERE y ORDER BY.

Los asistentes de aprendizaje automático traducen un filtro de lenguaje simple en un predicado candidato y señalan las discrepancias de tipo, como comparar una columna de cadena con un número. Siempre confirme el operador generado con las tablas anteriores, porque los dialectos difieren entre Hive, Spark SQL y Presto.

Maneja bien los predicados comunes y sugiere patrones coalesce() o CASE WHEN a partir de un comentario breve. También incorpora sintaxis de otros motores, por lo que conviene verificar los operadores bit a bit, el acceso a tipos complejos y cualquier nombre de función con DESCRIBE FUNCTION antes de ejecutar la consulta.

Resumir este post con: