web-dev-qa-db-fra.com

Conversion de format de date dans Hive

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"?

10
Yuning Zhang
from_unixtime(unix_timestamp('20150101' ,'yyyyMMdd'), 'yyyy-MM-dd') 
17
jimbo

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

3
manojd7sto
select from_unixtime(unix_timestamp('01032018' ,'MMddyyyy'), 'yyyyMMdd');

format d'entrée: mmddyyyy

01032018

sortie après requête: aaaammjj

20180103

1
ankitbaldua

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')))

1
rohithnama

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.

0
Bharat Gamini

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

0
Bharat Gamini