Ma table dans Hive a un fichier de date au format '2016/06/01'. mais je trouve que ce n'est pas inoffensif avec le format de '2016-06-01'. Ils ne peuvent pas comparer par exemple. Les deux sont des chaînes. Je veux donc savoir comment les rendre inoffensifs et pouvoir les comparer. Ou d'autre part, comment changer le '2016/06/01' en '2016-06-01' afin qu'ils puissent se comparer.
Merci beaucoup.
Pour convertir une chaîne de date d'un format à un autre, vous devez utiliser la fonction à deux dates de Hive
unix_timestamp(string date, string pattern)
convertit la chaîne de temps avec le modèle donné en horodatage unix (en secondes), retourne 0 en cas d'échec.from_unixtime(bigint unixtime[, string format])
convertit le nombre de secondes de Unix Epoch (1970-01-01 00:00:00 UTC) en une chaîne représentant l'horodatage de ce moment dans le fuseau horaire actuel du système.En utilisant les deux fonctions ci-dessus, vous pouvez obtenir le résultat souhaité.
L'échantillon d'entrée et de sortie peut être vu de l'image ci-dessous:
La dernière requête est
select from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyy-MM-dd') from table1;
où table1 est le nom de la table présente dans ma base de données Hive.
J'espère que cela vous aidera !!!
Utilisation :
unix_timestamp(DATE_COLUMN, string pattern)
La commande ci-dessus aiderait à convertir la date au format d'horodatage Unix que vous pouvez formater comme vous le souhaitez à l'aide de Simple Date Function .
cast(to_date(from_unixtime(unix_timestamp(yourdate , 'MM-dd-yyyy'))) as date)
Supposons que vous ayez une colonne 'birth_day' dans votre table qui est dans votre format, vous devez utiliser la requête suivante pour convertir birth_day dans le format requis.
date_Format(birth_day, 'yyyy-MM-dd')
Vous pouvez l'utiliser dans une requête de la manière suivante
select * from yourtable
where
date_Format(birth_day, 'yyyy-MM-dd') = '2019-04-16';