Vitesse
Date est plus rapide que DateTime dans la plupart des cas.
Le type Date nécessite 2 octets de stockage, tandis que DateTime en nécessite 4. Cependant, lors de la compression, la différence de taille entre Date et DateTime devient plus marquée. Cela s’explique par le fait que les minutes et les secondes de DateTime se compressent moins bien. Le filtrage et l’agrégation sur Date plutôt que sur DateTime sont également plus rapides.
Remarques d’utilisation
DateTime sont affichées au format texte et la façon dont les valeurs spécifiées sous forme de chaînes sont interprétées ('2020-01-01 05:00:01').
Un Unix timestamp indépendant du fuseau horaire est stocké dans les tables, et le fuseau horaire sert à le convertir au format texte, ou inversement, lors de l’import/export des données, ou à effectuer des calculs calendaires sur les valeurs (par exemple : fonctions toDate, toHour, etc.). Le fuseau horaire n’est pas stocké dans les lignes de la table (ni dans le jeu de résultats), mais dans les métadonnées de la colonne.
La liste des fuseaux horaires pris en charge est disponible dans la base de données des fuseaux horaires IANA et peut également être obtenue avec SELECT * FROM system.time_zones. La liste est aussi disponible sur Wikipedia.
Vous pouvez définir explicitement un fuseau horaire pour les colonnes de type DateTime lors de la création d’une table. Exemple : DateTime('UTC'). Si aucun fuseau horaire n’est défini, ClickHouse utilise la valeur du paramètre timezone dans les paramètres du serveur ou dans les paramètres du système d’exploitation au moment du démarrage du serveur ClickHouse.
Le clickhouse-client applique par défaut le fuseau horaire du serveur si aucun fuseau horaire n’est explicitement défini lors de l’initialisation du type de données. Pour utiliser le fuseau horaire du client, exécutez clickhouse-client avec le paramètre --use_client_time_zone.
ClickHouse affiche les valeurs en fonction de la valeur du paramètre date_time_output_format. Le format texte YYYY-MM-DD hh:mm:ss est utilisé par défaut. Vous pouvez également modifier le format de sortie avec la fonction formatDateTime.
Lors de l’insertion de données dans ClickHouse, vous pouvez utiliser différents formats de chaînes de date et d’heure, selon la valeur du paramètre date_time_input_format.
Exemples
DateTime et insertion de données dans cette table :
- Lors de l’insertion d’une valeur datetime sous forme de nombre, elle est traitée comme un Unix timestamp (UTC) en secondes.
1546300800représente'2019-01-01 00:00:00'UTC. Cependant, comme le fuseau horaireAsia/Istanbul(UTC+3) est défini pour la colonnetimestamp, lors de l’affichage sous forme de chaîne, la valeur sera affichée comme'2019-01-01 03:00:00'. Un nombre comportant une partie fractionnaire ou un exposant est également accepté et tronqué aux secondes entières, conformément àCAST,toDateTimeet au formatValues. (Avant la version 26.8, un tel nombre fractionnaire ou avec exposant dans les chemins d’entréeJSONetValues/Quoted— ce dernier couvrant tous les formats qui analysent les champs avec la règle d’échappementQuoted:Values,MySQLDumpetTemplate/CustomSeparated/Regexpconfigurés avec l’échappement de champQuoted— n’était pas accepté par l’analyseur de flux ; définissezinput_format_read_datetime_number_as_raw_value = 1pour rétablir ce comportement. Dans le formatValueslui-même, un tel littéral fonctionnait toujours — et continue de fonctionner en mode de compatibilité — grâce au mécanisme de repli des expressions SQL, qui le lit comme un nombre de secondes. DansJSONExtractet le type de donnéesJSON, une valeur fractionnaire est analysée viaFloat64, de sorte qu’une valeur proche d’une limite de seconde entière peut être arrondie à la seconde adjacente, contrairement aux formats d’entrée par lignes qui tronquent exactement le texte d’origine. Les formats de texte séparés par des tabulations, CSV et autres formats de texte avec échappement ne sont pas régis par ce paramètre.) - Lors de l’insertion d’une valeur de type chaîne comme datetime, elle est traitée comme appartenant au fuseau horaire de la colonne.
'2019-01-01 00:00:00'sera interprété dans le fuseau horaireAsia/Istanbulet enregistré comme1546290000.
DateTime
DateTime peuvent être filtrées à l’aide d’une chaîne de caractères dans le prédicat WHERE. Celle-ci sera automatiquement convertie en DateTime :
DateTime :
Limites de la prise en charge des fuseaux horaires
Gestion de l’heure d’été (DST)
date_time_output_formatest défini sursimple.- Les horloges sont reculées (« retour à l’heure d’hiver »), ce qui provoque un chevauchement d’une heure.
- Les horloges sont avancées (« passage à l’heure d’été »), ce qui provoque un décalage d’une heure.
- Le 29 octobre 2023, à 02:00:00, les horloges sont reculées à 01:00:00 (BST → GMT).
- L’heure 01:00:00 – 01:59:59 apparaît deux fois (une fois en BST et une fois en GMT).
- ClickHouse choisit toujours la première occurrence (BST), ce qui entraîne des résultats inattendus lors de l’ajout d’intervalles de temps.
- Le 26 mars 2023, à
00:59:59, les horloges avancent directement à 02:00:00 (GMT → BST). - L’heure
01:00:00–01:59:59n’existe pas.
2023-03-26 01:30:00 à 2023-03-26 00:30:00.
Voir aussi
- Fonctions de conversion de type
- Fonctions de manipulation des dates et heures
- Fonctions de manipulation des tableaux
- Le paramètre
date_time_input_format - Le paramètre
date_time_output_format - Le paramètre de configuration du serveur
timezone - Le paramètre
session_timezone - Opérateurs pour manipuler les dates et heures
- Le type de données
Date