HBase學習之一: 建立hive和hbase關聯表
背景:專案中需要使用HQL對源資料進行分析,分析的結果需要做近似於實時的查詢,所以建立的表就需要在hive和hbase之間相關聯,此為背景。
drop table tbl_hive_test;
create external table tbl_hive_test
(
id string,
name string,
age string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,info:name,info:age")
TBLPROPERTIES("hbase.table.name" = "tbl_hbase_test");
說明:預設第一個欄位為rowkey,即為id。info為列簇,name為列名。hbase.table.name為hive表在habse中的名稱,建立的是外部表(external),hbase該表必須存在,否則報錯(內部表不必在hbase中先建立)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:MetaException(message:HBase table tbl_hive_test doesn't exist while the table is declared as an external table.)
在hbase shell中先建立create 'tbl_hbase_test','info'
匯入資料:
load data local inpath '/tmp/info.txt' overwrite into table tbl_hive_test partition(dt='20000101');
報錯:
FAILED: SemanticException [Error 10101]: A non-native table cannot be used as target for LOAD
如下所示:
managed native: what you get by default with CREATE TABLE
external native: what you get with CREATE EXTERNAL TABLE when no STORED BY clause is specified
managed non-native: what you get with CREATE TABLE when a STORED BY clause is specified; Hive stores the definition in its metastore, but does not create any files itself; instead,
it calls the storage handler with a request to create a corresponding object structure
external non-native: what you get with CREATE EXTERNAL TABLE when a STORED BY clause is specified; Hive registers the definition in its metastore and calls the storage handler to check
that it matches the primary definition in the other system
可看出上述建表語句屬於external non-native,不支援load,只能select另外一張表insert到此表中,建表語句如下:
create table tbl_hive_test1
(
id string,
name string,
age string
)
partitioned by(dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
用hive的load命令裝載資料:
load data local inpath '/tmp/a.txt' overwrite into table tbl_hive_test1 partition(dt='20000101');
a.txt的內容如下:
1001,zhangsan,19
1002,lisi,25
1003,wangwu,26
1004,zhaoliu,18
2001,limei,22
2002,hangmeimei,24
3005,lineng,17
4001,liqi,20
要在hive檢視到資料,要在hbase中事先put一條資料才能使用hql查詢到hive表中的資料。
put 'tbl_hbase_test','302','info:name','jxz'
put 'tbl_hbase_test','302','info:age','25'
在hbase可檢視 scan 'tbl_hbase_test'或get 'tbl_hbase_test','302'
最後再insert到目標表中
insert overwrite table tbl_hive_test select id,name,age from tbl_hive_test1 where dt='20000101';
相關文章
- HBase vs HiveHive
- Hive和Hbase的區別Hive
- HBase學習
- Hbase學習二:Hbase資料特點和架構特點架構
- HBase學習之Hbase的邏輯結構和物理結構
- HBase學習之二: hbase分頁查詢
- hbase學習筆記筆記
- 最近學習了HBase
- Hbase和Hive的特點,和應用場景Hive
- 大資料技術Hbase和Hive詳解大資料Hive
- HBase學習的第五天--HBase進階結尾和phoenix開頭
- Hbase表設計
- HBase學習的第四天--HBase的進階與APIAPI
- hbase之hbase shell
- Hbase、Hive、Impala資料同步簡單示例Hive
- HBase2實戰:HBase Flink和Kafka整合Kafka
- CDH+HBase Indexer+Solr為HBase資料建立二級索引IndexSolr索引
- Hbase(二)Hbase常用操作
- HBase 的結構與表的對應關係
- hbase - [04] java訪問hbaseJava
- HBase 教程:什麼是 HBase?
- HBase
- 快速理解HBase和BigTable
- Hbase架構和搭建架構
- HBase 系列(五)——HBase常用 Shell 命令
- Hbase單機部署 java連線HbaseJava
- Hbase一:Hbase介紹及特點
- HBase概述
- hbase整理
- 大資料基礎學習-8.Hbase-1.2.0大資料
- HBase實操:HBase-Spark-Read-Demo 分享Spark
- HBase相關的一些點
- hbase與phoenix整合(使用phoenix操作hbase資料)
- 海量列式非關聯式資料庫HBase 架構,shell與API資料庫架構API
- spark與hbaseSpark
- HBase進階
- hbase shell命令
- Hbase優化優化
- php使用hbasePHP