为什么在配置单元中基于hbase表创建内部表时出错



我有一个hbase表,我想将它映射到配置单元表。问题是,当我在蜂窝中使用外部表时,它会完成,但当我想在蜂窝中创建内部表时,会抛出一个异常:

message:Table yourtable *already exists within HBase*; use CREATE EXTERNAL TABLE instead to register it in Hive

使用的命令:

CREATE TABLE A
(key string, date_time timestamp)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ( "hbase.columns.mapping" = "
               :key,
               :timestamp
                )
TBLPROPERTIES("hbase.table.name" = "yourtable"); 

知道吗?

您可能使用的Hive版本不支持您可能正在使用的标记。

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], ...)]
  [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)

请参阅:创建表语法

Hive和HBase都使用相同的元存储来存储表元数据。您遇到的问题是,在创建新的配置单元管理的(内部)表以指向HBase表时,元存储拒绝创建具有相同名称的新HBase表,因为HBase表已经存在。使用CREATE EXTERNAL TABLE,您可以让元存储知道只注册一个新的配置单元外部表,同时保留相同的现有HBase表。

最新更新