新朋友點擊藍字關注我哦
你好,我是巡山貓!
今天我們來講講Hive中常用的表格操作指令及相關效果。
Hive系列文章預計10-20篇,主要講數據分析中最基礎的SQL技能。每周定期更新,歡迎關注公眾號。
01-最基礎的建表語句
Hive建表的全部建表語法如下:
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]
所有[ ]中的內容都是可選項,即可有可無,下面我們分別詳細介紹。
[] TABLE [IF NOT ] 表名
(列名 )
是建表語句必須有的,舉個例子,我們要建立一個用戶啟動表:
CREATE TABLE t_od_use_cnt (
date_8 INT
,platform string
,app_version string
,user_id BIGINT
,use_cnt INT
,is_active TINYINT
??????);
首先我們建一個庫app,然后使用并在其中建表,執行效果如下:
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中的關鍵字大小寫是不區分的,所有關鍵字均可使用小寫。
02-查看表結構執行語句:
DESC?表名;
查詢上一步新建表的字段及字段對應的數據類型,運行效果如下:
desc t_od_use_cnt;
OK
date_8 int
platform string
app_version string
user_id bigint
use_cnt int
is_active tinyint
?0.28?seconds,?Fetched:?6?row(s) :
03-刪除表
刪除表的語句和刪除庫的類似,只是把換成了table,都是使用drop關鍵字進行刪除操作,慎重操作:
DROP?TABLE?表名;
04-建分區表Hive中有分區表的概念,分區表改變了Hive對數據存儲的組織方式。查詢時如果我們限定了分區范圍,Hive就可以直接去相應的目錄下查詢數據,而不需要掃描整個表,所以當數據量很大時可以顯著提高查詢性能。
建立分區表要使用關鍵字[ BY ( [ ], ...)] ,注意分區的字段不可在普通字段中重復出現。分區表在工作中十分常見,一般來說公司所有的表都會以日期進行分區hive 用中間表,以便提高查詢效率。
我們還是以為例hive 用中間表,建表語句如下:
CREATE TABLE t_od_use_cnt (
platform string comment '平臺 android,ios'
,app_version string comment 'app版本'
,user_id BIGINT comment '用戶id'
,use_cnt INT comment '當日使用次數'
,is_active TINYINT comment '是否活躍'
??????)?partitioned?BY?(date_8?INT?comment?'日期');
05-查詢既有建表語句在公司中需要查詢既有表的建表格式時使用以下語句即可:
show?create?table?tablename;
查詢上文已建表格效果如下:
hive> show create table t_od_use_cnt;
OK
CREATE TABLE `t_od_use_cnt`(
`platform` string COMMENT '平臺 android,ios',
??`app_version`?string?COMMENT?'app版本,',?
??`user_id`?bigint?COMMENT?'用戶id',?
??`use_cnt`?int?COMMENT?'當日使用次數',?
??`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')