SQL-Hive中常用的表格操作
本文轉(zhuǎn)載自微信公眾號(hào)「巡山貓說(shuō)數(shù)據(jù)」,作者巡山貓。轉(zhuǎn)載本文請(qǐng)聯(lián)系巡山貓說(shuō)數(shù)據(jù)公眾號(hào)。
今天我們來(lái)講講Hive中常用的表格操作指令及相關(guān)效果。
Hive系列文章預(yù)計(jì)10-20篇,主要講數(shù)據(jù)分析中最基礎(chǔ)的SQL技能。
01-最基礎(chǔ)的建表語(yǔ)句
Hive建表的全部建表語(yǔ)法如下:
- CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 表名
- (列名 data_type [COMMENT 列注釋], ...)
- [COMMENT 表注釋]
- [PARTITIONED BY (列名 data_type [COMMENT 列注釋], ...)]
- [CLUSTERED BY (列名, 列名, ...)
- [SORTED ,BY (列名 [ASC|DESC], ...)] INTO num_buckets BUCKETS]
- [ROW FORMAT row_format]
- [STORED AS file_format]
- [LOCATION hdfs_path]
所有[ ]中的內(nèi)容都是可選項(xiàng),即可有可無(wú),下面我們分別詳細(xì)介紹。
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 表名
(列名 data_type)
是建表語(yǔ)句必須有的,舉個(gè)例子,我們要建立一個(gè)用戶啟動(dòng)表:
- CREATE TABLE t_od_use_cnt (
- date_8 INT
- ,platform string
- ,app_version string
- ,user_id BIGINT
- ,use_cnt INT
- ,is_active TINYINT
- );
首先我們建一個(gè)庫(kù)app,然后使用并在其中建表,執(zhí)行效果如下:
- hive> create database app;
- OK
- Time taken: 0.899 seconds
- hive> use app;
- OK
- Time taken: 0.03 seconds
- hive> create table t_od_use_cnt(
- > date_8 int
- > ,platform string
- > ,app_version string
- > ,user_id bigint
- > ,use_cnt int
- > ,is_active tinyint
- > );
- OK
- Time taken: 0.389 seconds
備注:Hive中的關(guān)鍵字大小寫是不區(qū)分的,所有關(guān)鍵字均可使用小寫。
02-查看表結(jié)構(gòu)
執(zhí)行語(yǔ)句:
- DESC 表名;
查詢上一步新建表的字段及字段對(duì)應(yīng)的數(shù)據(jù)類型,運(yùn)行效果如下:
- hive> desc t_od_use_cnt;
- OK
- date_8 int
- platform string
- app_version string
- user_id bigint
- use_cnt int
- is_active tinyint
- Time taken: 0.28 seconds, Fetched: 6 row(s)
03-刪除表
刪除表的語(yǔ)句和刪除庫(kù)的類似,只是把database換成了table,都是使用drop關(guān)鍵字進(jìn)行刪除操作,慎重操作:
- DROP TABLE 表名;
04-建分區(qū)表
Hive中有分區(qū)表的概念,分區(qū)表改變了Hive對(duì)數(shù)據(jù)存儲(chǔ)的組織方式。查詢時(shí)如果我們限定了分區(qū)范圍,Hive就可以直接去相應(yīng)的目錄下查詢數(shù)據(jù),而不需要掃描整個(gè)表,所以當(dāng)數(shù)據(jù)量很大時(shí)可以顯著提高查詢性能。
建立分區(qū)表要使用關(guān)鍵字[PARTITIONED BY (col_name data_type[COMMENT col_comment], ...)] ,注意分區(qū)的字段不可在普通字段中重復(fù)出現(xiàn)。分區(qū)表在工作中十分常見(jiàn),一般來(lái)說(shuō)公司所有的表都會(huì)以日期進(jìn)行分區(qū),以便提高查詢效率。
我們還是以t_od_use_cnt為例,建表語(yǔ)句如下:
- CREATE TABLE t_od_use_cnt (
- platform string comment '平臺(tái) android,ios'
- ,app_version string comment 'app版本'
- ,user_id BIGINT comment '用戶id'
- ,use_cnt INT comment '當(dāng)日使用次數(shù)'
- ,is_active TINYINT comment '是否活躍'
- ) partitioned BY (date_8 INT comment '日期');
05-查詢既有建表語(yǔ)句
在公司中需要查詢既有表的建表格式時(shí)使用以下語(yǔ)句即可:
- show create table tablename;
查詢上文已建表格效果如下:
- hive> show create table t_od_use_cnt;
- OK
- CREATE TABLE `t_od_use_cnt`(
- `platform` string COMMENT '平臺(tái) android,ios',
- `app_version` string COMMENT 'app版本,',
- `user_id` bigint COMMENT '用戶id',
- `use_cnt` int COMMENT '當(dāng)日使用次數(shù)',
- `is_active` tinyint COMMENT '是否活躍')
- PARTITIONED BY (
- `date_8` int COMMENT '日期')
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY ','
- STORED AS INPUTFORMAT
- 'org.apache.hadoop.mapred.TextInputFormat'
- OUTPUTFORMAT
- 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
- LOCATION
- 'hdfs://hadoop:9000/usr/hive/warehouse/t_od_use_cnt'
- TBLPROPERTIES (
- 'transient_lastDdlTime'='1556161316')