Impala Hue Cloudera: как найти срок владения по заданным столбцам «учетная запись открыта» и «учетная запись закрыта» (оба являются int) в наборе данных

#impala

#impala

Вопрос:

Я пытаюсь рассчитать срок владения по двум столбцам «учетная запись открыта» и «учетная запись закрыта» (оба являются int) в моих данных о депозите. Я попытался использовать следующие форматы:

  1. datediff(дата окончания метки времени, дата начала метки времени)
  2. однако datediff(to_date (учетная запись открыта),now()) и datediff(to_date(учетная запись закрыта),now()) не удается получить выходные данные.

Пожалуйста, помогите.

Спасибо!

Ответ №1:

Если даты указаны в INT/BIGINT типе, это означает, что они UNIXTIME форматированы. Поэтому вам нужно преобразовать их во временную метку перед сравнением. Вы можете сделать это многими способами. Один из них ниже —

  1. преобразуйте unixtime в метку времени, используя приведенную ниже функцию
    to_timestamp(from_unixtime(1392394861,'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss')
  2. Используется datediff для определения разницы в дате. datediff(to_timestamp(from_unixtime(account_opened,'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss'), to_timestamp(from_unixtime(account_closed,'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss'))

Итак, вот весь SQL для получения разницы в датах-

 SELECT 
datediff(to_timestamp(from_unixtime(account_opened,'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss'), to_timestamp(from_unixtime(account_closed,'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss')) as datediff_int 
from TABLE

 

Комментарии:

1. Спасибо за ваш ответ, Каушик :-). Однако я не получаю информацию о сроке владения открытой учетной записью или сроке владения закрытой учетной записью. Однако я пробовал следующий код, Impala / Hive выдает ошибку rec_dt= substr(podium_delivery_date, 1, 6) {дата доставки podium — дата записи} open_dt = substr(приведение (acount_opened как строка),1,6) closed_dt = substr(приведение (acount_closed как строка),1,6)

2. (ПРИВЕДЕНИЕ (ВЛЕВО (bb.rec_dt, 4) КАК INT)-ПРИВЕДЕНИЕ (ВЛЕВО (bb.open_dt, 4) как INT))*12 , если (ПРИВЕДЕНИЕ (ВПРАВО (bb.rec_dt, 2) КАК INT) > (ПРИВЕДЕНИЕ (ВПРАВО (bb.open_dt, 2) какINT)), ПРИВЕДЕНИЕ (СПРАВА (bb.rec_dt, 2) КАК INT) — ПРИВЕДЕНИЕ (СПРАВА (bb.open_dt,2) как INT), ПРИВЕДЕНИЕ (СПРАВА (bb.rec_dt, 2) КАК INT) ПРИВЕДЕНИЕ (СПРАВА (bb.open_dt, 2) как INT))как Open_Tenure

3. (ПРИВЕДЕНИЕ (ВЛЕВО (bb.rec_dt, 4) КАК INT)-ПРИВЕДЕНИЕ (ВЛЕВО (bb.closed_dt, 4) как INT))*12 , если (ПРИВЕДЕНИЕ (ВПРАВО (bb.rec_dt, 2) КАК INT) > (ПРИВЕДЕНИЕ (ВПРАВО (bb.closed_dt, 2) какINT)), ПРИВЕДЕНИЕ (СПРАВА (bb.rec_dt, 2) КАК INT) — ПРИВЕДЕНИЕ (СПРАВА (bb.closed_dt,2) как INT), ПРИВЕДЕНИЕ (СПРАВА (bb.rec_dt, 2) КАК INT) ПРИВЕДЕНИЕ (СПРАВА (bb.closed_dt, 2) как INT))как Closed_Tenure

4. что вы подразумеваете под сроком владения? разница в датах?

5. я имею в виду срок владения… Я хочу получить «возраст в месяцах» учетной записи с момента открытия учетной записи и «возраст в месяцах» учетной записи с момента закрытия учетной записи.