#impala
#impala
Вопрос:
Я пытаюсь рассчитать срок владения по двум столбцам «учетная запись открыта» и «учетная запись закрыта» (оба являются int) в моих данных о депозите. Я попытался использовать следующие форматы:
- datediff(дата окончания метки времени, дата начала метки времени)
- однако datediff(to_date (учетная запись открыта),now()) и datediff(to_date(учетная запись закрыта),now()) не удается получить выходные данные.
Пожалуйста, помогите.
Спасибо!
Ответ №1:
Если даты указаны в INT/BIGINT
типе, это означает, что они UNIXTIME
форматированы. Поэтому вам нужно преобразовать их во временную метку перед сравнением. Вы можете сделать это многими способами. Один из них ниже —
- преобразуйте unixtime в метку времени, используя приведенную ниже функцию
to_timestamp(from_unixtime(1392394861,'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss')
- Используется
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. я имею в виду срок владения… Я хочу получить «возраст в месяцах» учетной записи с момента открытия учетной записи и «возраст в месяцах» учетной записи с момента закрытия учетной записи.