2013-05-15 36 views
1

我有HBase一個表,我想在hive創建在hbase列上分區的外部表的語法是什麼?

代表作爲EXTERNAL TABLE到目前爲止,我一直在使用:

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的列和蜂巢分區列

回答

1

我認爲你不能,很容易分區外部表之間進行映射的任何文件,特別是當底層存儲是HBase時。

Hive分區策略構建於特定分區的數據存儲在單獨文件夾(「或任何其他存儲」)中的方式。由於使用HBase進行分區(如果存在)將需要使用更多表或使用HBase版本。

我認爲這篇文章會給你更好的理解分區http://blog.zhengdong.me/2012/02/22/hive-external-table-with-partitions

而且在這個地方https://cwiki.apache.org/Hive/hbaseintegration.html你可以找到在HBase的那個分區是留給未來的。

如果你想擁有分區,我建議你將數據從HBase/Hive加載到HDFS/Hive表中,但這也取決於你的用例。

Regards, Dino

相關問題