Tipos de datos de Hive: cómo crear y eliminar bases de datos en Hive

⚡ Resumen inteligente

Los tipos de datos de Hive definen qué puede contener cada columna de una tabla, y los comandos CREATE DATABASE y DROP DATABASE configuran o eliminan el espacio de nombres en el que residen esas tablas dentro del metastore de Hive.

  • 🔢 Tipos numéricos: TINYINT a BIGINT cubren números enteros, mientras que DECIMAL(precisión, escala) mantiene valores exactos que FLOAT y DOUBLE no pueden.
  • 🔤 Tipos de cadena: STRING no tiene límite declarado, VARCHAR acepta de 1 a 65535 caracteres y CHAR tiene un límite máximo de 255.
  • ???? Fecha y hora: DATE almacena un valor simple AAAA-MM-DD y TIMESTAMP añade precisión de nanosegundos opcional.
  • 🧩 Tipos complejos: ARRAY, MAP, STRUCT y UNIONTYPE agrupan varios valores relacionados en una sola columna en lugar de en muchas.
  • ???? ️ Crear una base de datos: El comando CREATE DATABASE registra un espacio de nombres en el metastore, y el comando SHOW DATABASES confirma que existe.
  • 🗑️ Eliminar una base de datos: DROP DATABASE elimina el espacio de nombres, y CASCADE es necesario siempre que haya tablas dentro de él.

Tipos de datos de Hive y cómo crear y eliminar bases de datos en Hive.

Los tipos de datos son elementos muy importantes en el lenguaje de consulta y el modelado de datos de Hive. Para definir los tipos de columnas de una tabla, debemos conocer los tipos de datos y su uso.

A continuación se ofrece una breve descripción general de algunos tipos de datos presentes en Hive:

  • Tipos numéricos
  • Tipos de cadenas
  • Tipos de fecha/hora
  • Tipos complejos

Tipos de datos en Hive

Cada columna de Hive se declara con uno de los siguientes tipos. Primero se incluyen las familias primitivas, seguidas de los tipos complejos que almacenan más de un valor en una sola columna.

Tipos de datos numéricos de Hive

Las columnas numéricas varían desde un byte hasta ocho bytes, por lo que elegir el tipo más pequeño que se ajuste a los valores reduce tanto el almacenamiento como el coste de escaneo.

Tipo Asignación de memoria
PEQUEÑO Entero con signo de 1 bytes (-128 a 127)
SMALLINT Entero con signo de 2 bytes (-32,768 a 32,767)
INT Entero con signo de 4 bytes (-2,147,483,648 a 2,147,483,647)
EMPEZANDO Entero con signo de 8 bytes (-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807)
FLOAT Número de punto flotante de precisión simple de 4 bytes
DOBLE Número de punto flotante de doble precisión de 8 bytes
DECIMAL Podemos definir la precisión y la escala en este tipo como DECIMAL(precisión, escala). Cuando se omiten, Hive usa DECIMAL(10,0).

Tipos de datos de cadenas de colmena

Las columnas de caracteres vienen en tres formas, y la diferencia radica en si Hive impone o no una longitud declarada.

Tipo Longitud Mínima
CHAR Longitud fija, hasta 255 caracteres. Los valores más cortos se rellenan con espacios.
VARCHAR De 1 a 65,535 caracteres. Un valor mayor se trunca silenciosamente.
CADENA Aquí podemos definir la longitud (sin límite).

Tipos de datos de fecha/hora de Hive

Las columnas temporales se almacenan sin ningún desfase horario, lo cual conviene recordar antes de comparar valores escritos por diferentes clústeres.

Tipo Uso
Timestamp Soporta tradicional Unix marca de tiempo con precisión de nanosegundos opcional
Fecha Está en formato AAAA-MM-DD.
El rango de valores admitidos para el tipo Fecha es de 0000-01-01 a 9999-12-31, dependiendo de la compatibilidad con la primitiva. Java Tipo de fecha

Tipos de datos varios de Hive

Existen otros dos tipos de datos primitivos que quedan fuera de las familias numérica, de cadenas de caracteres y de fechas, pero que aparecen con regularidad en los esquemas reales.

Tipo Uso
Booleano Almacena verdadero o falso
BINARIO Almacena una matriz de bytes, lo que evita que el contenido sin procesar se almacene en una columna STRING.

Tipos de datos complejos de Hive

Los tipos complejos anidan valores dentro de una misma columna, lo que elimina la unión adicional que requeriría un diseño relacional.

Tipo Uso
Matrices ARRAY
No se permiten valores negativos ni expresiones no constantes.
Mapas MAP
No se permiten valores negativos ni expresiones no constantes.
Estructuras ESTRUCTURA
Union TIPO DE UNIÓN

Ejemplo de tipos de datos complejos de Hive

La tabla anterior muestra la forma de declaración. La instrucción siguiente coloca tres de los tipos complejos en una sola tabla para que las cláusulas delimitadoras y la sintaxis de acceso puedan visualizarse conjuntamente.

CREATE TABLE employees (
  name      STRING,
  skills    ARRAY<STRING>,
  deductions MAP<STRING, FLOAT>,
  address   STRUCT<street:STRING, city:STRING, pin:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

Aquí se necesitan tres delimitadores distintos: uno entre columnas, otro entre los elementos de un ARRAY o STRUCT, y un tercero entre la clave de un MAP y su valor. Una vez que existe la tabla, cada columna compleja se lee con su propio método de acceso.

SELECT name, skills[0], deductions['tax'], address.city
FROM employees;

La tabla que aparece a continuación resume a qué tipo pertenece cada accesor.

Tipo Cómo se lee un valor
FORMACIÓN Índice basado en cero, como skills[0]
MAPA Búsqueda de claves entre corchetes, como por ejemplo deducciones['impuestos']
ESTRUCTURA Notación de puntos en el nombre del campo, como dirección.ciudad
TIPO DE UNIÓN Se usa poco porque el soporte para consultas sigue siendo incompleto.

Los tipos complejos pueden estar anidados, por lo que ARRAY > es una declaración de columna válida. Una vez que se establece el diseño de las columnas, las tablas se construyen con las instrucciones cubiertas en Tabla de creación, modificación y eliminación de Hive.

Cómo crear y eliminar bases de datos en Hive

En Hive, una base de datos es simplemente un espacio de nombres que agrupa tablas, por lo que es el primer objeto que se crea antes de comenzar cualquier operación con tablas. A continuación, se describen los pasos para crear y eliminar bases de datos en Hive.

Paso 1) Crear base de datos en Hive

Para crear una base de datos en la consola de Hive, debemos usar el comando como se muestra en la sintaxis a continuación:

Sintaxis:

Create database <DatabaseName>

Ejemplo: Crear base de datos “guru99”

La captura de pantalla que aparece a continuación muestra la instrucción CREATE seguida de un comando SHOW que lista todas las bases de datos del clúster.

Hive shell creando la base de datos guru99 y listando las bases de datos con show

En la captura de pantalla anterior, estamos haciendo dos cosas:

  1. Creando la base de datos “guru99” en Hive
  2. Visualización de bases de datos existentes mediante el comando “show”.

En la misma pantalla, al ejecutar el comando show se muestra al final la base de datos "guru99", lo que significa que la base de datos "guru99" se ha creado correctamente.

Paso 2) Eliminar la base de datos en Hive

Para la caídaping Para acceder a una base de datos en la consola de Hive, debemos usar el comando "drop" como se muestra en la sintaxis a continuación:

Sintaxis:

Drop database <DatabaseName>

Ejemplo: Eliminar la base de datos guru99

En la siguiente captura de pantalla, la instrucción DROP se ejecuta primero, y el comando Show que le sigue ya no muestra la base de datos.

Caída de caparazón de colmenaping la base de datos guru99 y confirmando la eliminación con show

En la captura de pantalla anterior, estamos haciendo dos cosas:

  1. Somos dropping base de datos 'guru99' de Hive
  2. Comprobando lo mismo con el comando “show”.

En la misma pantalla, tras comprobar las bases de datos con el comando show, la base de datos “guru99” no aparece en Hive. Por lo tanto, podemos confirmar que la base de datos “guru99” se ha eliminado.

Comandos de la base de datos Hive: USE, DESCRIBE, SHOW y ALTER DATABASE

Las dos declaraciones anteriores utilizan su forma más breve. La sintaxis documentada incluye cláusulas opcionales que determinan dónde se guardan los archivos y qué sucede cuando el nombre ya está en uso.

CREATE DATABASE [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];

Las palabras clave DATABASE y SCHEMA son intercambiables, por lo que CREATE SCHEMA y CREATE DATABASE realizan exactamente la misma función. Los comandos restantes completan el trabajo diario con un espacio de nombres.

Comando ¿Qué hace?
MOSTRAR BASES DE DATOS; Enumera todas las bases de datos registradas en el metastore.
USE nombre_de_la_base_de_datos; Establece la base de datos actual para que los nombres de las tablas no necesiten prefijo.
DESCRIBIR LA BASE DE DATOS nombre_de_la_base_de_datos; Informa el comentario, la ubicación HDFS y el propietario.
DESCRIBE DATABASE EXTENDED database_name; Agrega los pares clave-valor de DBPROPERTIES a esa salida.
ALTER DATABASE nombre_de_la_base_de_datos ESTABLECER PROPIEDADES_DE_LA_BASE_DE_DATOS (…); Agrega o reemplaza propiedades de metadatos
ALTER DATABASE nombre_de_base_de_datos ESTABLECER PROPIETARIO USUARIO nombre_de_usuario; Transfiere la propiedad a otro usuario o rol.
ALTER DATABASE nombre_base_de_datos ESTABLECER UBICACIÓN ruta_hdfs; Cambia la ruta utilizada por las tablas creadas a partir de ese momento.

Hay dos valores predeterminados que conviene memorizar. Sin una cláusula LOCATION, los archivos se ubican en el directorio del almacén, normalmente /user/hive/warehouse/database_name.db, y sin IF EXISTS, una eliminación contra un nombre inexistente genera un error en lugar de pasar silenciosamente. Ambas configuraciones se almacenan en el Metastore de Hive.

Conversión de tipos de datos de Hive y errores comunes

Los tipos no siempre se utilizan exactamente como se declaran. Hive amplía automáticamente un valor cuando no se puede perder información y deja todo lo demás a una conversión explícita.

  • La ampliación implícita sigue la cadena TINYINT a SMALLINT a INT a BIGINT a FLOAT a DOUBLE, y una STRING que contiene dígitos se convierte en DOUBLE.
  • La reducción de tamaño nunca se produce por sí sola, por lo que un valor DOUBLE asignado a una columna INT necesita una conversión escrita.
  • CAST realiza esa conversión escrita y devuelve NULL en lugar de un error cuando el valor no se puede convertir.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

Los errores que se describen a continuación explican la mayoría de las sorpresas con las que se encuentran los principiantes en su primer esquema.

Síntoma Causa y solución
La eliminación falla mientras la base de datos aún contiene tablas. RESTRICT es el valor predeterminado. Agregue CASCADE para eliminar las tablas con él.
Una cuerda larga llega acortada VARCHAR trunca silenciosamente su longitud declarada. Use STRING cuando no se desee ningún límite.
Una columna se lee como NULL después de una conversión. CAST no pudo analizar el valor. Compruebe los datos de origen antes de ampliar el tipo.
El valor de las monedas pierde su paise o centavos. DECIMAL sin argumentos significa DECIMAL(10,0). Indique la escala explícitamente.
Dos fechas de aspecto idéntico nunca coinciden. Una fecha de tipo STRING y una columna de tipo DATE son de tipos diferentes. Convierta un lado antes de comparar.

Una vez que los tipos se comportan correctamente, el siguiente paso es cargar y consultar los datos en sí, lo cual se cubre en Consultas de Hive con Ordenar por, Agrupar por y Cluster By.

Preguntas Frecuentes

No. DATABASE y SCHEMA son palabras clave intercambiables en HiveQL, por lo que CREATE SCHEMA sales y CREATE DATABASE sales generan el mismo objeto metastore. La elección es simplemente una cuestión de estilo de la empresa.

En el directorio del almacén, normalmente /user/hive/warehouse/database_name.db en HDFS. Una cláusula LOCATION en CREATE DATABASE sobrescribe esa ruta, y DESCRIBE DATABASE informa la ubicación que se utilizó realmente.

STRING es la opción habitual porque no tiene límite declarado y no necesita relleno. VARCHAR es útil cuando se debe imponer una longitud, y CHAR es adecuado para códigos cortos de ancho fijo, como las abreviaturas de países.

DOUBLE utiliza coma flotante binaria, por lo que las sumas repetidas varían en fracciones de centavo. DECIMAL almacena valores exactos con una precisión y escala determinadas, lo que garantiza que los totales financieros sean reproducibles en distintas ejecuciones.

Un TIMESTAMP simple no tiene zona horaria y se lee exactamente como se escribió. Hive 3.1 agregó TIMESTAMP WITH LOCAL TIME ZONE, que normaliza el valor a UTC al escribirlo y lo convierte al leerlo.

Sí. Una ESTRUCTURA puede estar dentro de un ARRAY y un valor MAP puede ser en sí mismo una ESTRUCTURA, por lo que ARRAY > es válido en ColmenaEl anidamiento profundo complica los delimitadores, así que manténgalo superficial.

Sí. Las herramientas de análisis de datos toman muestras de cardinalidad, tasas de valores nulos y rangos de valores, y luego sugieren el tipo de archivo más adecuado y un formato de archivo. Considere la sugerencia como un borrador, ya que el modelo no puede prever cargas de trabajo futuras.

Copilot genera sentencias CREATE TABLE y CREATE DATABASE a partir de un comentario breve, y los asistentes de Agentic pueden convertir un archivo de ejemplo en un esquema. Siempre verifique la escala DECIMAL y las cláusulas delimitadoras antes de ejecutar el resultado.

Resumir este post con: