创建在hbase列上分区的外部表的语法是什么?

创建在hbase列上分区的外部表的语法是什么?,hbase,hive,Hbase,Hive,我在HBase中有一个表,我想在hive 到目前为止,我一直在使用: CREATE EXTERNAL TABLE events(key STRING, day INT, source STRING, ip STRING) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,c:date#b,c:source,c:ipAddr

我在
HBase
中有一个表,我想在
hive

到目前为止,我一直在使用:

CREATE EXTERNAL TABLE events(key STRING, day INT, source STRING, ip STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,c:date#b,c:source,c:ipAddress")
TBLPROPERTIES ("hbase.table.name" = "eventTable");
但是,我的查询在我的映射程序中没有正确平衡,因此我尝试在ip地址上进行分区:

CREATE EXTERNAL TABLE events(key STRING, source STRING)
PARTITIONED BY (ip STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,c:date#b,c:source,c:ipAddress")
TBLPROPERTIES ("hbase.table.name" = "eventTable");
但我收到一个关于不正确列映射的错误:

FAILED: Error in metadata: java.lang.RuntimeException:   
 MetaException(message:org.apache.hadoop.hive.serde2.SerDeException 
 org.apache.hadoop.hive.hbase.HBaseSerDe: columns has 2 elements while hbase.columns.mapping has 3 elements (counting the key if implicit))
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

我一直在四处寻找,但找不到任何说明如何在hbase列和hive分区列之间进行映射的文档,我认为您无法如此轻松地对外部表进行分区,尤其是在底层存储是hbase的情况下

配置单元分区策略建立在特定分区的数据存储在单独文件夹(“或任何其他存储”)中的方式之上。因为使用HBase分区(如果存在)需要使用更多的表或HBase版本

我认为这篇文章会让你更好地理解分区

在这里,您可以发现HBase中的分区是留给未来的

如果您想要分区,我建议将数据从HBase/Hive加载到HDFS/Hive表,但这也取决于您的使用情况

问候,,
Dino

我认为您不能那么容易地对外部表进行分区,尤其是当底层存储是HBase时

配置单元分区策略建立在特定分区的数据存储在单独文件夹(“或任何其他存储”)中的方式之上。因为使用HBase分区(如果存在)需要使用更多的表或HBase版本

我认为这篇文章会让你更好地理解分区

在这里,您可以发现HBase中的分区是留给未来的

如果您想要分区,我建议将数据从HBase/Hive加载到HDFS/Hive表,但这也取决于您的使用情况

问候,, 恐龙