2017-10-04 2 views
1

Je travaille dans Impala avec le tableau suivant:Hadoop Impala: Format entier type de données à jour/horodatage pour utiliser la fonction AddTime

customer_id | day_id | return_day_id 
ABC   20170830 20170923 
BCD   20170830 20170901 

Malheureusement, les deux day_id & champs return_day_id sont INT et non la date.

Comment puis-je changer leur type de données pour être date, de sorte que je peux compter les customer_ids distincts seulement avec return_day_id dans les 4 jours après day_id. Aurais-je besoin de le lancer à ce jour, puis à l'horodatage afin que je puisse utiliser la fonction adddate?

+1

Utilisez une combinaison de '' unix_timestamp' et from_unixtime' et jeter la résultante 'timestamp' utiliser la' date_add' fonction. – philantrovert

+0

merci @philantrovert - Je suis assez nouveau à Impala, cela vous dérange de poster un exemple de la façon dont vous le feriez comme une réponse? De cette façon, je peux aussi upvote/l'accepter. Merci beaucoup – jeangelj

Répondre

1

Ce que l'un des commentaires a fait remarquer correctement, c'est que vous devez utiliser unix_timestamp et from_unixtime, mais vous n'avez pas besoin d'utiliser cast. Beaucoup d'autres questions sur stackoverflow ont rencontré des problèmes similaires, chacun essayant d'utiliser cast, mais qui dans de nombreux cas a fini par retourner des valeurs NULL ou ne pas fonctionner. Le tableau ci-dessous devrait vous donner l'objet de temps dont vous avez besoin, au format AAAA-MM-jj et vous pouvez également y ajouter le hh-mm-ss.

SELECT TBL.day_id, from_unixtime(unix_timestamp(cast (TBL.day_id as string), "yyyyMMdd")) 

FROM yourTable as TBL 

LIMIT 10 

Une petite considération de garder à l'esprit est que cette convertit une chaîne en la date, nous avons donc jeté comme chaîne à cast (TBL.day_id as string), "yyyyMMdd"))

Exemple:

20160220 -> 2016-02 -20 00:00:00

Vous trouverez plus d'informations dans la documentation here.

Espoir qui aide, Julian

+0

merci beaucoup, travaillé comme un charme – jeangelj