「基础」SQL-Hive中常用的表格操作(上)

2021-05-18 10:02:59 浏览数 (1)

今天我们来讲讲Hive中常用的表格操作指令及相关效果。

Hive系列文章预计10-20篇,主要讲数据分析中最基础的SQL技能。每周定期更新,欢迎关注公众号。

01-最基础的建表语句

Hive建表的全部建表语法如下:

代码语言:javascript复制
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]

所有[ ]中的内容都是可选项,即可有可无,下面我们分别详细介绍。

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 表名 (列名 data_type)

是建表语句必须有的,举个例子,我们要建立一个用户启动表:

代码语言:javascript复制
CREATE TABLE t_od_use_cnt (
      date_8 INT
      ,platform string
      ,app_version string
      ,user_id BIGINT
      ,use_cnt INT
      ,is_active TINYINT
      );

首先我们建一个库app,然后使用并在其中建表,执行效果如下:

代码语言:javascript复制
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-查看表结构

执行语句:

代码语言:javascript复制
DESC 表名;

查询上一步新建表的字段及字段对应的数据类型,运行效果如下:

代码语言:javascript复制
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-删除表

删除表的语句和删除库的类似,只是把database换成了table,都是使用drop关键字进行删除操作,慎重操作:

代码语言:javascript复制
DROP TABLE 表名;

04-建分区表

Hive中有分区表的概念,分区表改变了Hive对数据存储的组织方式。查询时如果我们限定了分区范围,Hive就可以直接去相应的目录下查询数据,而不需要扫描整个表,所以当数据量很大时可以显著提高查询性能。

建立分区表要使用关键字[PARTITIONED BY (col_name data_type[COMMENT col_comment], ...)] ,注意分区的字段不可在普通字段中重复出现。分区表在工作中十分常见,一般来说公司所有的表都会以日期进行分区,以便提高查询效率。

我们还是以t_od_use_cnt为例,建表语句如下:

代码语言:javascript复制
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-查询既有建表语句

在公司中需要查询既有表的建表格式时使用以下语句即可:

代码语言:javascript复制
show create table tablename;

查询上文已建表格效果如下:

代码语言:javascript复制
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')

以上,就是本期内容。

0 人点赞