как сгруппировать дату по строковому типу в улье - PullRequest
0 голосов
/ 20 мая 2018

У меня есть столбец даты, тип данных - строка, как показано ниже,

Мой запрос: выберите дату приведения (substr (дата, 1,10), дата), число (дата) из группы таблицпо дате;

date

1   1/1/1970 12:00:00 AM
2   1/1/1970 12:00:00 AM
3   1/1/1970 12:00:00 AM
4   1/1/1970 12:00:00 AM
5   1/1/1970 12:00:00 AM
6   1/1/1970 12:00:00 AM
7   1/1/1970 12:00:00 AM
8   1/1/1970 12:00:00 AM
9   1/1/1970 12:00:00 AM
10  1/1/1970 12:00:00 AM

поэтому, когда я использую группу по дате, для одного и того же дня все еще имеется несколько строк, я думаю, что мне может понадобиться преобразовать тип данных в дату, но все еще не работает, кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Формат даты в Hive: yyyy-MM-dd

, если вы хотите привести строку к дате , затем использовать

hive> select date(from_unixtime(unix_timestamp(`date`, 'MM/dd/yyyy hh:mm:ss a'),'yyyy-MM-dd')) `date`,count(*) from dd group by date(from_unixtime(unix_timestamp(`date`, 'MM/dd/yyyy hh:mm:ss a'),'yyyy-MM-dd'));
+-------------+------+--+
|    date     | _c1  |
+-------------+------+--+
| 1970-01-01  | 10   |
+-------------+------+--+

В этом утверждении мы выполнили приведение поля к дате тип данных даты и сгруппировали все даты.

(или)

, если вы просто хотитедля группировки по MM/dd/yyyy затем используйте функцию split и группируйте по

hive> select split(`date`,' ')[0] `date`,count(*) from dd group by split(`date`,' ')[0]; 
+-----------+------+--+
|   date    | _c1  |
+-----------+------+--+
| 1/1/1970  | 10   |
+-----------+------+--+
0 голосов
/ 20 мая 2018

Если вы хотите, чтобы дата и столбец представляли собой строчку, просто используйте substr():

select substr(date, 10), count(*)
from t
group by substr(date, 10);

Ooops.Я понимаю, что ваша дата не является разумным форматом (скажем, MM / DD / YYYY).Вы можете использовать instring():

select substr(date, 1, instring(date, ' ')) as dte, count(*)
from t
group by dte;
...