Escolher tipos de dados de coluna

Concluído(a)

Escolher o tipo de dados correto para cada coluna afeta diretamente a qualidade dos dados, a eficiência de armazenamento e o desempenho da consulta. Quando você seleciona um tipo inadequado, corre o risco de perder precisão, desperdiçar espaço de armazenamento ou bloquear operações que exigem características de tipo específicas. Nesta unidade, você aprenderá a avaliar seus dados e selecionar os tipos de coluna mais apropriados no Azure Databricks.

Entender categorias de tipo de dados

O Azure Databricks organiza tipos de dados em categorias com base em suas características e casos de uso. Entender essas categorias ajuda você a restringir suas opções ao escolher um tipo para uma coluna específica.

Os tipos numéricos lidam com valores matemáticos e cálculos. Você tem várias opções:

Categoria de tipo Tipos Caso de uso
Integral TINYINT, SMALLINT, , INTBIGINT Números inteiros de tamanhos variados
Decimal DECIMAL(p,s) Precisão exata para dados financeiros
Ponto flutuante FLOAT, DOUBLE Cálculos científicos com aproximação

Os tipos de data e hora representam dados temporais:

Tipo Description
DATE Datas de calendário sem componentes de hora
TIMESTAMP Data e hora com fuso horário da sessão
TIMESTAMP_NTZ Data e hora sem fuso horário

Tipos de texto e binário armazenam caracteres e sequências de bytes:

  • STRING para texto de comprimento variável
  • BINARY para sequências de bytes brutos

Tipos complexos organizam dados aninhados ou repetidos:

  • ARRAY para sequências ordenadas de elementos
  • MAP para pares chave-valor
  • STRUCT para registros com campos nomeados

Selecione o tipo numérico correto

Os dados numéricos exigem uma seleção de tipo cuidadosa porque diferentes tipos têm diferentes características de precisão, intervalo e armazenamento. Sua escolha afeta a integridade e o desempenho dos dados.

Para números inteiros, corresponda o tipo ao intervalo de valores:

Tipo Intervalo Armazenamento Casos de uso comuns
TINYINT -128 a 127 1 byte Códigos de status, contadores pequenos
SMALLINT -32.768 a 32.767 2 bytes Valores anuais, intervalos limitados
INT -2,1 bilhões a 2,1 bilhões 4 bytes A maioria dos identificadores, contagens
BIGINT -9.2 quintilhão a 9.2 quintilhão 8 bytes IDs grandes, contagens de linhas

Ao criar tabelas, especifique o tipo apropriado para cada coluna:

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

Para números decimais, a escolha entre DECIMAL os tipos de ponto flutuante depende de seus requisitos de precisão:

-- 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

Use DECIMAL para dados financeiros em que a precisão exata importa. Tipos de ponto flutuante (FLOAT, DOUBLE) usam representação binária e podem introduzir erros de arredondamento com valores base-10, como moeda.

Escolher tipos temporais corretamente

A seleção de tipo de dados temporais depende se você precisa de reconhecimento de fuso horário e de qual nível de precisão seu aplicativo requer.

Use DATE quando precisar apenas de datas de calendário sem componentes de hora:

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

Para carimbos de data/hora, escolha entre tipos com reconhecimento de fuso horário e tipos sem reconhecimento de fuso horário.

-- 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
);

O TIMESTAMP tipo converte valores em UTC para armazenamento e aplica o fuso horário de sessão ao recuperar valores. Esse comportamento garante uma ordenação consistente entre fusos horários, mas pode causar confusão se você espera que os valores permaneçam inalterados.

Note

TIMESTAMP_NTZ está em Visualização Pública. Quando você cria uma nova tabela Delta com uma coluna TIMESTAMP_NTZ, Azure Databricks habilita o recurso de tabela timestampNtz e atualiza o protocolo da tabela.

O diagrama explica a escolha correta dos tipos temporais.

Trabalhar com tipos complexos

Tipos complexos permitem armazenar dados estruturados, aninhados ou repetidos em uma única coluna. Eles são úteis quando seus dados não se encaixam em um modelo relacional simples.

Diagrama explica como trabalhar com tipos complexos.

Use ARRAY quando tiver vários valores do mesmo 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 chave-valor com chaves 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;

Use STRUCT quando você tiver um conjunto fixo de campos nomeados:

-- 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;

Dica

Tipos complexos reduzem a necessidade de tabelas e junções adicionais, mas também dificultam algumas operações. Considere seus padrões de consulta antes de escolher entre tabelas normalizadas e tipos complexos.

Aplicar práticas recomendadas de seleção de tipo

Ao avaliar dados para seleção de tipo, considere estas diretrizes práticas:

Diagrama explicando as práticas recomendadas para seleção de tipo.

Corresponda o tipo à natureza e ao intervalo dos dados. Não use BIGINT para valores que nunca excedam alguns milhares. Os bytes extra se multiplicam em milhões de linhas.

Considere a nulabilidade. Se uma coluna nunca deve conter valores nulos, documente essa restrição. Embora os tipos de dados não imponham a nulidade por padrão, você pode adicionar NOT NULL restrições às definições de tabela.

Validar tipos durante a ingestão. Converta dados de entrada no tipo de destino no início do pipeline para detectar incompatibilidades de tipo antes da sua propagação.

-- 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;

Use conversões explícitas ao converter tipos. As conversões implícitas podem ser bem-sucedidas silenciosamente mesmo quando os dados são perdidos. Conversões explícitas deixam suas intenções claras e ajudam a identificar problemas durante os testes.

Essas práticas ajudam você a criar pipelines em que os tipos de dados servem como uma forma de documentação e validação, capturando erros mais cedo em vez de permitir que eles afetem a análise downstream.