[一起學(xué)Hive]之三–Hive中的數(shù)據(jù)庫(Database)和表(Table)

前面的文章中憨降,介紹了可以把Hive當(dāng)成一個“數(shù)據(jù)庫”,它也具備傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)單元,數(shù)據(jù)庫(Database/Schema)和表(Table)。

本文介紹一下Hive中的數(shù)據(jù)庫(Database/Schema)和表(Table)的基礎(chǔ)知識毫缆,由于篇幅原因,這里只是一些常用的乐导、基礎(chǔ)的苦丁。

二、Hive的數(shù)據(jù)庫和表

先看一張草圖:

Hive結(jié)構(gòu)

Hive結(jié)構(gòu)

從圖上可以看出物臂,Hive作為一個“數(shù)據(jù)庫”旺拉,在結(jié)構(gòu)上積極向傳統(tǒng)數(shù)據(jù)庫看齊,也分?jǐn)?shù)據(jù)庫(Schema)棵磷,每個數(shù)據(jù)庫下面有各自的表組成蛾狗。

1. Hive在HDFS上的默認(rèn)存儲路徑

Hive的數(shù)據(jù)都是存儲在HDFS上的,默認(rèn)有一個根目錄仪媒,在hive-site.xml中淘太,由參數(shù)hive.metastore.warehouse.dir指定。默認(rèn)值為/user/hive/warehouse.

2. Hive中的數(shù)據(jù)庫(Database)

  • 進(jìn)入Hive命令行规丽,執(zhí)行show databases;命令,可以列出hive中的所有數(shù)據(jù)庫撇贺,默認(rèn)有一個default數(shù)據(jù)庫赌莺,進(jìn)入Hive-Cli之后,即到default數(shù)據(jù)庫下松嘶。
  • 使用use databasename;可以切換到某個數(shù)據(jù)庫下艘狭,同mysql;

<pre class="prettyprint linenums" style="padding: 8px; color: rgb(68, 68, 68); border-radius: 2px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 20px; font-size: 14px; line-height: 20px; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 30px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. hive> show databases;
  2. OK
  3. default
  4. lxw1234
  5. usergroup_mdmp
  6. userservice_mdmp
  7. Time taken: 0.442 seconds, Fetched: 4 row(s)
  8. hive> use lxw1234;
  9. OK
  10. Time taken: 0.023 seconds
  11. hive>

</pre>

  • Hive****中的數(shù)據(jù)庫在HDFS****上的存儲路徑為

${hive.metastore.warehouse.dir}/databasename.db

比如,名為lxw1234的數(shù)據(jù)庫存儲路徑為:

/user/hive/warehouse/lxw1234.db

  • 創(chuàng)建Hive****數(shù)據(jù)庫

使用HDFS超級用戶巢音,進(jìn)入Hive-Cli遵倦,語法為:

<pre class="prettyprint linenums" style="padding: 8px; color: rgb(68, 68, 68); border-radius: 2px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 20px; font-size: 14px; line-height: 20px; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 30px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  2. [COMMENT database_comment]
  3. [LOCATION hdfs_path]
  4. [WITH DBPROPERTIES (property_name=property_value, ...)];

</pre>

比如,創(chuàng)建名為lxw1234的數(shù)據(jù)庫:

<pre class="prettyprint linenums" style="padding: 8px; color: rgb(68, 68, 68); border-radius: 2px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 20px; font-size: 14px; line-height: 20px; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 30px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. CREATE DATABASE IF NOT EXISTS lxw1234
  2. COMMENT 'lxw的大數(shù)據(jù)田地-lxw1234.com'
  3. localtion 'hdfs://namenode/user/lxw1234/lxw1234.db/';

</pre>

創(chuàng)建時候可以指定數(shù)據(jù)庫在HDFS上的存儲位置官撼。

注意:使用HDFS超級用戶創(chuàng)建數(shù)據(jù)庫后梧躺,該數(shù)據(jù)庫在HDFS上的存儲路徑的屬主為超級用戶,如果該數(shù)據(jù)庫是為某個或者某些用戶使用的傲绣,則需要修改路徑屬主掠哥,或者在Hive中進(jìn)行授權(quán)。

  • 修改數(shù)據(jù)庫

修改數(shù)據(jù)庫屬性:

ALTER (DATABASE|SCHEMA) database_name

SET DBPROPERTIES (property_name=property_value, …);

修改數(shù)據(jù)庫屬主:

ALTER (DATABASE|SCHEMA) database_name

SET OWNER [USER|ROLE] user_or_role;

  • 刪除數(shù)據(jù)庫

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name

[RESTRICT|CASCADE];

默認(rèn)情況下秃诵,Hive不允許刪除一個里面有表存在的數(shù)據(jù)庫续搀,如果想刪除數(shù)據(jù)庫,要么先將數(shù)據(jù)庫中的表全部刪除菠净,要么可以使用CASCADE關(guān)鍵字禁舷,使用該關(guān)鍵字后,Hive會自己將數(shù)據(jù)庫下的表全部刪除毅往。RESTRICT關(guān)鍵字就是默認(rèn)情況牵咙,即如果有表存在,則不允許刪除數(shù)據(jù)庫煞抬。

3. Hive中的表(Table)

3.1 查看所有的表

進(jìn)入Hive-Cli霜大,使用use databasename;切換到數(shù)據(jù)庫之后,執(zhí)行show tables; 即可查看該數(shù)據(jù)庫下所有的表:

<pre class="prettyprint linenums" style="padding: 8px; color: rgb(68, 68, 68); border-radius: 2px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 20px; font-size: 14px; line-height: 20px; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 30px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. hive> show tables;
  2. OK
  3. lxw1
  4. lxw1234
  5. table1
  6. t_site_log

</pre>

3.2 表的存儲路徑

默認(rèn)情況下革答,表的存儲路徑為:

${hive.metastore.warehouse.dir}/databasename.db/tablename/

可以使用desc formatted tablename;命令查看表的詳細(xì)信息战坤,其中包括了存儲路徑:

Location: hdfs://cdh5/hivedata/warehouse/lxw1234.db/lxw1234

3.3 內(nèi)部表和外部表

Hive中的表分為內(nèi)部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)。

  • 內(nèi)部表和外部表最大的區(qū)別

內(nèi)部表DROP時候會刪除HDFS上的數(shù)據(jù);

外部表DROP時候不會刪除HDFS上的數(shù)據(jù);

  • 內(nèi)部表適用場景:

Hive中間表残拐、結(jié)果表途茫、一般不需要從外部(如本地文件、HDFS上load數(shù)據(jù))的情況溪食。

  • 外部表適用場景:

源表囊卜,需要定期將外部數(shù)據(jù)映射到表中。

  • 我們的使用場景:

每天將收集到的網(wǎng)站日志定期流入HDFS文本文件错沃,一天一個目錄栅组;

在Hive中建立外部表作為源表,通過添加分區(qū)的方式枢析,將每天HDFS上的原始日志映射到外部表的天分區(qū)中玉掸;

在外部表(原始日志表)的基礎(chǔ)上做大量的統(tǒng)計分析,用到的中間表醒叁、結(jié)果表使用內(nèi)部表存儲司浪,數(shù)據(jù)通過SELECT+INSERT進(jìn)入內(nèi)部表泊业。

3.4 創(chuàng)建表

創(chuàng)建表的語法選項特別多,這里只列出常用的選項啊易。

其他請參見Hive官方文檔:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable

以一個例子來說吧:

CREATE EXTERNAL TABLE t_lxw1234 (

id INT,

ip STRING COMMENT ‘訪問者IP’,

avg_view_depth DECIMAL(5,1),

bounce_rate DECIMAL(6,5)

) COMMENT ‘lxw的大數(shù)據(jù)田地-lxw1234.com’

PARTITIONED BY (day STRING)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘,’

STORED AS textfile

LOCATION ‘hdfs://cdh5/tmp/lxw1234/';

  • 關(guān)鍵字EXTERNAL:

表示該表為外部表吁伺,如果不指定EXTERNAL關(guān)鍵字,則表示內(nèi)部表

  • 關(guān)鍵字COMMENT

為表和列添加注釋

  • 關(guān)鍵字PARTITIONED BY

表示該表為分區(qū)表租谈,分區(qū)字段為day,類型為string

  • 關(guān)鍵字ROW FORMAT DELIMITED

指定表的分隔符篮奄,通常后面要與以下關(guān)鍵字連用:

FIELDS TERMINATED BY ‘,’ //指定每行中字段分隔符為逗號

LINES TERMINATED BY ‘\n’ //指定行分隔符

COLLECTION ITEMS TERMINATED BY ‘,’ //指定集合中元素之間的分隔符

MAP KEYS TERMINATED BY ‘:’ //指定數(shù)據(jù)中Map類型的Key與Value之間的分隔符

舉個例子:

create table score(name string, score map<string,int>)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘\t’

COLLECTION ITEMS TERMINATED BY ‘,’

MAP KEYS TERMINATED BY ‘:';

要加載的文本數(shù)據(jù)為:

biansutao ‘?dāng)?shù)學(xué)':80,’語文':89,’英語':95

jobs ‘語文':60,’數(shù)學(xué)':80,’英語':99

  • 關(guān)鍵字STORED AS

指定表在HDFS上的文件存儲格式,可選的文件存儲格式有:

TEXTFILE //文本垦垂,默認(rèn)值

SEQUENCEFILE // 二進(jìn)制序列文件

RCFILE //列式存儲格式文件 Hive0.6以后開始支持

ORC //列式存儲格式文件宦搬,比RCFILE有更高的壓縮比和讀寫效率,Hive0.11以后開始支持

PARQUET //列出存儲格式文件劫拗,Hive0.13以后開始支持

  • 關(guān)鍵詞LOCATION

指定表在HDFS上的存儲位置间校。

Hive相關(guān)文章(持續(xù)更新)

一起學(xué)Hive系列

Hive分析函數(shù)系列

Hive索引

hive優(yōu)化之——控制hive任務(wù)中的map數(shù)和reduce數(shù)

如果覺得本博客對您有幫助,請 贊助作者 页慷。

轉(zhuǎn)載請注明:lxw的大數(shù)據(jù)田地 ? [一起學(xué)Hive]之三–Hive中的數(shù)據(jù)庫(Database)和表(Table)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末憔足,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子酒繁,更是在濱河造成了極大的恐慌滓彰,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件州袒,死亡現(xiàn)場離奇詭異揭绑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)郎哭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門他匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夸研,你說我怎么就攤上這事邦蜜。” “怎么了亥至?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵悼沈,是天一觀的道長。 經(jīng)常有香客問我姐扮,道長絮供,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任茶敏,我火速辦了婚禮杯缺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睡榆。我一直安慰自己萍肆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布胀屿。 她就那樣靜靜地躺著塘揣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宿崭。 梳的紋絲不亂的頭發(fā)上亲铡,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機(jī)與錄音葡兑,去河邊找鬼奖蔓。 笑死,一個胖子當(dāng)著我的面吹牛讹堤,可吹牛的內(nèi)容都是我干的吆鹤。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼洲守,長吁一口氣:“原來是場噩夢啊……” “哼疑务!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梗醇,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤知允,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叙谨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體温鸽,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年手负,在試婚紗的時候發(fā)現(xiàn)自己被綠了涤垫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡虫溜,死狀恐怖雹姊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衡楞,我是刑警寧澤吱雏,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站瘾境,受9級特大地震影響歧杏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迷守,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一犬绒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兑凿,春花似錦凯力、人聲如沸茵瘾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拗秘。三九已至,卻和暖如春祈惶,著一層夾襖步出監(jiān)牢的瞬間雕旨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工捧请, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留凡涩,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓疹蛉,卻偏偏與公主長得像活箕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氧吐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容