2015-05-28 3 views
0

Я начинаю с Улей. У меня есть две таблицы Hive следующим образом:Улей - Создайте представление, используя две существующие таблицы улья

Таблица А содержит столбцы - date, name, age. Диапазон значений в колонке даты из таблицы А от 20150406 до 20150408.

Таблица B представляет собой копию таблицы А - но с еще один новый столбец добавляется - date, name, **dept**, age Диапазон значений в колонке даты из таблицы B от 20150409 до 20150411.

Я хотел бы создать представление с помощью таблицы а и в такие, что

View A = 
Table A(date, name, dept as NULL, age) //for dates 20150406 to 20150408 
UNION 
Table B(date, name, dept, age) //for dates 20150409 to 20150411 

Пример:

Таблица A

date | name | age 
20150406 | John | 21 
20150407 | Jane | 23 
20150408 | Mary | 20 

Таблица B

date | name | dept | age 
20150409 | Claire | CSE | 25 
20150410 | Cindy | Maths | 27 
20150408 | Tom | Biology | 30 

Вид A

date | name | dept | age 
20150406 | John | NULL | 21 
20150407 | Jane | NULL | 23 
20150408 | Mary | NULL | 20 
20150409 | Claire | CSE | 25 
20150410 | Cindy | Maths | 27 
20150408 | Tom | Biology | 30 

ли это возможно? Как это может быть сделано?

Заранее благодарен!

ответ

0

см Подробное решение:

hive> create table tableA(date String,name string,age int) row format delimited fields terminated by '\t' stored as textfile; 
OK 
Time taken: 0.084 seconds 

hive> create table tableB(date String,name string,dept String,age int) row format delimited fields terminated by '\t' stored as textfile; 
OK 
Time taken: 0.103 seconds 

затем от локального до улья нагрузкой:

hive> load data local inpath '/home/hastimal/PracticeTableData/tableB' into table tableB; 
Loading data to table default.tableb 
Table default.tableb stats: [numFiles=1, totalSize=71] 
OK 
Time taken: 0.291 seconds 

hive> load data local inpath '/home/hastimal/PracticeTableData/tableA' into table tableA; 
Loading data to table default.tablea 
Table default.tablea stats: [numFiles=1, totalSize=51] 
OK 

Далее доступны в улье просто сделать :

hive> select * from tableA; 
OK 
20150406 John 21 
20150407 Jane 23 
20150408 Mary 20 
Time taken: 0.126 seconds, Fetched: 3 row(s) 

hive> select * from tableB; 
OK 
20150409 Claire CSE 25 
20150410 Cindy Maths 27 
20150408 Tom Biology 30 
Time taken: 0.11 seconds, Fetched: 3 row(s) 

Окончательное решение :)

SELECT tbA.date AS a ,tbA.name AS b ,NULL AS c,tbA.age AS d FROM tableA tbA 
UNION ALL 
SELECT tbB.date AS a ,tbB.name AS b ,tbB.dept AS c,tbB.age AS d FROM tableB tbB 

См выход:

OK 
20150409 Claire CSE 25 
20150410 Cindy Maths 27 
20150408 Tom Biology 30 
20150406 John NULL 21 
20150407 Jane NULL 23 
20150408 Mary NULL 20 
Time taken: 43.462 seconds, Fetched: 6 row(s) 
+0

@activelearner Для вашего решения вы можете сделать так: «улья> создать таблицу TABLEA (дата String, имя строки, возраст Int) поля с разделителями строк, прерванные '| 'хранится как текстовый файл;' – ChikuMiku

+0

@activelearner Также измените таблицу A ниже tableB в UNION ALL, чтобы у вас было точное решение вашего требования :) – ChikuMiku

1

Вы почти там:

create view viewA 
as 
select date, name, NULL as dept, age 
from tableA 
where date between '20150406' and '20150408' 
union all 
select date, name, dept, age 
from tableB 
where date between '20150409' and '20150411' 
Смежные вопросы