中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

hive基礎操作有哪些

發布時間:2021-12-10 09:28:39 來源:億速云 閱讀:129 作者:小新 欄目:大數據

小編給大家分享一下hive基礎操作有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言

??Hive支持常見的SQL語句, 除此之外它還有其獨特的部分. 常見SQL語句與關系型數據庫(例如MySQL)中的語法一致, 這里就不再做詳細說明. 我們主要來看Hive中不一樣的部分.

??Hive的所有操作可以去Hive官網查看, 點擊此處LanguageManual

??Hive其實并不難, 對于有寫過SQL語句的人來說會更簡單. 在學習Hive時, 建議大家邊學邊敲, 多做聯系.

準備工作

??既然要使用Hive就要有Hive的環境, 可以根據這篇博客來安裝Hive以及與Hive相關的環境(Hadoop, Yarn)大數據生態圈搭建

??這里我使用的是基于Mysql的遠程模式來操作Hive.

操作流程

創建第一個表格

??連接進入Hive shell 之后, 先建一個新的數據庫, 之后的大部分操作我們都在這個數據庫中來練習.

創建:

create database hive_test;

使用該數據庫:

use hive_test;

??然后, 創建第一個表gfstbl, 也可使用數據庫.表的格式(例如hive_test.gfstbl).

CREATE TABLE gfstbl(

  id INT,

  name STRING,

  age INT,

  gfs ARRAY<STRING>,

  address MAP<STRING,STRING>,

  info STRUCT<country:String,province:String,city:String>

)

ROW FORMAT DELIMITED  

FIELDS TERMINATED BY ' ' 

COLLECTION ITEMS TERMINATED BY ','

MAP KEYS TERMINATED BY ':' 

LINES TERMINATED BY '\n';

??解釋說明:

create語句, ()中為字段之間用逗號分隔, 字段名稱與類型之間用空格隔開. 這里字段的數據類型有整型, 字符串, 數組, 鍵值對以及結構體.

Hive支持的數據類型:

數據類型 注釋

tinyint 短整型, 范圍:-128~127

smallint 小整型, -32768~32767

int 整型, -232~232-1

bigint 大整型, 就很大

float 單精度浮點數

double 雙精度浮點數

decimal 精度38位十進制數

date 日期

timestamp 時間戳

char 字符

string 字符串

varchar 可變長度字符串

array 數組類型

map 鍵值對類型

structs 結構化類型

ROW FORMAT DELIMITED : 行格式分隔

FIELDS TERMINATED BY ’ ’ : 字段之間使用空格分隔

COLLECTION ITEMS TERMINATED BY ‘,’ : 集合(就是這的數據)使用逗號分隔

MAP KEYS TERMINATED BY ‘:’ : 鍵值對使用冒號分隔

LINES TERMINATED BY ‘\n’ : 記錄之間使用換行符分隔

; : 每一條SQL語句結尾都需要以分號結束

除此之外, 如果去掉分號, 加上:LOCATION “/test”; , 就可設置源數據在HDFS中存放的位置, 若不設置默認就在Hive的工作目錄區.

??創建表的SQL語句公式如下, 我們會根據Hive表的類型將這一公式分開操作.

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)

  [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]

  [COMMENT table_comment]

  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]

  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

  [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]

     ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)

     [STORED AS DIRECTORIES]

  [

   [ROW FORMAT row_format] 

   [STORED AS file_format]

     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)

  ]

  [LOCATION hdfs_path]

  [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)

  [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name

  LIKE existing_table_or_view_name

  [LOCATION hdfs_path];

data_type

  : primitive_type

  | array_type

  | map_type

  | struct_type

  | union_type  -- (Note: Available in Hive 0.7.0 and later)

primitive_type

  : TINYINT

  | SMALLINT

  | INT

  | BIGINT

  | BOOLEAN

  | FLOAT

  | DOUBLE

  | DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later)

  | STRING

  | BINARY      -- (Note: Available in Hive 0.8.0 and later)

  | TIMESTAMP   -- (Note: Available in Hive 0.8.0 and later)

  | DECIMAL     -- (Note: Available in Hive 0.11.0 and later)

  | DECIMAL(precision, scale)  -- (Note: Available in Hive 0.13.0 and later)

  | DATE        -- (Note: Available in Hive 0.12.0 and later)

  | VARCHAR     -- (Note: Available in Hive 0.12.0 and later)

  | CHAR        -- (Note: Available in Hive 0.13.0 and later)

array_type

  : ARRAY < data_type >

map_type

  : MAP < primitive_type, data_type >

struct_type

  : STRUCT < col_name : data_type [COMMENT col_comment], ...>

union_type

   : UNIONTYPE < data_type, data_type, ... >  -- (Note: Available in Hive 0.7.0 and later)

row_format

  : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]

        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]

        [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)

  | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

file_format:

  : SEQUENCEFILE

  | TEXTFILE    -- (Default, depending on hive.default.fileformat configuration)

  | RCFILE      -- (Note: Available in Hive 0.6.0 and later)

  | ORC         -- (Note: Available in Hive 0.11.0 and later)

  | PARQUET     -- (Note: Available in Hive 0.13.0 and later)

  | AVRO        -- (Note: Available in Hive 0.14.0 and later)

  | JSONFILE    -- (Note: Available in Hive 4.0.0 and later)

  | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

constraint_specification:

  : [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE ]

    [, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE

查看第一個表的結構

??查看表結構的公式:

DESCRIBE [EXTENDED|FORMATTED] table_name

EXTENDED 極簡的方式顯示

FORMATTED 格式化方式來顯示

??只查看表字段及類型, 結果如下圖

DESC gfstbl;

DESCRIBE gfstbl;

??極簡方式查看表結構, 結果如下圖

DESCRIBE EXTENDED gfstbl;

??格式化方式查看表, 結果如下圖

DESCRIBE FORMATTED gfstbl;

表中加載數據

待加載數據

??數據內容如下:

001 zhangsan 19 Girl1,Girl2,Girl3 Girl1:qingdao,Girl2:jinan,Girl3:nanjing zhongguo,shandong,weifang

002 lisi 20 GirlA,GirlB GirlA:American,GirlB:長沙 zhongguo,shandong,qingdao

??將這兩行數據復制到gfs.txt文件中

vim /root/gfs.txt

然后復制粘貼數據

導入數據到Hive表中

load data local inpath '/root/gfs.txt' into table hive_test.gfstbl;

??需要注意: load方式插入數據不會啟動MR任務, load的實質是將文件上傳到hdfs目錄中.

查看數據的三種方式

使用select語句

select * from gfstbl;

2. 通過hdfs集群操作

hdfs dfs -ls /user/hive_meta/warehouse/hive_test.db/gfstbl

hdfs dfs -cat /user/hive_meta/warehouse/hive_test.db/gfstbl/*

3. 通過webUI頁面

??進圖webUI頁面, 找到文件對應位置

查看數組,鍵值對,結構體數據的某個值

??對于 數組 使用 : 列名[索引] 的形式查看(索引下標從0開始)

??對于鍵值對使用 : 列名[“Key”]

??對于結構體使用 : 列名.屬性

select gfs[0],address["Girl2"],info.city from gfstbl;

刪除表的方式

drop table gfstbl2;

??此處需要注意, 如果通過hdfs操作刪除表所在的目錄, hive中表還會存在. 原因在于mysql的hive_meta數據庫中還存有該表的元數據信息.

知識積累

Hive中創建表的三種方式

通過編寫完整的CREATE語句創建, 如上文中我們創建gfstbl時的語句:

CREATE TABLE gfstbl(

  id INT,

  name STRING,

  age INT,

  gfs ARRAY<STRING>,

  address MAP<STRING,STRING>,

  info STRUCT<country:String,province:String,city:String>

)

ROW FORMAT DELIMITED  

FIELDS TERMINATED BY ' ' 

COLLECTION ITEMS TERMINATED BY ','

MAP KEYS TERMINATED BY ':' 

LINES TERMINATED BY '\n';

通過使用CREATE和LIKE關鍵詞創建一個與原來表結構完全相同, 但沒有數據的新表:

create table gfstbl1 like gfstbl;

通過使用CREATE, AS和SELECT關鍵詞創建一個不僅表結構一樣而且數據也一樣的新表:

create table gfstbl2 AS SELECT id,name,gfs,address,info from gfstbl;

??注意, 由于這種方式插入數據使用的是insert來插入數據, 因此會啟動MR任務.

Hive表中插入數據的四種方式

insert 新數據, 最簡單, 最基本也是最少用的方式, 直接寫insert語句.

insert into table(col...) values(val...)

1

load方式, 最常用也是效率最高的方式

??LOAD DATA命令,可分為LOAD DATA LOCAL INPATH和LOAD DATA INPATH。兩者的區別在于LOCAL導入的是本地文件而不加LOCAL的導入的是HDFS文件

LOAD DATA INPATH '/a.txt' INTO TABLE user

1

查詢(select)其他表數據 insert 到新表中

INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;

FROM from_statement

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1

??習慣上使用第二種語法, 即將from語句提前, 減少SQL代碼的冗余.

from user

insert into user_count 

select count(*)

insert into user_copy 

select *;

直接使用hdfs命令將符合格式的文件放到該表在HDFS對應的目錄下

Hive中表的類型

內部表

??與數據庫中的Table在概念上類似, 每一個內部表在Hive中都有一個相應的目錄存數據, 所有表的數據(不包括External Table)都保存在這個目錄中. 如上文中創建的gfstbl表.

??刪除表時,元數據與數據都會刪除.

臨時表

??臨時表的生命周期是一次會話, 當本次會話結束時, 臨時表會自動刪除.

外部表

??刪除表時, 元數據會被刪除, 但數據(存放在HDFS)不會被刪除.

分區表

??將一批數據分成多個目錄來存儲, 從而防止暴力掃描. 分區表分為靜態分區表和動態分區表.

分桶表

??分桶表是對列值取哈希值的方式,將不同數據放到不同文件中存儲. 由列的哈希值除以桶的個數來決定每條數據劃分在哪個桶中, 對于hive中每一個表、分區都可進一步分桶.

以上是“hive基礎操作有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇巴县| 洪江市| 徐汇区| 临澧县| 洪湖市| 乐清市| 时尚| 广东省| 车险| 深水埗区| 康马县| 南雄市| 手机| 开封县| 通海县| 静安区| 新建县| 仁化县| 平江县| 来凤县| 廉江市| 怀化市| 东源县| 利辛县| 霍邱县| 曲周县| 达尔| 广东省| 梅河口市| 阿拉善右旗| 南丹县| 彰武县| 呈贡县| 嘉定区| 万山特区| 烟台市| 合作市| 翁源县| 屯门区| 南漳县| 渭南市|