web-dev-qa-db-de.com

Hive-Fehler: Parseexception fehlt EOF

Ich bin mir nicht sicher, was ich hier falsch mache:

Hive> CREATE TABLE default.testtbl(int1 INT,string1 STRING)  
      stored as orc 
      tblproperties ("orc.compress"="NONE") 
      LOCATION "/user/Hive/test_table";

      FAILED: ParseException line 1:107 missing EOF at 'LOCATION' near ')'

die folgende Abfrage funktioniert jedoch einwandfrei:

Hive>  CREATE TABLE default.testtbl(int1 INT,string1 STRING)  
       stored as orc 
       tblproperties ("orc.compress"="NONE");
       OK
       Time taken: 0.106 seconds

Fehlt mir hier etwas? Alle Hinweise werden helfen. Vielen Dank!

9
lex

Versuchen Sie, die "LOCATION" vor "tblproperties" wie unten angegeben, für mich gearbeitet.

CREATE TABLE default.testtbl(int1 INT,string1 STRING)  
  stored as orc 
  LOCATION "/user/Hive/test_table"
  tblproperties ("orc.compress"="NONE");

Es scheint, dass selbst das Beispiel-SQL aus dem Buch "Programming Hive" die Reihenfolge falsch angegeben hat. Bitte beziehen Sie sich auf die offizielle Definition des Befehls create table:

https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable

12
Haiying Wang

@Haiying Wang wies darauf hin, dass LOCATION vor tblproperties zu setzen ist.

Ich denke jedoch, dass der Fehler auch auftritt, wenn location oberhalb von stored as angegeben ist.

Es ist besser, die richtige Reihenfolge einzuhalten:

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
  [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]
     ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
     [STORED AS DIRECTORIES]
  [
   [ROW FORMAT row_format] 
   [STORED AS file_format]
     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)
  [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

Siehe: Hive-Tabelle erstellen

1
Ani Menon

ParseException lineNumber fehlt EOF um '.' in der Nähe von 'schemaName':

Der obige Fehler beim Versuch, den folgenden Befehl aus dem Linux-Skript auszuführen, um eine Hive-Tabelle abzuschneiden

dse -u Benutzername -p Kennwort Hive -e "Tabelle keyspace.tablename abschneiden;"

Fix: Die Befehle innerhalb der Skriptzeile müssen wie folgt getrennt werden:

dse -u Benutzername -p Kennwort Hive -e "keyspace verwenden; Tabelle keyspace.tablename abschneiden;" 

Viel Spaß beim Codieren!

Überprüfen Sie diesen Beitrag: 

Laden von Daten aus einer TXT-Datei in eine als ORC in Hive gespeicherte Tabelle

Überprüfen Sie Ihre Quelldateien im angegebenen Verzeichnis /user/Hive/test_table. Wenn die Dateien in .txt oder einem anderen non ORC-Format vorliegen, können Sie die Schritte in dem obigen Beitrag befolgen, um den Fehler zu beheben.

0
Neels

Beim Erstellen einer Tabelle in Hive wurde derselbe Fehler angezeigt.

Ich habe den Befehl drop verwendet, um die Tabelle zu löschen und dann den Befehl create table auszuführen, den ich erneut hatte.

Arbeitete für mich.

0
Cyrus

Wenn Sie diesen Fehler sehen, wenn Sie HiveQL von einer Datei mit dem Befehl "Hive -f file.hql" ausführen. Und dass es auf die erste Zeile Ihrer Abfrage zeigt, liegt definitiv an einem vergessenen Semikolon (;) für eine vorherige Abfrage. Da sucht der Parser nach einem Semikolon (;) als Abschlusszeichen für jede Abfrage. zum Beispiel:

DROP TABLE WENN EXISTS default.emp Tabelle default.emp erstellen (Typ field1, Typ field2) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' Als Textdatei gespeichert s3: // gts-promocube/source-data/Lowes/POS/';

Wenn Sie das Obige in einer Datei speichern und mit Hive -f ausführen, erhalten Sie die Fehlermeldung: FAILED: ParseException Zeile 2: 0 missing EOF at 'CREATE' near emp.

Lösung: Setzen Sie für den obigen Befehl DROP TABLE ein Semikolon (;).

0
Ramesh Gajula