2016-10-12 20 views
1

Существует пустой HBase стол с двумя семействами колонки:Определение Hive внешней таблицы сверху HBase существующей таблицы

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

Теперь я пытаюсь отобразить внешнюю таблицу Hive к ней, что бы естественно, есть некоторые столбцы:

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"); 

Теперь ошибка, что я получаю это:

FAILED: Ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: MetaException (сообщение: org.apache.hadoop.hive.serde2.SerDeException org.apache.hadoop.hive.hbase.HBaseSerDe: столбцы имеют 5 элементов, а hbase.columns.mapping имеет 6 элементов (считая ключ, если он неявный))

Не могли бы вы помочь мне? Я делаю что-то неправильно?

ответ

2

В вашем сопоставлении, ссылаясь на поле id, вы должны указать ключевое слово HBase key. Как указана в documentation:

запись отображения должна быть: ключ или форм колонной семья имя: [имя столбца] [# (бинарная | строка)

Просто заменить :id на :key и что должны делать это:

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"); 

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

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" 
) 

отображение затем

  • ключ -> идентификатор
  • а: Ь - > значение1
  • а: с -> value2
  • д: е -> value3
+0

Но будет ли он отображать столбец Hive id в ключе Hbase? Или я что-то не так понял? Спасибо за ваш ответ :) – Dennis

+0

Да, я несколько раз перечитывал этот бит документации, и это меня очень смутило. Большое спасибо cheseaux! Он работает отлично. Хорошего дня. – Dennis