Auswählen von Spaltendatentypen

Abgeschlossen

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:

  • STRING für Text mit variabler Länge
  • BINARY für unformatierte Bytesequenzen

Komplexe Typen organisieren geschachtelte oder wiederholte Daten:

  • ARRAY für sortierte Sequenzen von Elementen
  • MAP für Schlüssel-Wert-Paare
  • STRUCT fü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.

Im Diagramm wird erläutert, welche zeitlichen Typen richtig ausgewählt werden.

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.

Diagramm erläutert das Arbeiten mit komplexen Typen.

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:

Diagramm, in dem bewährte Methoden für die Typauswahl erläutert werden.

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.