Hive基礎指令 筆記

2021-09-10 01:20:54 字數 3206 閱讀 2452

命令 作用

額外說明

show  databases;

檢視都有哪些資料庫

就像sql語言中的一樣,以下空白說明和mysql資料庫一樣

create database park;

建立park資料庫

建立的資料庫,實際是在hadoop的hdfs檔案系統裡建立乙個目錄節點,統一存在: /user/hive/warehouse 目錄下

use  park;

進入park資料庫

show tables;

檢視當前資料庫下所有表

create table stu

(id int,name string);

建立stu表,以及相關的兩個字段

hive裡,用的是string,不用char和varchar。此外,所建立的表,也是hdfs裡的乙個目錄節點

insert into stu values(1,'zhang')

向stu表插入資料

1.hdfs不支援資料的修改和刪除,但是在2.0版本後支援了資料追加。實際上,insert into 語句執行的是追加操作。

2.所以注意:hive支援查詢,行級別的插入。不支援行級別的刪除和修改。

3.hive的操作實際是執行乙個job任務,呼叫的是hadoop的mr。

4.插入完資料之後,發現hdfs stu目錄節點下,多了乙個檔案,檔案裡存了插入的資料,所以得出結論,hive儲存的資料,是通過hdfs的檔案來儲存的。

select * from stu

檢視表資料

也可以根據欄位來查詢,比如select  id from stu

drop table stu

刪除表select  * from stu

查詢stu表資料

有時會出現這樣的情況:

原因是:我們從外部匯入的檔案的資料格式是:

1 jary

2 rose

即第一列和第二列是以空格為分隔符的。

但是把資料匯入到hive之後,hive並不知道分隔符是什麼,所以就不能正確的切分資料。所以顯示null。

解決辦法:在hive建立表的時候,要指定分割符,並且這個分割符要和外部檔案裡的分割符一致。詳見指令8

load data local inpath '/home/software/1.txt' into table stu;

通重載入檔案資料到指定的表裡

在執行完這個指令之後,發現hdfs stu目錄下多了乙個1.txt檔案。由此可見,hive的工作原理實際上就是在管理hdfs上的檔案,把檔案裡資料抽象成二維表結構,然後提供hql語句供程式設計師查詢檔案資料。

可以做這樣的實驗:不通過load 指令,而通過外掛程式向stu目錄下再上傳乙個檔案,看下hive是否能將資料管理到stu表裡。

create table stu1(id int,name string)row format delimited fields terminated by '';

建立stu1表,並指定分割符 空格。

此時,把外部資料匯入hive,就可以正確查出資料了。

desc  stu

檢視 stu表結構

create table stu2 like stu

建立一張stu2表,表結構和stu表結構相同

like只複製表結構,不複製資料

insert  overwritetable stu2  select * from stu

把stu表資料插入到stu2表中

insert  overwrite 可用於將select 查詢出的資料插入到指定的表中或指定的目錄下

比如:把查詢結果存到本地指定的目錄下,

執行:insert overwrite local directory '/home/stu' row format delimited

fields terminated by

'  '

select * from stu;

也可以將查詢結果存到

hdfs

檔案系統上

執行:insert overwrite directory '/stu' row format delimited

fields terminated by

'  '  s

elect * from stu;

也可以將查詢結果插入到多張表中

執行:f

rom stu insert overwrite table stu

1select * insert overwrite table stu2 select *;

結果是把

stu表的資料插入

stu1

和stu2

表。(也可以加

where

條件等,比如

select * where id>3)

alter table  stu rename to stu2

為表stu重新命名為stu2

alter table stu add columns (age int);

為表stu增加乙個列欄位age,型別為int

exit

退出hive

當退出hive後,我們可以嘗試做這樣的一件事:

之前我們是在bin目錄執行:sh hive 進入的

現在,我們換乙個目錄來進入hive,比如: sh /bin/hive 來進入

當我們檢視資料庫或檢視表時,發現之前建立的park和stu表都沒有了。

原因:hive可以管理hdfs上的檔案,用表的形式來管理檔案資料。

而表名、表裡有哪些字段,字段型別、哪張表存在哪個資料下等這些表資訊,稱之為hive的元資料資訊。

知識點:hive的元資料資訊不是存在hdfs上的,而是存在hive自帶的derby關係型資料庫裡的。

即hive管理的資料是在hdfs上的,hive的元資料資訊是存在關係型資料庫裡的。

上述問題出現的原因就是由於derby資料庫引起的,這個資料庫功能不完善,僅用於測試。

derby資料庫儲存hive元資料的方式:當在bin目錄下進入hive時,derby資料會在bin目錄下生成乙個metastore_db目錄,將元資料資訊存在這個目錄下。

當換個目錄,比如在home 目錄下hive時,derby又會在home目錄下生成乙個metastore_db目錄,儲存元資料資訊。

解決辦法:將預設使用的derby資料庫換成mysql資料庫

HIve基礎指令

命令 作用額外說明 show databases 檢視所有資料庫 create database 建立 資料庫 建立的資料庫,實際是在hadoop的hdfs檔案系統裡建立乙個目錄節點,統一存在 user hive warehouse目錄下 use 進入 資料庫 show tables 檢視當前資料庫...

Hive個人心得筆記之基礎指令

desc 表 檢視表結構 沒有主鍵,可以重複提交 手動提交 效率過低,可以通過檔案形式傳輸 load data local inpath home software 1.txt into table stu 通重載入檔案資料到指定的表裡 但是,如果不指定分割格式,無法正常傳輸 作用 額外說明 sho...

Linux學習筆記 基礎指令

linux系統的定義linux是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的...