2014-07-23 2 views
0

Мой. CSV-файл находится в закрытом формате.Загрузить данные .csv в Hive, который находится в закрытом формате

"13","9827259163","0","D","2" 
    "13","9827961481","0","D","2" 
    "13","9827202228","0","A","2" 
    "13","9827529897","0","A","2" 
    "13","9827700249","0","A","2" 
    "12","9883219029","0","A","2" 
    "17","9861065312","0","A","2" 
    "17","9861220761","0","D","2" 
    "13","9827438384","0","A","2" 
    "13","9827336733","0","D","2" 
    "13","9827380905","0","D","2" 
    "13","9827115358","0","D","2" 
    "17","9861475884","0","D","2" 
    "17","9861511646","0","D","2" 
    "17","9861310397","0","D","2" 
    "13","9827035035","0","A","2" 
    "13","9827304969","0","D","2" 
    "13","9827355786","0","A","2" 
    "13","9827702373","0","A","2" 

Как это в MySQL, я попытался с помощью "закрытого" ключевое слово следующим образом ..

CREATE EXTERNAL TABLE dnd (ServiceAreaCode varchar(50), PhoneNumber varchar(15), Preferences varchar(15), Opstype varchar(15), PhoneType varchar(10)) 
ROW FORMAT DELIMITED 
     FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
     LINES TERMINATED BY '\n' 
LOCATION '/dnd'; 

Но это дает ошибку следующим образом ...

NoViableAltException([email protected][1704:103: (tableRowFormatMapKeysIdentifier)?]) 
    at org.antlr.runtime.DFA.noViableAlt(DFA.java:158) 
    at org.antlr.runtime.DFA.predict(DFA.java:144) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.rowFormatDelimited(HiveParser.java:30427) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.tableRowFormat(HiveParser.java:30662) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:4683) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:2144) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1398) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1036) 
    at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:199) 
    at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) 
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:404) 
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:322) 
    at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:975) 
    at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1040) 
    at org.apache.hadoop.hive.ql.Driver.run(Driver.java:911) 
    at org.apache.hadoop.hive.ql.Driver.run(Driver.java:901) 
    at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:268) 
    at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:220) 
    at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:423) 
    at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:359) 
    at org.apache.hadoop.hive.cli.CliDriver.processReader(CliDriver.java:456) 
    at org.apache.hadoop.hive.cli.CliDriver.processFile(CliDriver.java:466) 
    at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:748) 
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:686) 
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:625) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212) 
FAILED: ParseException line 5:33 cannot recognize input near 'ENCLOSED' 'BY' ''"'' in serde properties specification 

Есть ли способ, которым я могу напрямую импортировать этот файл? Заранее спасибо.

ответ

1

Найти другой способ. Решение является serde. Пожалуйста, скачайте serde банку по этой ссылке: https://github.com/downloads/IllyaYalovyy/csv-serde/csv-serde-0.9.1.jar

затем выполните следующие шаги, используя улья подсказку:

add jar path/to/csv-serde.jar; 

create table dnd (ServiceAreaCode varchar(50), PhoneNumber varchar(15), Preferences varchar(15), Opstype varchar(15), PhoneType varchar(10)) 
row format serde 'com.bizo.hive.serde.csv.CSVSerde' 
with serdeproperties(
"separatorChar" = "\,", 
"quoteChar" = "\"") 
stored as textfile 
; 

, а затем загрузить данные из заданного пути, используя ниже запроса:

загрузки данных локального inpath «путь /xyz.csv 'в таблицу dnd; , а затем запустить:

select * from dnd; 
+0

No. Его также дает ту же ошибку .. FAILED: ParseException линия 5:33 не может распознать вход рядом с 'ENCLOSED' 'на' '' \\ " '' в свойствах serde спецификации – StackAddict

+0

использования – Rengasamy

+0

Пробовал и то, и другое. Не работает ... – StackAddict

0

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

Для вашей проблемы, пожалуйста, смотрите по этой ссылке:

http://stackoverflow.com/questions/21156071/why-dont-hive-have-fields-enclosed-by-like-in-mysql 
1

Эй я сделал это цитируемый CSV данные в улей таблице: первой загрузки CSV serde (я скачал CSV-serde-1.1.2.jar) Тогда

hive>add jar /opt/hive-1.1.1/lib/csv-serde-1.1.2.jar; 
Hive>create table t1(schema) row format serde 'com.bizo.hive.serde.csv.CSVSerde' with serdeproperties ("separatorChar" = ",") LOCATION '/user/hive/warehouse/dwb/ot1/'; 

Тогда мы должны добавить serde в улье site.xml, как показано ниже упомянут, так что мы можем запрашивать таблицу из hive-shell.

<property><name>hive.aux.jars.path</name><value>hdfs://master-ip:54310/hive-serde/csv-serde-1.1.2.jar</value></property> 
Смежные вопросы