2015-07-27 3 views
0

Я пытаюсь выполнить запрос куста и экспортировать его вывод в формате HDFS с Формат SEQUENCE FILE.Экспорт файла файла в hdfs в последовательности Формат файла

beeline> show create table test_table; 

+--------------------------------------------------------------------------------------+ 
|         createtab_stmt         | 
+--------------------------------------------------------------------------------------+ 
| CREATE TABLE `test_table`(               | 
| `XXXXXXXXXXXXXX` bigint,               | 
| `XXXXXXXXXXXxx` int,                | 
| `XXXXXXXXX` int,                 | 
| `XXXXXX` int)                  | 
| PARTITIONED BY (                 | 
| `XXXXXXXX` string,                 | 
| `XXXX` string,                  | 
| `XXXXXXXX` string)                 | 
| ROW FORMAT DELIMITED                 | 
| FIELDS TERMINATED BY '\u00001'              | 
| STORED AS INPUTFORMAT                | 
| 'org.apache.hadoop.mapred.SequenceFileInputFormat'         | 
| OUTPUTFORMAT                   | 
| 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'      | 
| LOCATION                    | 
| 'hdfs://localhost:8020/user/hive/warehouse/local_hive_report.db/test_table'  | 
| TBLPROPERTIES (                  | 
| 'transient_lastDdlTime'='1437569941')            | 
+--------------------------------------------------------------------------------------+ 

Вот запрос, который я пытался экспортировать данные,

beeline> INSERT OVERWRITE DIRECTORY '/user/nages/load/date' 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n' 
    STORED AS SEQUENCEFILE 
    SELECT * FROM test_table WHERE column=value; 

Здесь ошибка,

Error: Error while compiling statement: FAILED: ParseException line 1:61 
cannot recognize input near 'ROW' 'FORMAT' 'DELIMITED' in statement (state=42000,code=40000) 

Я пропускаю что-то здесь?

Версия программного обеспечения: Cloudera hadoop CDH5.3.3, Версия Apache 0.13.1.

Редактировать: Обновлено мое временное решение ниже.

ответ

0

Как временное исправление, я создал таблицу Hive с форматом файла последовательности и вставил в нее выбранные записи.

CREATE TABLE temp_table 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
STORED AS SEQUENCEFILE 
AS 
SELECT * FROM test_table WHERE column=value; 

Это создаст файл последовательности в следующем месте в HDFS.

/<HIVE_DATABASE_ROOT>/temp_table.db/

0

Это связано с тем, что по умолчанию запрос на улей использует в качестве разделителя ^. Вы можете попробовать то же самое, экспортировав его в локальную файловую систему. Это нужно поддерживать.

beeline> INSERT OVERWRITE LOCAL DIRECTORY '/user/~local directoryname' 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n' 
    STORED AS SEQUENCEFILE 
    SELECT * FROM test_table WHERE column=value; 
+0

1) Я хочу, чтобы выход в HDFS. 2) Формат файла должен быть ФАЙЛОМ ПОСЛЕДОВАТЕЛЬНОСТИ. Есть ли свойство переопределить это? – Nageswaran

+1

создайте внешнюю таблицу в том месте, где вы хотите получить выходной файл. Используйте команду create table как команду и вставьте необходимые данные во внешнюю таблицу. При этом вы получите данные в местоположении HDFS. – kiran

+0

Да, это то, что я сделал наконец. – Nageswaran

0

Этот скрипт работает для меня:

CREATE EXTERNAL TABLE dept_seq (department_id int, department_name string) ROW FORMAT DELIMITED FIELDS TERMINATED by '\001' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat' LOCATION 'hdfs:///user/cloudera/departments_seq'; 
+1

Пожалуйста, заверните свой код в теги кода. Делает чтение кода намного проще. – Adriani6