Välj kolumndatatyper
Tips/Råd
Mer information finns på fliken Text och bilder !
Om du väljer rätt datatyp för varje kolumn påverkas datakvaliteten, lagringseffektiviteten och frågeprestandan direkt. När du väljer en olämplig typ riskerar du att förlora precision, slösa lagringsutrymme eller blockera åtgärder som kräver specifika typegenskaper. I den här lektionen får du lära dig hur du utvärderar dina data och väljer de lämpligaste kolumntyperna i Azure Databricks.
Förstå kategorier för datatyper
Azure Databricks organiserar datatyper i kategorier baserat på deras egenskaper och användningsfall. Om du förstår de här kategorierna kan du begränsa dina alternativ när du väljer en typ för en specifik kolumn.
Numeriska typer hanterar matematiska värden och beräkningar. Du har flera alternativ:
| Typkategori | Types | Användningsfall |
|---|---|---|
| Integral |
TINYINT, SMALLINT, , INTBIGINT |
Heltal av varierande storlekar |
| Decimal | DECIMAL(p,s) |
Exakt precision för finansiella data |
| Flyttal |
FLOAT, DOUBLE |
Vetenskapliga beräkningar med uppskattning |
Datum-tidstyper representerar tidsdata:
| Typ | Description |
|---|---|
DATE |
Kalenderdatum utan tidskomponenter |
TIMESTAMP |
Datum och tid med sessionstidszon |
TIMESTAMP_NTZ |
Datum och tid utan tidszon |
Text- och binärtyper lagrar tecken och bytesekvenser:
-
STRINGför text med variabel längd -
BINARYför råbytesekvenser
Komplexa typer organiserar kapslade eller upprepade data:
-
ARRAYför ordnade sekvenser av element -
MAPför nyckel/värde-par -
STRUCTför poster med namngivna fält
Välj rätt numerisk typ
Numeriska data kräver noggrann typval eftersom olika typer har olika precisions-, intervall- och lagringsegenskaper. Ditt val påverkar både dataintegritet och prestanda.
För heltal matchar du typen med ditt värdeintervall:
| Typ | Räckvidd | Storage | Vanliga användningsfall |
|---|---|---|---|
TINYINT |
-128 till 127 | 1 byte | Statuskoder, små räknare |
SMALLINT |
-32 768 till 32 767 | 2 byte | Årsvärden, begränsade intervall |
INT |
-2,1 miljarder till 2,1 miljarder | 4 byte | De flesta identifierare, antal |
BIGINT |
-9,2 kvintiljoner till 9,2 kvintiljoner | 8 byte | Stora ID:ar, radantal |
När du skapar tabeller anger du lämplig typ för varje kolumn:
CREATE TABLE orders (
order_id INT,
status_code TINYINT,
total_items SMALLINT,
transaction_id BIGINT
);
För decimaltal beror valet mellan DECIMAL och flyttalstyper på dina precisionskrav:
-- 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
);
Viktigt!
Använd DECIMAL för finansiella data där exakt precision är viktigt. Flyttalstyper (FLOAT, DOUBLE) använder binär representation och kan orsaka avrundningsfel med decimala värden, som till exempel valuta.
Välj temporala typer korrekt
Valet av tidsdatatyp beror på om du behöver tidszonsmedvetenhet och vilken precision ditt program kräver.
Använd DATE när du bara behöver kalenderdatum utan tidskomponenter:
CREATE TABLE employees (
employee_id INT,
hire_date DATE,
birth_date DATE
);
För tidsstämplar väljer du mellan tidszonsmedvetna och tidszonsnaiva typer:
-- 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
);
Typen TIMESTAMP konverterar värden till UTC för lagring och tillämpar sessionstidszonen när värden hämtas. Det här beteendet säkerställer konsekvent ordning mellan tidszoner, men kan orsaka förvirring om du förväntar dig att värdena förblir oförändrade.
Note
TIMESTAMP_NTZ är i offentlig förhandsgranskning. När du skapar en ny Delta-tabell med en TIMESTAMP_NTZ kolumn aktiverar Azure Databricks tabellfunktionen timestampNtz och uppgraderar tabellprotokollet.
Arbeta med komplexa typer
Med komplexa typer kan du lagra strukturerade, kapslade eller upprepade data i en enda kolumn. De är användbara när dina data inte passar en platt relationsmodell.
Använd ARRAY när du har flera värden av samma typ:
-- 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;
Används MAP för nyckel/värde-par med dynamiska nycklar:
-- 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;
Använd STRUCT när du har en fast uppsättning namngivna fält:
-- 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;
Tips/Råd
Komplexa typer minskar behovet av ytterligare tabeller och kopplingar, men de gör också vissa åtgärder svårare. Tänk på dina frågemönster innan du väljer mellan normaliserade tabeller och komplexa typer.
Tillämpa metodtips för typval
När du utvärderar data för typval bör du tänka på följande praktiska riktlinjer:
Matcha typen med datans natur och intervall. Använd inte BIGINT för värden som aldrig överstiger några tusen. De extra byteen multipliceras över miljontals rader.
Överväg möjligheten till nullvärden. Om en kolumn aldrig ska innehålla null-värden dokumenterar du den här begränsningen. Även om datatyper inte framtvingar nullbarhet som standard kan du lägga till NOT NULL begränsningar i tabelldefinitioner.
Verifiera typer under inmatning. Skicka inkommande data till måltypen tidigt i pipelinen för att fånga typmatchningar innan de sprids:
-- 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;
Använd explicita typecasts när du konverterar typer. Implicita konverteringar kan lyckas tyst även när data går förlorade. Explicita avgjutningar gör dina avsikter tydliga och hjälper till att identifiera problem under testningen.
Dessa metoder hjälper dig att skapa pipelines där datatyper fungerar som en form av dokumentation och validering, vilket fångar fel tidigt i stället för att låta dem påverka nedströmsanalyser.