2016-04-06 14 views
2

Wenn ich versuche, im Anschluss an eine Tabelle mit dem BefehlAusgabe, während eine Tabelle in Hive Erstellen

**

AUSSEN CREATE TABLE IF NOT Bestände erstellen VORHANDEN (exchange STRING, Symbol STRING, ymd STRING, price_open FLOAT, price_high FLOAT, price_low FLOAT, price_close FLOAT, Volumen INT, price_adj_close FLOAT) REIHE FORMAT DELIMITED FIELDS TERMINIERT VON ',' LOCATION '/ data/stocks';

**

Fehler angezeigt:

NoViableAltException (96 @ []) bei org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier (HiveParser_IdentifiersParser.java: 11627) bei org.apache.hadoop.hive.ql.parse.HiveParser.identifier (HiveParser.java:40133) bei org.apache.hadoop.hive.ql.parse.HiveParser.columnNameType (HiveParser.java:34747) ... .. .. .. .. unter sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) bei sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) bei java.lang.reflect.Method.invoke (Method.java:606) bei org.apache.hadoop.util.RunJar.main (RunJar.java:212) failed: ParseException Zeile 2: 0 Eingang in der Nähe von 'Austausch' nicht erkennen kann 'string' '' in Spaltenspezifikation

Aber wenn ich Spaltennamen mit Backticks umgeben .. es funktioniert ..

CREATE EXTERNAL TABLE IF NOT EXISTS stocks(
`exchange` STRING, 
`symbol` STRING, 
`ymd` STRING, 
`price_open` FLOAT, 
`price_high` FLOAT, 
`price_low` FLOAT, 
`price_close` FLOAT, 
`volume` INT, 
`price_adj_close` FLOAT) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
LOCATION '/in/stocks/'; 

Kann jemand bitte erklären, was die Logik dahinter ist?

Antwort

1

In Hive 0.12 und früher sind in Tabellen- und Spaltennamen nur alphanumerische Zeichen und Unterstriche zulässig.

In Hive 0.13 und höher können Spaltennamen ein beliebiges Unicode-Zeichen enthalten (siehe HIVE-6013). Jeder Spaltenname, der in backticks (`) angegeben ist, wird wörtlich behandelt.

können Sie verweisen: https://issues.apache.org/jira/browse/HIVE-6013

hoffe, das hilft!

Verwandte Themen