Kolomgegevenstypen kiezen
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:
-
STRINGvoor tekst met variabele lengte -
BINARYvoor onbewerkte bytereeksen
Complexe typen organiseren geneste of herhaalde gegevens:
-
ARRAYvoor geordende reeksen elementen -
MAPvoor sleutel-waardeparen -
STRUCTvoor 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.
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.
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:
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.