【问题标题】:Hive can't create partitioned column for external table in hbaseHive 无法为 hbase 中的外部表创建分区列
【发布时间】:2014-10-11 08:48:21
【问题描述】:

我无法使用以下脚本在配置单元中创建带有分区列的外部表

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中创建带有分区列的外部表的解决方案或建议

谢谢大家...

【问题讨论】:

  • 首先对由 HBase 支持的表进行分区并没有什么意义。你期待发生什么? Hive 中的分区实际上只是 HDFS 目录,但您没有使用 HDFS。
  • 我想为我的 hbase (test_table) 表创建一个用于查询分区列的配置单元表,如果我尝试这样做,我会以上述错误结束......应该怎么办@JoeK

标签: sql hadoop hbase hive


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多