Hive无法在hbase中为外部表创建分区列

时间:2013-11-11 06:37:23

标签: sql hadoop hbase hive

我无法使用下面的脚本

在hive中创建带有分区列的外部表
CREATE EXTERNAL TABLE Opportunity_par(key string,Opportunity__Id string,Campaign__Name string)
    > PARTITIONED BY (eventDate timestamp)
    > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf2:Opportunity__Id,cf3:Campaign__Name,cf1:eventDate")
    > TBLPROPERTIES("hbase.table.name" = "test_table");

显示以下错误,

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

请给出使用分区列

在hive中创建外部表的解决方案或建议

谢谢大家......

1 个答案:

答案 0 :(得分:0)

不确定HBase角度,但是......

分区只是表文件夹中的子文件夹。请注意,所有Hive表(元数据和数据)仅存在于HDFS(或其他受支持的系统)上,而不存在于本地文件系统中。

外部表上的分区很棘手,因为:外部表只指向预先存在的位置/文件夹中存在的数据。如果文件夹是预先存在的,则意味着很可能内部没有与该分区对应的子文件夹。因此,为了创建/添加分区到外部表,它必须具有该分区的预先存在的子文件夹,或者您必须手动创建一个。

请查看此信息以获取更多信息:http://blog.zhengdong.me/2012/02/22/hive-external-table-with-partitions