Найти лучший способ вытащить последние 7 дней с Impala, когда дата и время - строка - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь работать с набором данных, который мы начали извлекать, и, конечно, «devicereceipttime» хранится в виде строки, и я не могу никого убедить изменить его прямо сейчас.Однако «год», «месяц», «день» и «час» разбиты на отдельные поля как «целые».Это выглядит следующим образом:

devicereceipttime(string)   year(int)  month(int)  day(int)  hour(int)
2018-06-19T05:00:06.265Z    2018       6           19        5
2018-06-19T18:53:56.776Z    2018       6           19        6
2018-06-19T02:10:05.252Z    2018       6           19        2
2018-06-19T12:14:01.395Z    2018       6           19        12

Я использую Impala и хотел бы выполнить запрос, аналогичный приведенному ниже, но тот, который будет работать с указанными выше типами, либо просто используя строковое значение «devicereceipttime», либо"г / м / д"Я хочу снять целую неделю (7 дней подряд), поэтому я, вероятно, запланирую отчеты для запуска в CDSW по субботам или понедельникам.

Этот запрос я использовал, когда формат строки даты и времени был "гггг-мм"-dd чч: мм: сс "

select *  
from winworkstations_realtime 
where devicereceipttime BETWEEN concat(to_date(now() - interval 1 days), " 00:00:00") and concat(to_date(now() - interval 8 days), " 24:00:00")

Было бы лучше использовать строку или попытаться выяснить это с помощью набора целых чисел?

1 Ответ

0 голосов
/ 29 ноября 2018

Я придумал это, чтобы удовлетворить запрос:

devicereceipttime BETWEEN concat(to_date(now() - interval 7 days), "T00:00:00.000Z") and concat(to_date(now() - interval 1 days), "T23:59:59.999Z")

select w.destinationhostname,w.destinationusername, w.destinationprocessname, count(*) as count \
from winworkstations_realtime w \
where w.devicereceipttime BETWEEN concat(to_date(now() - interval 7 days), "T00:00:00.000Z") and concat(to_date(now() - interval 1 days), "T23:59:59.999Z") AND w.externalid="4688" AND w.destinationhostname like "T%" AND (w.destinationusername not like "%$" AND w.destinationusername not like "LOCAL%" AND w.destinationusername not like "-") \
group by w.destinationhostname, w.destinationusername,w.destinationprocessname \
order by 1,2'
...