Configurez le fuseau horaire d'un projet MaxCompute à l'aide de la commande SET. Par défaut, MaxCompute utilise le fuseau UTC+8 pour tous les champs DATETIME, TIMESTAMP et DATE, ainsi que pour les fonctions temporelles natives associées.
Types de tâches pris en charge
La configuration du fuseau horaire s'applique aux types de tâches suivants :
MapReduce
-
Spark on MaxCompute
Les tâches soumises au cluster de calcul MaxCompute héritent automatiquement du fuseau horaire du projet.
Les tâches exécutées en mode client YARN (spark-shell, spark-sql ou pyspark) nécessitent une configuration supplémentaire du pilote. Dans le fichier
spark-defaults.conf, ajoutez l'optionspark.driver.extraJavaOptions -Duser.timezone=America/Los_Angelesen remplaçantAmerica/Los_Angelespar le fuseau horaire souhaité.
Machine Learning Platform for AI (PAI)
Graph
Configuration du fuseau horaire
MaxCompute prend en charge deux niveaux de configuration :
| Niveau | Qui peut le définir |
|---|---|
| Niveau session | Tout utilisateur |
| Niveau projet | Propriétaire du projet uniquement |
Définition du fuseau horaire pour une session
Soumettez la commande SET odps.sql.timezone=<timezoneid>; conjointement avec votre requête SQL.
-- Set the time zone to Asia/Tokyo for this session.
SET odps.sql.timezone=Asia/Tokyo;
Pour vérifier le fuseau horaire actif, exécutez la commande SELECT getdate(); :
SELECT getdate();
Résultat attendu :
+---------------------+
| _c0 |
+---------------------+
| 2018-10-30 23:49:50 |
+---------------------+
Définition du fuseau horaire pour un projet
Exécutez la commande suivante en tant que propriétaire du projet :
setProject odps.sql.timezone=<timezoneid>;
Après modification du fuseau horaire du projet, tous les calculs temporels utiliseront ce nouveau paramètre, y compris pour les données des tâches existantes. Afin de minimiser l'impact, configurez le fuseau horaire du projet uniquement lorsque cela est nécessaire et privilégiez cette opération lors de la création de nouveaux projets plutôt que sur des projets actifs.
Limitations et remarques d'utilisation
Format du fuseau horaire
Utilisez les noms de fuseaux horaires IANA, tels que Asia/Shanghai. N'utilisez pas le format de décalage GMT+9.
Le format GMT+N ne prend pas en charge l'heure d'été, ce qui peut entraîner des erreurs de calcul. Les noms de fuseaux horaires IANA gèrent automatiquement les changements d'heure et évitent toute ambiguïté.
Compatibilité SDK et clients
Les fonctions natives de date SQL, les fonctions définies par l'utilisateur (UDF), les types définis par l'utilisateur (UDT), les jointures définies par l'utilisateur (UDJ) et l'instruction
SELECT TRANSFORMpeuvent tous lire l'attribut de fuseau horaire du projet.Si le fuseau horaire configuré dans le SDK pour Java diffère de celui du projet, définissez le fuseau GMT dans le SDK afin de convertir correctement les données DATETIME en STRING.
Si votre fuseau horaire local n'est pas UTC+8 lors de la mise à jour de MaxCompute, mettez à jour le SDK pour Java et le client associé vers les versions portant le suffixe
-oversea. Cela garantit l'exactitude et la cohérence des résultats SQL et des données transférées via les commandes Tunnel pour les dates postérieures au 1er janvier 1900.
Différences historiques pour les données datetime
Après configuration d'un fuseau horaire autre que UTC+8, des écarts peuvent apparaître entre l'heure réelle et le résultat des instructions SQL exécutées dans DataWorks :
| Plage de dates | Écart temporel |
|---|---|
| Avant le 1er janvier 1900 | 9 secondes |
| Du 1er janvier 1900 au 1er janvier 1928 | 352 secondes |
Après mise à jour vers les versions avec le suffixe -oversea :
Les données DATETIME antérieures au 1er janvier 1900 peuvent encore présenter un écart allant jusqu'à 343 secondes.
Les données DATETIME antérieures au 1er janvier 1928, chargées avant la mise à jour, apparaîtront avec 352 secondes d'avance dans les nouvelles versions.
Sans mise à jour vers le suffixe -oversea :
Les résultats SQL peuvent différer des données transférées par les commandes Tunnel.
Avant le 1er janvier 1900 : écart de 9 secondes.
Du 1er janvier 1900 au 1er janvier 1928 : écart de 352 secondes.
Fuseau horaire de DataWorks
La modification du fuseau horaire du SDK pour Java ou du client n'affecte pas le fuseau horaire du serveur DataWorks. Évaluez l'impact sur vos tâches planifiées DataWorks. Fuseaux horaires des serveurs DataWorks par région :
| Région | Fuseau horaire |
|---|---|
| Japon (Tokyo) | GMT+9 |
| Singapour (Singapour) | GMT+8 |
Clients JDBC tiers
Si vous vous connectez à MaxCompute via un client tiers utilisant JDBC (Java Database Connectivity), configurez le fuseau horaire correspondant sur le client afin de maintenir la cohérence avec le serveur.