Hive - оператор Create Table с командами 'select query' и 'fields завершается' - PullRequest
0 голосов
/ 02 июля 2018

Я хочу создать таблицу в Hive, используя оператор выбора, который берет подмножество данных из другой таблицы. Для этого я использовал следующий запрос:

create table sample_db.out_table as 
select * from sample_db.in_table where country = 'Canada';

Когда я посмотрел на расположение HDFS в этой таблице, разделителей полей не было.

Но мне нужно создать таблицу с отфильтрованными данными из другой таблицы вместе с разделителем полей. Например, я пытаюсь сделать что-то вроде:

create table sample_db.out_table as 
select * from sample_db.in_table where country = 'Canada'
ROW FORMAT SERDE 
  FIELDS TERMINATED BY '|';

Это не работает, хотя. Я знаю, что альтернативный способ - это создать структуру таблицы с именами полей и командой «FIELDS TERMINATED BY '|'», а затем загрузить данные.

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

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Поставьте row format delimited .. перед AS select

сделай так Измените запрос на ваш

hive> CREATE TABLE ttt  row format delimited fields terminated by '|' AS select *,count(1) from t1 group by id ,name  ;
Query ID = root_20180702153737_37802c0e-525a-4b00-b8ec-9fac4a6d895b

вот результат

[root@hadoop1 ~]# hadoop fs -cat /user/hive/warehouse/ttt/**
2|\N|1
3|\N|1
4|\N|1
0 голосов
/ 02 июля 2018

Как вы можете видеть в документации , при использовании оператора CTAS ( Создать таблицу как выбор ), оператор ROW FORMAT (фактически, все настройки, связанные с новая таблица) идет до оператора SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...