Раздел Hive с подстановочным знаком

Я новичок в разделах.

Предположим, у меня есть следующая таблица

таблица mytable (отметка времени mytime, строка myname)

где столбец mytime выглядит так: год-месяц-день час: мин: сек.мсек (например, 2014-12-05 08: 55: 59.3131)

Я хочу разбить свою таблицу на части по годам, месяцам и дням моего времени

Например, хочу сделать перегородку на 05.12.2014.

В этом разделе будет запись с именем mytime, например, 2014-12-05 08: 55: 59,3131.

Таким образом, запрос типа select * from mytable where mytime='2014-12-05%' будет искать

раздел.

Как я могу это сделать в улье?

У меня уже есть данные в моей таблице, нужно ли мне воссоздать мою таблицу и перезагрузить все данные?

Спасибо


person alec.tu    schedule 04.12.2014    source источник


Ответы (1)


Вход

1997-12-31 23:59:59.999,kishore
2014-12-31 23:59:59.999999,manish

create table mytable_tmp(mytime string,myname string)
row format delimited
fields terminated by ',';

load data local inpath 'input.txt'
overwrite into table mytable_tmp;



create table mytable(myname string,mytimestamp string)
PARTITIONED BY (mydate string)
row format delimited
fields terminated by ',';


SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;

INSERT OVERWRITE TABLE mytable PARTITION(mydate) 
SELECT myname,mytime,to_date(mytime) from  mytable_tmp;


select * from mytable where mydate='2014-12-31';



manish  2014-12-31 23:59:59.999999  2014-12-31

есть раздел mydate, который включает myname и mytime в соответствии с вашей проблемой;

person Kishore    schedule 04.12.2014
comment
что, если столбец mytime является строкой (но формат такой же, как и временная метка)? - person alec.tu; 05.12.2014
comment
В этом примере, если я хочу вставить (2014-12-31 11: 11: 11.1111, tom) в mytable, эта запись будет в разделе 2014-12-31? - person alec.tu; 05.12.2014
comment
перейдите к обновленному ответу. сообщите мне, если у вас есть другие требования. - person Kishore; 05.12.2014
comment
если вы вставите (2014-12-31 11: 11: 11.1111, tom) в mytable, запись будет разделена к 2014-12-31. Вы также сказали, что я хочу также 2014-12-31 11: 11: 11.1111, поэтому он также будет храниться в разделе 2014-12-31. - person Kishore; 05.12.2014
comment
Поскольку я использую формат паркета для mytable, он не поддерживает тип временной метки, можно ли использовать только строковый тип для выполнения моих требований? - person alec.tu; 07.12.2014
comment
вам нужно только заменить временную метку на строку, перейдите к обновленному ответу. Если это решит вашу проблему, отметьте как правильное. - person Kishore; 08.12.2014
comment
Спасибо, это работает. Кстати, можно ли использовать распространение по to_date (my_time) в предложении select into? - person alec.tu; 20.03.2015