将多个列族从 hbase 导入到 hive

Posted

技术标签:

【中文标题】将多个列族从 hbase 导入到 hive【英文标题】:Import multiple column families from hbase to hive 【发布时间】:2016-11-15 08:16:12 【问题描述】:

我正在尝试将具有两个 列族hbase 表移动到 hive 表中。我可以移动一个列族,但如何在同一个配置单元表中移动另一个列族。

编辑:

我在代码下方移动了一个列族。

CREATE TABLE hbase_hive(key string, firstname string, age string)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (“hbase.columns.mapping” = “id:firstname,id:age")
TBLPROPERTIES(“hbase.table.name” = “hl”);

但我还有一个名为 hb 的列族,并且有三列。如何做到这一点。

更新:

我也尝试在下面添加不同列族的列名是我的代码。

CREATE TABLE hbase_hive(key string, firstname string, age string, testname string)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (“hbase.columns.mapping” = “id:firstname,id:age,pd:name")
TBLPROPERTIES(“hbase.table.name” = “hl”);

但我得到以下结果:

 819215975  19391121    625678921720    NULL
 819617215  19570622    625116365890    NULL
 820333876  19640303    623221670810    NULL
 824794938  19531211    625278010070    NULL
 828093442  19420803    625284904860    NULL
 828905771  19320209    625078004220    NULL
 829832017  19630722    625178010070    NULL

我得到空值而不是值。

更新:

我尝试在 hbase shell 中使用以下命令创建 hbase 表

create ‘hl’,’id’

然后我使用以下命令创建了另一个列族

alter ‘hl’,’pd’ 

【问题讨论】:

如果您显示一些示例代码或您如何实现移动第一个 cf 会更容易 @Gevorg 我已经更新了我的问题。请检查。 【参考方案1】:

在您的 HiveQL 中,您从 hbase 表“hl”中选择列族“id”中的两列到 hive 表中。如果您想添加更多列(甚至来自其他列族),只需将它们添加到表模式和hbase.columns.mapping。例如:

CREATE TABLE hbase_hive(key string, firstname string, age string, a string)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (“hbase.columns.mapping” = “id:firstname,id:age,hb:a")
TBLPROPERTIES(“hbase.table.name” = “hl”);

见https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration#HBaseIntegration-MultipleColumnsandFamilies

【讨论】:

我试过了,但来自不同列族的另一列仅显示 NULL 值,但在 hbase 中我可以看到该列中有数据。 @animal 你确定hb 是一个列族并存储在hl 表中吗?您能否提供更多信息,例如describe "hl" 的输出 根据您的信息无法知道问题所在。我想知道您如何将数据存储在 hbase 中。 我正确地创建了它,因为当我存储特定列族的列时,我可以在配置单元表中看到结果。在加入两个不同的列族时,我得到了Null【参考方案2】:

我发现您所写的内容存在几个问题(或多或少):

首先,我会创建一个EXTERNAL TABLE 来代替 您正在创建一个只有 3 列但最终需要 4 列的 Hive 表 您没有显式映射:key 您的“名字”和“年龄”数据看起来像狂野的随机数! :|

我无法对其进行测试,但以下应该是一个更好的起点:

CREATE EXTERNAL TABLE hbase_hive_hl(key string, firstname string, age string, name string)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,id:firstname,id:age,pd:name")
TBLPROPERTIES(“hbase.table.name” = “hl”);

【讨论】:

我试过这种方式,但我得到的最后一个列值为Null 你试过了吗?请注意,它与您在问题中写的不同。如果是这样,那么请使用用于创建 HBase 表的脚本和用于生成示例输出的确切查询来更新您的问题。另外,请确保在尝试其他内容之前删除现有的 hbase_hive 表

以上是关于将多个列族从 hbase 导入到 hive的主要内容,如果未能解决你的问题,请参考以下文章

将数据加载到 Cassandra 列族的最快方法是啥

HBASE表设计

HBASE列族不能太多的真相 (一个table有几个列族就有几个 Store)

hbase中不同列族之间能不能共享region

HBASE名词解析及关系梳理

HBASE列族不能太多的真相 (一个table有几个列族就有几个 Store)