Elegir tipos de datos de columna

Completados

Elegir el tipo de datos adecuado para cada columna afecta directamente a la calidad de los datos, la eficiencia del almacenamiento y el rendimiento de las consultas. Al seleccionar un tipo inadecuado, corre el riesgo de perder precisión, desperdiciar espacio de almacenamiento o operaciones de bloqueo que requieran características de tipo específicas. En esta unidad, aprenderá a evaluar los datos y a seleccionar los tipos de columna más adecuados en Azure Databricks.

Descripción de las categorías de tipos de datos

Azure Databricks organiza los tipos de datos en categorías en función de sus características y casos de uso. Comprender estas categorías le ayuda a reducir las opciones al elegir un tipo para una columna específica.

Los tipos numéricos controlan los valores matemáticos y los cálculos. Tiene varias opciones:

Categoría de tipo Tipos Caso de uso
Integral TINYINT, SMALLINT, , INT, BIGINT Números enteros de diferentes tamaños
Decimal DECIMAL(p,s) Precisión exacta de los datos financieros
Punto flotante FLOAT, DOUBLE Cálculos científicos con aproximación

Los tipos de fecha y hora representan datos temporales:

Tipo Description
DATE Fechas del calendario sin componentes de hora
TIMESTAMP Fecha y hora con zona horaria de sesión
TIMESTAMP_NTZ Fecha y hora sin zona horaria

Los tipos de texto y binarios almacenan secuencias de caracteres y bytes:

  • STRING para texto de longitud variable
  • BINARY para secuencias de bytes sin formato

Los tipos complejos organizan datos anidados o repetidos:

  • ARRAY para secuencias ordenadas de elementos
  • MAP para pares clave-valor
  • STRUCT para registros con campos con nombre

Seleccione el tipo numérico correcto.

Los datos numéricos requieren una selección cuidadosa de tipos porque los distintos tipos tienen diferentes características de precisión, intervalo y almacenamiento. Su elección afecta tanto a la integridad de los datos como al rendimiento.

Para números enteros, asocie el tipo de datos con su rango de valores.

Tipo Intervalo Storage Casos de uso comunes
TINYINT -128 a 127 1 byte Códigos de estado, pequeños contadores
SMALLINT -32.768 a 32.767 2 bytes Valores de año, intervalos limitados
INT -2.100 millones a 2.100 millones 4 bytes Mayoría de identificadores, recuentos
BIGINT -9,2 quintillón a 9,2 quintillón 8 bytes IDs grandes, conteo de filas

Al crear tablas, especifique el tipo adecuado para cada columna:

CREATE TABLE orders (
    order_id INT,
    status_code TINYINT,
    total_items SMALLINT,
    transaction_id BIGINT
);

Para los números decimales, la elección entre DECIMAL y los tipos de datos de punto flotante depende de los requisitos de precisión.

-- DECIMAL(p,s): exact precision for financial calculations
-- p = total digits, s = digits after decimal point
CREATE TABLE transactions (
    transaction_id INT,
    amount DECIMAL(10,2),         -- Exact: up to 99,999,999.99
    tax_rate DECIMAL(5,4)         -- Exact: up to 9.9999
);

-- DOUBLE: approximate, suitable for scientific calculations
CREATE TABLE measurements (
    sensor_id INT,
    temperature DOUBLE,           -- Approximate, large range
    pressure DOUBLE
);

Importante

Se usa DECIMAL para los datos financieros en los que importa la precisión exacta. Los tipos de punto flotante (FLOAT, DOUBLE) usan representación binaria y pueden introducir errores de redondeo con valores base-10 como moneda.

Elección de tipos temporales correctamente

La selección de tipos de datos temporales depende de si necesita reconocimiento de zona horaria y de qué nivel de precisión requiere la aplicación.

Use DATE cuando solo necesite fechas de calendario sin componentes de hora:

CREATE TABLE employees (
    employee_id INT,
    hire_date DATE,
    birth_date DATE
);

Para las marcas de tiempo, elija entre tipos con ajuste de zona horaria y sin ajuste de zona horaria.

-- TIMESTAMP: normalizes to UTC internally, applies session timezone on read
-- Use when tracking events across time zones
CREATE TABLE audit_log (
    log_id BIGINT,
    event_time TIMESTAMP,
    user_id INT
);

-- TIMESTAMP_NTZ: no timezone conversion
-- Use when the time should remain as entered
CREATE TABLE schedules (
    schedule_id INT,
    local_meeting_time TIMESTAMP_NTZ
);

El TIMESTAMP tipo convierte los valores en UTC para el almacenamiento y aplica la zona horaria de sesión al recuperar valores. Este comportamiento garantiza una ordenación coherente entre zonas horarias, pero puede causar confusión si espera que los valores permanezcan sin cambios.

Note

TIMESTAMP_NTZ está en versión preliminar pública. Al crear una nueva tabla Delta con una columna TIMESTAMP_NTZ, Azure Databricks habilita la característica de tabla timestampNtz y actualiza el protocolo de la tabla.

En el diagrama se explica cómo elegir los tipos temporales correctamente.

Trabajar con tipos complejos

Los tipos complejos permiten almacenar datos estructurados, anidados o repetidos dentro de una sola columna. Son útiles cuando los datos no se ajustan a un modelo relacional plano.

En el diagrama se explica cómo trabajar con tipos complejos.

Use ARRAY cuando tenga varios valores del mismo tipo:

-- Store a list of tags for each product
CREATE TABLE products (
    product_id INT,
    name STRING,
    tags ARRAY<STRING>
);

-- Query array elements
SELECT product_id, tags[0] AS primary_tag FROM products;

Use MAP para pares clave-valor con claves dinámicas:

-- Store flexible attributes as key-value pairs
CREATE TABLE devices (
    device_id INT,
    properties MAP<STRING, STRING>
);

-- Access map values by key
SELECT device_id, properties['firmware_version'] AS firmware FROM devices;

Úselo STRUCT cuando tenga un conjunto fijo de campos con nombre:

-- Store address as a structured type
CREATE TABLE customers (
    customer_id INT,
    address STRUCT<street: STRING, city: STRING, postal_code: STRING>
);

-- Access struct fields
SELECT customer_id, address.city FROM customers;

Sugerencia

Los tipos complejos reducen la necesidad de tablas y combinaciones adicionales, pero también dificultan algunas operaciones. Tenga en cuenta los patrones de consulta antes de elegir entre tablas normalizadas y tipos complejos.

Aplicar procedimientos recomendados de selección de tipos

Al evaluar los datos para la selección de tipos, tenga en cuenta estas directrices prácticas:

Diagrama que explica los procedimientos recomendados para la selección de tipos.

Asigna el tipo a la naturaleza y el rango de los datos. No use BIGINT para valores que nunca superen unos miles. Los bytes adicionales se multiplican por millones de filas.

Considere la nulabilidad. Si una columna nunca debe contener valores NULL, documente esta restricción. Aunque los tipos de datos no aplican la nulabilidad de forma predeterminada, puede agregar NOT NULL restricciones a las definiciones de tabla.

Valide los tipos durante la ingesta. Convierta los datos entrantes al tipo objetivo al principio de la canalización para detectar desajustes de tipo antes de que se propaguen.

-- Cast during data loading
INSERT INTO target_table
SELECT 
    CAST(raw_id AS INT) AS id,
    CAST(raw_amount AS DECIMAL(10,2)) AS amount,
    CAST(raw_date AS DATE) AS transaction_date
FROM staging_table;

Utiliza conversiones explícitas al convertir tipos. Las conversiones implícitas se pueden realizar correctamente de forma silenciosa incluso cuando se pierden los datos. Las conversiones explícitas hacen que sus intenciones sean claras y ayuden a identificar problemas durante las pruebas.

Estas prácticas le ayudan a crear tuberías de datos en las que los tipos de datos sirven como una forma de documentación y validación, detectando errores tempranamente en lugar de permitirles afectar a los análisis posteriores.