Je suis très nouveau pour SQL/Hive. Au début, j'ai chargé un fichier txt dans Hive en utilisant:
drop table if exists Tran_data;
create table Tran_data(tran_time string,
resort string, settled double)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
Load data local inpath 'C:\Users\me\Documents\transaction_data.txt' into table Tran_Data;
La variable tran_time
dans le fichier txt ressemble à ceci: 10-APR-2014 15:01. Après avoir chargé cette table Tran_data, j'ai essayé de convertir tran_time
au format "standard" afin de pouvoir joindre cette table à une autre table en utilisant tran_time
comme clé join
. Le format de date souhaité est "aaaammjjd". J'ai cherché des ressources en ligne et trouvé ceci: unix_timestamp(substr(tran_time,1,11),'dd-MMM-yyyy')
Donc, en gros, je fais ceci: unix_timestamp('10-APR-2014','dd-MMM-yyyy')
. Cependant, le résultat est "NULL".
Ma question est donc la suivante: comment convertir le format de date en un format "standard", puis le convertir au format "aaaammjj"?
from_unixtime(unix_timestamp('20150101' ,'yyyyMMdd'), 'yyyy-MM-dd')
Ma version actuelle de Hive: Hive 0.12.0-cdh5.1.5
J'ai converti date-heure dans la première colonne en date dans la deuxième colonne à l'aide des fonctions de date Hive ci-dessous. J'espère que cela t'aides!
select inp_dt, from_unixtime(unix_timestamp(substr(inp_dt,0,11),'dd-MMM-yyyy')) as todateformat from table;
inp_dt todateformat
12 mars 2015 07:24:55 2015-03-12 00:00:00
select from_unixtime(unix_timestamp('01032018' ,'MMddyyyy'), 'yyyyMMdd');
format d'entrée: mmddyyyy
01032018
sortie après requête: aaaammjj
20180103
Pour aider quelqu'un dans le futur:
La fonction suivante devrait fonctionner comme cela a fonctionné dans mon cas
to_date (from_unixtime (UNIX_TIMESTAMP ('10 -APR-2014 ', jj-MMM-aaaa')))
la fonction unix_timestamp convertira le format de date de chaîne donné en horodatage Unix en secondes, mais pas comme ce format jj-mm-aaaa.
Vous devez écrire votre propre fichier UDF personnalisé pour convertir une date de chaîne donnée au format dont vous avez besoin, car Hive ne contient aucune fonction prédéfinie. Nous avons la fonction to_date pour convertir un horodatage en date, restantes toutes les fonctions unix_timestamp n'aideront pas votre problème.
unix_timestamp ('2014-05-01', 'jj-mmm-aaaa') fonctionnera, votre chaîne d'entrée devrait être dans ce format pour Hive aaaa-mm-jj ou aaaa-mm-jj hh: mm: ss
Où que vous essayez avec '01-MAI-2014 'Hive ne le comprendra pas comme une chaîne de date