Kolomgegevenstypen kiezen

Voltooid

Het kiezen van het juiste gegevenstype voor elke kolom is rechtstreeks van invloed op uw gegevenskwaliteit, opslagefficiëntie en queryprestaties. Wanneer u een ongepast type selecteert, loopt u het risico dat u precisie verliest, opslagruimte verspilt of bewerkingen blokkeert waarvoor specifieke typekenmerken zijn vereist. In deze les leert u hoe u uw gegevens evalueert en de meest geschikte kolomtypen selecteert in Azure Databricks.

Gegevenstypecategorieën begrijpen

Azure Databricks organiseert gegevenstypen in categorieën op basis van hun kenmerken en gebruiksvoorbeelden. Als u deze categorieën begrijpt, kunt u uw opties verfijnen bij het kiezen van een type voor een specifieke kolom.

Numerieke typen verwerken wiskundige waarden en berekeningen. U hebt verschillende opties:

Typecategorie Types Gebruiksituatie
Integraal TINYINT,SMALLINT,INT,BIGINT Gehele getallen van verschillende grootten
Decimal DECIMAL(p,s) Exacte precisie voor financiële gegevens
zwevendekomma FLOAT, DOUBLE Wetenschappelijke berekeningen met benadering

Datum-tijdtypen vertegenwoordigen tijdelijke gegevens:

Typologie Description
DATE Kalenderdatums zonder tijdonderdelen
TIMESTAMP Datum en tijd met sessietijdzone
TIMESTAMP_NTZ Datum en tijd zonder tijdzone

In tekst- en binaire typen worden tekens en bytereeksen opgeslagen:

  • STRING voor tekst met variabele lengte
  • BINARY voor onbewerkte bytereeksen

Complexe typen organiseren geneste of herhaalde gegevens:

  • ARRAY voor geordende reeksen elementen
  • MAP voor sleutel-waardeparen
  • STRUCT voor records met benoemde velden

Het juiste numerieke type selecteren

Voor numerieke gegevens is zorgvuldige typeselectie vereist, omdat verschillende typen verschillende precisie-, bereik- en opslagkenmerken hebben. Uw keuze is van invloed op zowel gegevensintegriteit als prestaties.

Voor gehele getallen koppel het type aan uw waardebereik.

Typologie Bereik Storage Veelvoorkomende gebruiksvoorbeelden
TINYINT -128 tot 127 1 byte Statuscodes, kleine tellers
SMALLINT -32.768 tot 32.767 2 bytes Jaarwaarden, beperkte reeksen
INT -2,1 miljard tot 2,1 miljard 4 bytes De meeste identificatoren, aantallen
BIGINT -9,2 kwintiljoen tot 9,2 kwintiljoen 8 bytes Grote id's, aantal rijen

Geef bij het maken van tabellen het juiste type op voor elke kolom:

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

Voor decimale getallen is de keuze tussen DECIMAL typen drijvende komma's afhankelijk van uw precisievereisten:

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

Belangrijk

Gebruik DECIMAL deze functie voor financiële gegevens waarbij exacte precisie belangrijk is. Drijvendekommatypen (FLOAT, DOUBLE) maken gebruik van binaire weergave en kunnen afrondingsfouten veroorzaken met base-10-waarden zoals valuta.

Tijdelijke typen correct kiezen

Tijdelijke selectie van gegevenstypen is afhankelijk van of u tijdzonebewustzijn nodig hebt en welk precisieniveau uw toepassing nodig heeft.

Gebruik DATE deze functie wanneer u alleen kalenderdatums zonder tijdonderdelen nodig hebt:

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

Kies voor tijdstempels tussen tijdzonebewuste en tijdzone-naïve typen:

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

Het TIMESTAMP type converteert waarden naar UTC voor opslag en past de tijdzone van de sessie toe bij het ophalen van waarden. Dit gedrag zorgt voor consistente volgorde in tijdzones, maar kan verwarring veroorzaken als u verwacht dat waarden ongewijzigd blijven.

Note

TIMESTAMP_NTZ is beschikbaar als openbare preview. Wanneer u een nieuwe Delta-tabel met een TIMESTAMP_NTZ kolom maakt, schakelt Azure Databricks de timestampNtz tabelfunctie in en werkt het tabelprotocol bij.

In het diagram wordt uitgelegd hoe tijdelijke typen correct worden gekozen.

Werken met complexe typen

Met complexe typen kunt u gestructureerde, geneste of herhaalde gegevens in één kolom opslaan. Ze zijn handig wanneer uw gegevens niet passen bij een plat relationeel model.

In het diagram wordt uitgelegd hoe u met complexe typen werkt.

Gebruik ARRAY dit wanneer u meerdere waarden van hetzelfde type hebt:

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

Gebruiken MAP voor sleutel-waardeparen met dynamische sleutels:

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

Gebruiken STRUCT wanneer u een vaste set benoemde velden hebt:

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

Aanbeveling

Complexe typen verminderen de behoefte aan extra tabellen en joins, maar ze maken ook enkele bewerkingen moeilijker. Houd rekening met uw querypatronen voordat u kiest tussen genormaliseerde tabellen en complexe typen.

Aanbevolen procedures voor typeselectie toepassen

Houd bij het evalueren van gegevens voor typeselectie rekening met de volgende praktische richtlijnen:

Diagram waarin aanbevolen procedures voor typeselectie worden uitgelegd.

Koppel het type aan de aard en het bereik van de gegevens. Gebruik dit niet BIGINT voor waarden die nooit meer dan duizend zijn. De extra bytes worden vermenigvuldigd met miljoenen rijen.

Houd rekening met null-baarheid. Als een kolom nooit null-waarden mag bevatten, documenteer dan deze beperking. Hoewel gegevenstypen standaard geen null-uitvoerbaarheid afdwingen, kunt u beperkingen toevoegen NOT NULL aan tabeldefinities.

Valideer typen tijdens opname. Binnenkomende gegevens vroeg in uw pijplijn naar het doeltype casten, helpt type-inconsistenties te detecteren voordat deze zich verder verspreiden.

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

Gebruik expliciete casts bij het converteren van typen. Impliciete conversies kunnen op de achtergrond slagen, zelfs wanneer gegevens verloren gaan. Expliciete casts maken uw intenties duidelijk en helpen bij het identificeren van problemen tijdens het testen.

Deze procedures helpen u bij het bouwen van pijplijnen waarbij gegevenstypen fungeren als een vorm van documentatie en validatie, waardoor fouten vroeg onderschept worden voordat ze invloed hebben op downstream-analyses.