Auswählen von Spaltendatentypen
Die Auswahl des richtigen Datentyps für jede Spalte wirkt sich direkt auf Ihre Datenqualität, Speichereffizienz und Abfrageleistung aus. Wenn Sie einen unangemessenen Typ auswählen, riskieren Sie, dass Genauigkeit verloren geht, Speicherplatz verloren geht, oder Blockieren von Vorgängen, die bestimmte Typmerkmale erfordern. In dieser Lektion erfahren Sie, wie Sie Ihre Daten auswerten und die am besten geeigneten Spaltentypen in Azure Databricks auswählen.
Grundlegendes zu Datentypkategorien
Azure Databricks organisiert Datentypen basierend auf ihren Merkmalen und Anwendungsfällen in Kategorien. Wenn Sie diese Kategorien verstehen, können Sie Ihre Optionen beim Auswählen eines Typs für eine bestimmte Spalte eingrenzen.
Numerische Typen behandeln mathematische Werte und Berechnungen. Sie haben mehrere Optionen:
| Typkategorie | Typen | Anwendungsfall |
|---|---|---|
| Ganzzahlig |
TINYINT
SMALLINT
INT
BIGINT
|
Ganze Zahlen unterschiedlicher Größen |
| Decimal | DECIMAL(p,s) |
Genaue Genauigkeit für Finanzdaten |
| Gleitkomma |
FLOAT, DOUBLE |
Wissenschaftliche Berechnungen mit Annäherung |
Datum-Uhrzeit-Typen stellen zeitliche Daten dar:
| Typ | Description |
|---|---|
DATE |
Kalenderdaten ohne Zeitkomponenten |
TIMESTAMP |
Datum und Uhrzeit mit Sitzungstimezone |
TIMESTAMP_NTZ |
Datum und Uhrzeit ohne Zeitzone |
Text- und Binäre Typen speichern Zeichen- und Bytesequenzen:
-
STRINGfür Text mit variabler Länge -
BINARYfür unformatierte Bytesequenzen
Komplexe Typen organisieren geschachtelte oder wiederholte Daten:
-
ARRAYfür sortierte Sequenzen von Elementen -
MAPfür Schlüssel-Wert-Paare -
STRUCTfür Datensätze mit benannten Feldern
Auswählen des richtigen numerischen Typs
Numerische Daten erfordern eine sorgfältige Typauswahl, da unterschiedliche Typen unterschiedliche Genauigkeits-, Bereichs- und Speichereigenschaften aufweisen. Ihre Wahl wirkt sich sowohl auf die Datenintegrität als auch auf die Leistung aus.
Stimmen Sie für ganze Zahlen den Typ dem Wertbereich zu:
| Typ | Range | Storage | Gängige Anwendungsfälle |
|---|---|---|---|
TINYINT |
-128 bis 127 | 1 Byte | Statuscodes, kleine Zähler |
SMALLINT |
-32.768 bis 32.767 | 2 Bytes | Jahreswerte, begrenzte Wertebereiche |
INT |
-2,1 Mrd. bis 2,1 Mrd. | 4 Byte | Die meisten Bezeichner, Zählungen |
BIGINT |
-9,2 Quintillion bis 9,2 Quintillion | 8 Byte | Große IDs, Zeilenanzahl |
Geben Sie beim Erstellen von Tabellen den entsprechenden Typ für jede Spalte an:
CREATE TABLE orders (
order_id INT,
status_code TINYINT,
total_items SMALLINT,
transaction_id BIGINT
);
Bei Dezimalzahlen hängt die Auswahl zwischen DECIMAL und Gleitkommatypen von ihren Genauigkeitsanforderungen ab:
-- 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
);
Von Bedeutung
Verwenden Sie DECIMAL für Finanzdaten, bei denen Genauigkeit wichtig ist. Gleitkommatypen (FLOAT, DOUBLE) verwenden binäre Darstellung und können Rundungsfehler mit Basis-10-Werten wie Währungen einführen.
Richtige Auswahl von zeitlichen Typen
Die zeitliche Datentypauswahl hängt davon ab, ob Sie zeitzonenbewusst sind und welche Genauigkeit Ihre Anwendung benötigt.
Verwenden Sie DATE, wenn Sie nur Kalenderdaten ohne Zeitkomponenten benötigen.
CREATE TABLE employees (
employee_id INT,
hire_date DATE,
birth_date DATE
);
Wählen Sie für Zeitstempel zwischen zeitzonenfähigen und zeitzonennaiven Typen aus.
-- 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
);
Der TIMESTAMP Typ konvertiert Werte für den Speicher in UTC und wendet die Sitzungszeitzone beim Abrufen von Werten an. Dieses Verhalten stellt eine konsistente Reihenfolge über Zeitzonen hinweg sicher, kann jedoch Verwirrung verursachen, wenn Sie erwarten, dass Werte unverändert bleiben.
Note
TIMESTAMP_NTZ ist in Public Preview. Wenn Sie eine neue Delta-Tabelle mit einer TIMESTAMP_NTZ Spalte erstellen, aktiviert Azure Databricks das timestampNtz Tabellenfeature und aktualisiert das Tabellenprotokoll.
Arbeiten mit komplexen Typen
Mit komplexen Typen können Sie strukturierte, geschachtelte oder wiederholte Daten in einer einzelnen Spalte speichern. Sie sind nützlich, wenn Ihre Daten nicht in ein flaches relationales Modell passen.
Verwenden Sie ARRAY, wenn Sie mehrere Werte desselben Typs haben.
-- 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;
Verwenden Sie MAP für Schlüssel-Wert-Paare mit dynamischen Schlüsseln:
-- 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;
Verwenden Sie STRUCT, wenn Sie über einen festen Satz von benannten Feldern verfügen:
-- 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;
Tipp
Komplexe Typen verringern den Bedarf an zusätzlichen Tabellen und Verknüpfungen, machen aber auch einige Vorgänge schwieriger. Berücksichtigen Sie Ihre Abfragemuster, bevor Sie zwischen normalisierten Tabellen und komplexen Typen wählen.
Bewährte Methoden für die Typauswahl anwenden
Berücksichtigen Sie beim Auswerten von Daten für die Typauswahl die folgenden praktischen Richtlinien:
Stimmen Sie den Typ mit der Art und dem Bereich der Daten überein. Verwenden BIGINT Sie nicht für Werte, die nie ein paar Tausend überschreiten. Die zusätzlichen Bytes multiplizieren sich über Millionen von Zeilen.
Erwägen Sie die Nullbarkeit. Wenn eine Spalte niemals Nullwerte enthalten soll, dokumentieren Sie diese Einschränkung. Obwohl Datentypen standardmäßig keine Nullierbarkeit erzwingen, können Sie Tabellendefinitionen Einschränkungen hinzufügen NOT NULL .
Überprüfen von Typen während der Aufnahme. Wandeln Sie eingehende Daten frühzeitig in den Zieltyp um, um Typkonflikte abzufangen, bevor sie sich ausbreiten.
-- 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;
Verwenden Sie explizite Umwandlungen beim Konvertieren von Typen. Implizite Konvertierungen können auch dann im Hintergrund erfolgreich ausgeführt werden, wenn Daten verloren gehen. Explizite Umwandlungen machen Ihre Absichten klar und helfen bei der Identifizierung von Problemen während des Tests.
Diese Methoden helfen Ihnen beim Erstellen von Pipelines, bei denen Datentypen als Form von Dokumentation und Validierung dienen und Fehler frühzeitig abfangen, anstatt sie auf downstreame Analysen auswirken zu lassen.