Voici le cas. J'essaie de créer une syntaxe de sélection pour obtenir les données du jour précédent (aujourd'hui, nous avons 21h10; par conséquent, je devrais avoir des données avec une date à 20,10. La requête fera partie du processus ETL dans Talend, donc je ne peux pas simplement faire where date = '2016-10-20'
) Le problème est que toutes les colonnes de la source de données sont en type VARCHAR ou STRING - date également. La source est sur Hive Hadoop.
Mon code:
select
cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date),
count(ns_utc) as ILOSC_ODSLON
from portal.portal_data
where
portal_data.opl_ev_ty is null
and portal_data.opl_ev_as is null
and cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date) = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day
GROUP BY
cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date)
Avec ce code, la requête ne renvoie rien sauf le nom des colonnes. Le problème est probablement lié à cette partie = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day
.
J'ai fait des tests. Quand j'exécute cette requête
select CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day
le résultat est 2016-10-20 00:00:00.0
et la partie 00: 00: 00.0 ruine probablement ma requête, car lorsque la requête principale est remplacée par la fonction = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day
, je mets la condition = '2016-10-20'
résultat est celui attendu.
Pouvez-vous s'il vous plaît me guider comment résoudre ce problème?
Au lieu de Hue, j'utilise SQL Workbench
Le problème est la façon dont vous essayez de soustraire un jour à la date.
CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()-86400))as date)
une fois que vous avez analysé la date, utilisez la fonction date_sub
disponible dans Hive
date_sub(string startdate, int days)
date_sub('2008-12-31', 1) = '2008-12-30'
Vous pouvez même suivre le lien ci-dessous.
https://www.qubole.com/resources/cheatsheet/Hive-function-cheat-sheet/
DATE_SUB est disponible dans Hive 2.1.0
date_sub(date/timestamp/string startdate, tinyint/smallint/int days)
Soustrait un nombre de jours pour commencer la date: date_sub ('2008-12-31', 1) = '2008-12-30'.
Avant Hive 2.1.0 (Hive-13248), le type de retour était une chaîne, car aucun type de date n'existait lors de la création de la méthode.
cast (date_sub (CURRENT_DATE, 1) sous forme de chaîne)