将多个列族从 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的主要内容,如果未能解决你的问题,请参考以下文章