2016-10-12 9 views
1

Es gibt ein leerer HBase Tisch mit zwei Säulenfamilien:definieren Hive externe Tabelle oben auf HBase vorhandenen Tabelle

create 'emp', 'personal_data', 'professional_data' 

Jetzt versuche ich es ein Hive externe Tabelle abzubilden, was würden natürlich einige Spalten haben:

CREATE EXTERNAL TABLE emp(id int, city string, name string, occupation string, salary int) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":id, 
         personal_data:city, 
         personal_data:name, 
         professional_data:occupation, 
         professional_data:salary") 
TBLPROPERTIES ("hbase.table.name" = "emp", "hbase.mapred.output.outputtable" = "emp"); 

Jetzt ist der Fehler, die ich bekomme, ist dies:

FEHLGESCHLAGEN: Ausführungsfehler, Rückgabecode 1 von org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: MetaException (Nachricht: org.apache.hadoop.hive.serde2.SerDeException org.apache.hadoop.hive.hbase.HBaseSerDe: Spalten hat 5 Elemente während hbase.columns.mapping hat 6 Elemente (Zählen des Schlüssels wenn implizit))

Könnten Sie mir bitte helfen? Mache ich etwas falsch?

Antwort

2

In Ihrem Mapping verweisen Sie auf das Feld id, aber Sie sollten auf das Schlüsselwort HBase key verweisen. Wie in den documentation erklärte:

muss ein Mapping-Eintrag entweder: Schlüssel oder der Form column-family-name: [Spaltenname] [# (binär | String)

Nur ersetzen :id durch :key und das sollte es tun:

CREATE EXTERNAL TABLE emp(id int, city string, name string, occupation string, salary int) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, 
        personal_data:city, 
        personal_data:name, 
        professional_data:occupation, 
        professional_data:salary") 
TBLPROPERTIES ("hbase.table.name" = "emp", "hbase.mapred.output.outputtable" = "emp"); 

die Spaltenzuordnung auf der Reihenfolge der Spalten basiert, nicht auf ihren Namen. In der Dokumentation Absatz mehrere Spalten und Familien man deutlich sehen kann, dass die Namen sind nicht wichtig

CREATE TABLE hbase_table_1(key int, value1 string, value2 int, value3 int) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
WITH SERDEPROPERTIES (
    "hbase.columns.mapping" = ":key,a:b,a:c,d:e" 
) 

Die Abbildung ist dann

  • Schlüssel -> id
  • a: b - > Wert1
  • a: c -> value2
  • d: e -> value3
+0

Aber würde es dann Hive-ID-Spalte Hbase-Schlüssel zuordnen? Oder bekomme ich etwas falsch? Danke für deine Antwort :) – Dennis

+0

Ja, ich habe das Teil der Dokumentation ein paar Mal gelesen und es hat mich sehr verwirrt. Vielen Dank, Cheseaux! Es funktioniert perfekt. Haben Sie einen guten Tag. – Dennis

Verwandte Themen