Elegir tipos de datos de columna
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:
-
STRINGpara texto de longitud variable -
BINARYpara secuencias de bytes sin formato
Los tipos complejos organizan datos anidados o repetidos:
-
ARRAYpara secuencias ordenadas de elementos -
MAPpara pares clave-valor -
STRUCTpara 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.
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.
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:
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.