Choisir des types de données de colonne
Conseil / Astuce
Pour plus d’informations, consultez l’onglet Texte et images !
Le choix du type de données approprié pour chaque colonne affecte directement la qualité des données, l’efficacité du stockage et les performances des requêtes. Lorsque vous sélectionnez un type inapproprié, vous risquez de perdre de la précision, de perdre de l’espace de stockage ou de bloquer les opérations qui nécessitent des caractéristiques de type spécifiques. Dans cette unité, vous allez apprendre à évaluer vos données et à sélectionner les types de colonnes les plus appropriés dans Azure Databricks.
Comprendre les catégories de types de données
Azure Databricks organise les types de données en catégories en fonction de leurs caractéristiques et de leurs cas d’usage. La compréhension de ces catégories vous permet de limiter vos options lors du choix d’un type pour une colonne spécifique.
Les types numériques gèrent les valeurs mathématiques et les calculs. Vous avez plusieurs options :
| Catégorie de type | Les types | Cas d’utilisation |
|---|---|---|
| Intégrale |
TINYINT, SMALLINTINT, BIGINT |
Nombres entiers de tailles variables |
| Decimal | DECIMAL(p,s) |
Précision exacte pour les données financières |
| Virgule flottante |
FLOAT, DOUBLE |
Calculs scientifiques avec approximation |
Les types date-heure représentent des données temporelles :
| Type | Descriptif |
|---|---|
DATE |
Dates de calendrier sans composants d’heure |
TIMESTAMP |
Date et heure avec fuseau horaire de session |
TIMESTAMP_NTZ |
Date et heure sans fuseau horaire |
Les types texte et binaire stockent des séquences de caractères et d’octets :
-
STRINGpour le texte de longueur variable -
BINARYpour les séquences d’octets brutes
Les types complexes organisent les données imbriquées ou répétées :
-
ARRAYpour les séquences ordonnées d’éléments -
MAPpour les paires clé-valeur -
STRUCTpour les enregistrements avec des champs nommés
Sélectionner le type numérique approprié
Les données numériques nécessitent une sélection de type minutieuse, car les différents types ont des caractéristiques de précision, de plage et de stockage différentes. Votre choix affecte à la fois l’intégrité des données et les performances.
Pour les nombres entiers, faites correspondre le type à votre plage de valeurs :
| Type | Plage | Storage | Cas d’utilisation courants |
|---|---|---|---|
TINYINT |
-128 à 127 | 1 octet | Codes d’état, petits compteurs |
SMALLINT |
-32 768 à 32 767 | 2 octets | Valeurs de l’année, plages limitées |
INT |
-2,1 milliards à 2,1 milliards | 4 octets | La plupart des identificateurs, nombres |
BIGINT |
-9,2 quintillions à 9,2 quintillions | 8 octets | ID volumineux, nombres de lignes |
Lors de la création de tables, spécifiez le type approprié pour chaque colonne :
CREATE TABLE orders (
order_id INT,
status_code TINYINT,
total_items SMALLINT,
transaction_id BIGINT
);
Pour les nombres décimaux, le choix entre DECIMAL les types à virgule flottante dépend de vos exigences de précision :
-- 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
);
Important
Utiliser DECIMAL pour les données financières où la précision exacte est importante. Les types à virgule flottante (FLOAT, DOUBLE) utilisent la représentation binaire et peuvent introduire des erreurs d’arrondi avec des valeurs de base 10 comme la devise.
Choisir correctement les types temporels
La sélection du type de données temporelle dépend de la nécessité d’une prise en charge du fuseau horaire et du niveau de précision requis par votre application.
Utilisez DATE quand vous avez uniquement besoin de dates de calendrier sans composants d’heure :
CREATE TABLE employees (
employee_id INT,
hire_date DATE,
birth_date DATE
);
Pour les horodatages, choisissez entre les types timezone-aware et timezone-naïve :
-- 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
);
Le TIMESTAMP type convertit les valeurs UTC pour le stockage et applique le fuseau horaire de session lors de la récupération des valeurs. Ce comportement garantit un classement cohérent entre les fuseaux horaires, mais peut entraîner une confusion si vous prévoyez que les valeurs restent inchangées.
Note
TIMESTAMP_NTZ est disponible en préversion publique. Lorsque vous créez une table Delta avec une colonne TIMESTAMP_NTZ, Azure Databricks active la fonctionnalité de table timestampNtz et met à niveau le protocole de table.
Utiliser des types complexes
Les types complexes vous permettent de stocker des données structurées, imbriquées ou répétées dans une seule colonne. Elles sont utiles lorsque vos données ne correspondent pas à un modèle relationnel plat.
Utilisez ARRAY quand vous avez plusieurs valeurs du même type :
-- 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;
Utiliser MAP pour les paires clé-valeur avec des clés dynamiques :
-- 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;
Utilisez STRUCT lorsque vous avez un ensemble fixe de champs nommés :
-- 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;
Conseil / Astuce
Les types complexes réduisent le besoin de tables et de jointures supplémentaires, mais ils rendent également certaines opérations plus difficiles. Prenez en compte vos modèles de requête avant de choisir entre les tables normalisées et les types complexes.
Appliquer les meilleures pratiques de sélection de type
Lors de l’évaluation des données pour la sélection de type, tenez compte des recommandations pratiques suivantes :
Faire correspondre le type à la nature et à la plage des données. N’utilisez pas BIGINT pour des valeurs qui ne dépassent jamais quelques milliers. Les octets supplémentaires se multiplient sur des millions de lignes.
Tenez compte de la nullabilité. Si une colonne ne doit jamais contenir de valeurs Null, documentez cette contrainte. Bien que les types de données n’appliquent pas la nullabilité par défaut, vous pouvez ajouter NOT NULL des contraintes aux définitions de table.
Validez les types pendant l’ingestion. Cassez les données entrantes vers le type cible tôt dans votre pipeline pour intercepter les incompatibilités de type avant qu’elles ne se propagent :
-- 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;
Utilisez des castings explicites lors de la conversion de types. Les conversions implicites peuvent réussir en mode silencieux même lorsque les données sont perdues. Les castings explicites rendent vos intentions claires et aident à identifier les problèmes pendant les tests.
Ces pratiques vous aident à créer des pipelines dans lesquels les types de données servent de forme de documentation et de validation, en interceptant les erreurs au début plutôt que de les laisser affecter l’analytique en aval.