日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

發(fā)布時間:2025/4/5 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://www.zybuluo.com/aitanjupt/note/209941

  • 使用Hive或Impala執(zhí)行SQL語句,對存儲在HBase中的數(shù)據(jù)操作
    • 〇、摘要
    • 一、基礎(chǔ)環(huán)境
    • 二、數(shù)據(jù)存儲在HBase中,使用Hive執(zhí)行SQL語句
      • Ⅰ、創(chuàng)建Hive外部表
      • Ⅱ、從HBase讀
      • Ⅲ、向HBase寫
    • 三、數(shù)據(jù)存儲在HBase中,使用Impala執(zhí)行SQL語句
      • Ⅰ、從HBase讀
      • Ⅱ、向HBase寫
    • 四、綜上所述

?

〇、摘要

Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的SQL查詢功能,可以將SQL語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。?
HBase(Hadoop Database),是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng),只能通過Rowkey來取數(shù)據(jù),無法進(jìn)行SQL查詢。?
因此如果Hive可以從HBase中取數(shù)據(jù),并結(jié)合Hive的SQL查詢功能,便能做到較為復(fù)雜的SQL查詢操作。?
Impala對存儲在HDFS、HBase的數(shù)據(jù)提供直接查詢互動的SQL。除了像Hive使用相同的統(tǒng)一存儲平臺,Impala也使用相同的元數(shù)據(jù),SQL語法(Hive SQL),ODBC驅(qū)動程序和用戶界面(Hue Beeswax)。Impala還提供了一個熟悉的面向批量或?qū)崟r查詢和統(tǒng)一平臺。

達(dá)成目標(biāo):1、支持HBase多表聯(lián)接查詢等較復(fù)雜的SQL查詢操作。

一、基礎(chǔ)環(huán)境

CentOS-6.5?
JDK-1.7?
hive:hive-0.13.1+cdh5.3.6+397,impala:impala-2.1.5+cdh5.3.6+0,spark:spark-1.2.0+cdh5.3.6+379,?
elasticsearch:elasticsearch-1.7.1,elasticsearch-hadoop-hive:elasticsearch-hadoop-hive-2.1.1

二、數(shù)據(jù)存儲在HBase中,使用Hive執(zhí)行SQL語句

無論是使用Hive還是Impala還是Spark,第一步都是讓他們先知道數(shù)據(jù)的表結(jié)構(gòu)。?
Hive的內(nèi)置數(shù)據(jù)類型可以分為兩大類:(1)、基礎(chǔ)數(shù)據(jù)類型;(2)、復(fù)雜數(shù)據(jù)類型。其中,基礎(chǔ)數(shù)據(jù)類型包括:TINYINT、SMALLINT、INT、BIGINT、BOOLEAN、FLOAT、DOUBLE、STRING、BINARY、TIMESTAMP、DECIMAL、CHAR、VARCHAR、DATE。

Ⅰ、創(chuàng)建Hive外部表

  • 先有HBase再有Hive?
    在HBase中已經(jīng)存在一個名為hbaseanqi的表,表中一列族名為angel,列族中存在五列:name、visible、cdecimal、cdate、position。?
    需要在Hive中創(chuàng)建一個名為anqi的表,其中表中存在五列:BIGINT型的id、STRING型的name、BOOLEAN型的visible、DECIMAL(12,2)型的cdecimal、TIMESTAMP型的cdate。?
    Hive中anqi表的id、name、visible、cdecimal和列cdate分別來自于HBase中hbaseanqi表的Rowkey及angel:name、angel:visible、angel:cDecimal、angel:cdate列(angel為列族名)。?
    那么執(zhí)行以下語句,在Hive中創(chuàng)建一個外部表:
  • CREATE EXTERNAL TABLE default.hive_hbase_anqi(
  • id BIGINT,
  • name STRING,
  • visible BOOLEAN,
  • cdecimal DECIMAL(12,2),
  • cdate TIMESTAMP)
  • ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
  • STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
  • WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, angel:name, angel:visible, angel:cdecimal, angel:cdate")
  • TBLPROPERTIES("hbase.table.name" = "hbaseanqi");
  • 可以看到,語句中通過WITH SERDEPROPERTIES指定了Hive與HBase的列映射關(guān)系。通過以上語句,在Hive中可以看到結(jié)構(gòu)正確的表,并可以在Hue中看到HBase中的數(shù)據(jù)。

    注意:?
    建立起的Hive表中所有字段均變?yōu)樾憽_@同ES-Hive一樣。詳情見:使用Hive或Impala執(zhí)行SQL語句,對存儲在Elasticsearch中的數(shù)據(jù)操作。

  • 先有Hive再有HBase?
    因?yàn)樵贖ive中執(zhí)行上面語句時,Hive需要去HBase中獲取一些信息,若是HBase中并無相關(guān)表,執(zhí)行以上語句直接拋出異常:HBase table hbaseanqi doesn't exist while the table is declared as an external table。?
    因此在無HBase表的情況下,并不能創(chuàng)建Hive對應(yīng)表。?
    這與ElasticSearch和Hive建立關(guān)聯(lián)時的情況不一樣。當(dāng)在ElasticSearch并無相應(yīng)index-type(索引-類型)時,Hive依然可以創(chuàng)建表成功。具體詳情可以查看:使用Hive或Impala執(zhí)行SQL語句,對存儲在Elasticsearch中的數(shù)據(jù)操作?一文。
  • Ⅱ、從HBase讀

    我們選擇以下幾條有代表性的SQL查詢語句,來驗(yàn)證使用Hive可以對存儲在HBase中的數(shù)據(jù)進(jìn)行正確的查詢操作。

  • Decimal類型數(shù)據(jù)求和?
    SELECT SUM(cdecimal) FROM default.hive_hbase_anqi;?
    經(jīng)驗(yàn)證,可以正確的得到精確的求和值。

  • TIMESTAMP類型數(shù)據(jù)排序?
    SELECT * from default.hive_hbase_anqi ORDER BY cdate limit 5;?
    經(jīng)驗(yàn)證,可以依據(jù)TIMESTAMP值正確排序。

  • 普通表與外表關(guān)聯(lián)?
    select * from hive_hbase_anqi,sample_08 WHERE hive_hbase_anqi.id=sample_08.salary;?
    其中sample_08表是Hive普通表,hive_hbase_anqi是數(shù)據(jù)存儲在HBase中的Hive外表。?
    經(jīng)驗(yàn)證,通過執(zhí)行上面語句,可以將Hive普通表與Hive的HBase外表進(jìn)行正確的關(guān)聯(lián)。

  • Ⅲ、向HBase寫

    insert OVERWRITE table hive_hbase_anqi select salary,dtime,sdecimal,sname,svisible from sample_09;?
    將Hive普通表sample_09中的數(shù)據(jù)導(dǎo)入Hive外部表anqi中,去HBase中查看,可以看到數(shù)據(jù)被正確導(dǎo)入。?
    Hive四種數(shù)據(jù)導(dǎo)入方式:從本地文件系統(tǒng)中導(dǎo)入數(shù)據(jù)到Hive表;從HDFS上導(dǎo)入數(shù)據(jù)到Hive表;從別的表中查詢出相應(yīng)的數(shù)據(jù)并導(dǎo)入到Hive表中;在創(chuàng)建表的時候通過從別的表中查詢出相應(yīng)的記錄并插入到所創(chuàng)建的表中。?
    向HBase寫不是很方便。

    三、數(shù)據(jù)存儲在HBase中,使用Impala執(zhí)行SQL語句

    在Impala中執(zhí)行INVALIDATE METADATA?、REFRESH table_name語句便可讓 Impala識別在Hive中新建的或已發(fā)生變動的表。

    Ⅰ、從HBase讀

    Hive中建立的表,impala可以直接讀取使用。執(zhí)行復(fù)雜SQL語句時,impala明顯比hive快很多。?
    同樣的,我們選擇上面(一.2)節(jié)中的典型SQL語句進(jìn)行驗(yàn)證,Impala-SQL均可以快速正確的返回結(jié)果,結(jié)果與Hive-SQL執(zhí)行結(jié)果一致。

    Ⅱ、向HBase寫

    Impala的插入數(shù)據(jù)SQL語句與Hive相差很大,Impala更接近標(biāo)準(zhǔn)SQL。

  • 普通添加一行?
    insert into hive_hbase_anqi values(0,'1999-09-09',8.88,'name',true);?
    通過執(zhí)行此語句,可以向HBase中添加一行數(shù)據(jù)。注意values里的順序,id首位,其它列按列名稱排序。
  • 從HBase其他表導(dǎo)入?
    insert into hive_hbase_anqi(id,name,cdate) select id,name,udate from hive_hbase_xi;?
    通過執(zhí)行此語句,可以向HBase中添加一批從hive_hbase_xi表中取到的數(shù)據(jù)。
  • 四、綜上所述

    數(shù)據(jù)存儲在HBase中,使用Impala或Hive執(zhí)行SQL語句進(jìn)行操作是一個好主意。雖然使用Impala和使用Hive同樣可以正確執(zhí)行,但使用Impala比使用Hive更加方便且更高效。目標(biāo)達(dá)成。

    轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/9253438.html

    總結(jié)

    以上是生活随笔為你收集整理的使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。