一、Hive对数据库的基本操作-库、表
1.1规则语法
注释语法:

  • – – 单行注释
  • // 单行注释
  • /*
    *多行注释
    */

大小写规则:

  1. Hive的数据库名、表名都不区分大小写
  2. 建议关键字大写

命名规则

  1. 名字不能使用数字开头
  2. 不能使用关键字
  3. 尽量不使用特殊符号
  4. 如果表比较多,那么表名和字段名可以定义规则加上前缀

快速创建库和表:
– hive有⼀个默认的数据库default,如果不明确的说明要使用哪个库,则使用默认数据
库。
hive> create database zoo;
hive> create database if not exists zoo;
hive> create database if not exists qfdb comment ‘this is a database of xxx’;
– 创建库的本质:在hive的warehouse目录下创建⼀个目录(库名.db命名的目录)
– 切换库:
hive> use zoo;
–创建表
hive> create table t_user(id int,name string);
– 使用库+表的形式创建表:
hive> create table qfdb.t_user(id int,name string);

二、建表语法
Hive的数据类型分为基本数据类型和复杂数据类型,下面是基本数据类型(复杂类型暂无)

下面是⼀个常见的创建表的语法:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] TABLENAME[COLUMNNAME COLUMNTYPE [COMMENT 'COLUMN COMMENT'],...][COMMENT 'TABLE COMMENT'][PARTITIONED BY (COLUMNNAME COLUMNTYPE [COMMENT 'COLUMN
COMMENT'],...)][CLUSTERED BY (COLUMNNAME COLUMNTYPE [COMMENT 'COLUMN
COMMENT'],...) [SORTED BY (COLUMNNAME [ASC|DESC])...] INTO
NUM_BUCKETS BUCKETS][ROW FORMAT ROW_FORMAT][STORED AS FILEFORMAT][LOCATION HDFS_PATH];

如果要看完整的创建表语法,可以参考下面完整创建表语句:

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 [column_constraint_specification] [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)

其中具体创建表的参数类型可以参考如下:

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
column_constraint_specification:: [ PRIMARY KEY|UNIQUE|NOT NULL|DEFAULT [default_value]|CHECK
[check_expression] ENABLE|DISABLE NOVALIDATE RELY/NORELY ]
default_value:: [
LITERAL|CURRENT_USER()|CURRENT_DATE()|CURRENT_TIMESTAMP()|NULL ]
constraint_specification:: [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE RELY/NORELY ][, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE RELY/NORELY ][, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...)
REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE[, CONSTRAINT constraint_name UNIQUE (col_name, ...) DISABLE
NOVALIDATE RELY/NORELY ][, CONSTRAINT constraint_name CHECK [check_expression]
ENABLE|DISABLE NOVALIDATE RELY/NORELY ]

简单例子:

create table t_user
(id int,name string
)
设置按照 '\t' 进行读取文件内容,'\n' 换行row format delimited fields terminated by '\t' lines terminated by '\n';

三、查看表

查看当前数据库中的表:

# 查看当前数据库的表
show tables;
# 查看另外⼀个数据库中的表
show tables in zoo;

查看表结构

# 查看表信息
desc tableName;
# 查看详细信息
desc formatted tableName;
#查看创建表信息
show create table tableName;

四、表类型详解
4.1表分类
在Hive中,表类型主要分为两种:

  • 内部表: 也叫管理表,表目录会创建在hdfs的/user/hive/warehouse/下的相应的库对应的目录中。
  • 外部表: 外部表会根据创建表时LOCATION指定的路径来创建目录,如果没有指定LOCATION,则位置跟内部表相同,⼀般使用的是第三方提供的或者公用的数
    据。

4.2两者之间区别
内部表和外部表在创建时的差别:
就差两个关键字,EXTERNAL LOCATION 举例:

  • 内部表
CREATE TABLE T_INNER(ID INT);
  • 外部表
CREATE EXTERNAL TABLE T_OUTER(ID INT) LOCATION 'HDFS:///AA/BB/XX';

Hive表创建时要做的两件事:

  1. 在HDFS下创建表目录
  2. 在元数据库Mysql创建相应表的描述数据(元数据)

drop时有不同的特性:
1、drop时,元数据都会被清除
2、drop时,内部表的表目录会被删除,但是外部表的表目录不会被删除。

使用场景

  • 内部表:平时用来测试或者少量数据,并且自己可以随时修改删除数据.
  • 外部表:使用后数据不想被删除的情况使用外部表(推荐使用)所以,整个数据仓库的最底层的表使用外部表

五、数据加载
数仓简单介绍

create table if not exists qfuser(id int,name string
)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;
-- 创建表的本质:在使⽤的库⽬录下创建⼀个⽬录(⽬录名就是表名)

5.1加载数据
构建数据

[root@master hive]# mkdir /hivedata
[root@master hive]# cd /hivedata
[root@master hive]# vi user.txt
-- 加⼊下⾯的数据
1,廉德枫
2,刘浩
3,王鑫
4,司翔

加载数据到Hive
加载⼀般分为两种:

  • ⼀种是从本地Linux上加载到Hive中
  • 另外⼀种是从HDFS加载到Hive中
-- 常⽤⽅式:
[root@master hive]# load data [local] inpath '/hivedata/user.txt' [overwrite] into table t_user;-- 从hdfs导⼊user.txt 如果没有加⼊row format ,那么导⼊的全是null
--#提前在root⽬录下上传数据上去
[root@master hive]# hdfs dfs -put /hivedata/user.csv/user/root/user.csv-- 从hdfs中加载数据
[root@master hive]# load data inpath 'user.csv' into table qfuser;
-- 从本地加载数据
[root@master hive]# load data local inpath '/hivedata/user.csv' into table qfuser;

加载数据的本质:

  1. 如果数据在本地,加载数据的本质就是将数据copy到hdfs上的表目录下。
  2. 如果数据在hdfs上,加载数据的本质是将数据移动到hdfs的表目录下。

注意:Hive使用的是严格的读时模式:加载数据时不检查数据的完整性,读时发
现数据不对则使用NULL来代替。 而Mysql使用的是写时模式:在写入数据时就进行检查

5.2 insert into 方式灌入数据
先创建⼀个和旧表结构⼀样的表:

create table qfusernew(id int,name string
) comment 'this is a table'

然后把旧表的数据可以通过查询条件灌入到新表

insert into qfusernew
select * from qfuser where id < 3;

5.3克隆表

5.3.1不带数据,只克隆表的结构

-- 从qfusernew 克隆新的表结构到qfuserold
create table if not exists qfuserold like qfusernew;

5.3.2克隆表并带数据

#如果当前数据库是zoo,那么在下⾯warehouse后要加上当前数据库的名字 zoo.db
create table if not exists t5 like qfusernew location '/user/hive/warehouse/qfusernew';# 查询t5 有具体的数据
select * from t5;
OK
1 zhang
2 li

在创建表时候也可以通过指定location来指定数据位置

create table if not exists t6(id int,name string
) comment 'this is a table'
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile
location '/user/hive/warehouse/qfusernew';-- 注意location后⾯接的⼀定是hdfs中的⽬录,不是⽂件

5.3.3克隆表并带数据
用as是更灵活的方式 , 跟创建表的方式⼀样,元数据和目录都会创建。

create table t7
as
select * from t6;
-- 查看库描述:
desc/describe database [extended] qf1704;
-- 查看表描述:
desc/describe [extended] t7;
-- 查看表结构信息
desc formatted t7;
-- 查看表创建语句,⽐较全
show create table t7;

5.3.4示例
创建表

CREATE TABLE log1(id string COMMENT 'this is id column',mac string,phonenumber bigint,ip string,url string,status1 string,status2 string,upflow int,downflow int,status3 string,dt string
)
COMMENT 'this is log table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
LINES TERMINATED BY '\n'
stored as textfile;
# 在hive提示符下加载数据:
[root@master hive]# load data local inpath '/opt/soft/hive/hivedata/data.txt' into table log1;
# 1、统计每个电话号码的总流量(M)select l.phonenumber,round(sum(l.upflow + l.downflow) / 1024.0,2) as totalfrom log1 lgroup by l.phonenumber;
# 2、第⼆个需求,求访问次数排名前3的url:select l.url url,count(l.url) as urlcountfrom log1 lgroup by l.urlorder by urlcount desclimit 3;

六、表属性修改

6.1修改表名:rename to

alter table t7 rename to a1;

6.2修改列名:change column

alter table a1 change column name name1 string;

6.3修改列的位置:change column

alter table log1 change column ip string after status1;
alter table log1 change column mac string first;

6.4修改字段类型:change column

alter table a1 change column name string;

6.5增加字段:add columns

alter table a1 add columns (sex int);

6.6 替换字段:replace columns

alter table a1 replace columns(id int,name string,size int,pic string);

6.7内部表和外部表转换:

alter table a1 set tblproperties('EXTERNAL'='TRUE'); #内部表转外部表,true⼀定要⼤写;
alter table a1 set tblproperties('EXTERNAL'='false');#false⼤⼩写都没有关系

七、Hive Shell技巧

7.1 查看所有hive参数

# 在hive命令⾏直接输⼊set 即可
hive> set

7.2只执行⼀次Hive命令
通过shell的参数 -e 可以执行一次就运行完的命令

[root@master hive]# hive -e "select * from cat"

小技巧2:可以通过外部命令快速查询某个变量值:hive -S -e “set” |grep cli.print
-S 是静默模式,会省略到多余的输出

7.3单独执行⼀个sql文件
通过参数-f +file文件名就可以,经常用在以后的sql文件单独执行,导入数据场景中

[root@master hive]# hive -f /path/cat.sql

7.4执行Linux命令
在Hive的shell中 加上前缀! 最后以分号;结尾,可以执⾏linux的命令

hive> ! pwd ;

7.5执行HDFS命令
用户可以在Hive的shell中执行HDFS的DFS命令,不用敲入前缀hdfs或者hadoop

hive> dfs -ls /tmp

7.6使用历史命令和自动补全
在Hive的Shell操作中可以使用上下箭头查看历史记录
如果忘记了命令可以用tab键进行补全

7.7显示当前库:
下面是通过配置文件 hive-site.xml 显示

<property><name>hive.cli.print.current.db</name><value>false</value><description>Whether to include the current database in the Hive prompt.</description>
</property>

7.8当前session⾥设置该参数:

hive> set hive.cli.print.current.db=true;

7.9查看当前参数设置的值:

小技巧1:可以在shell中输⼊set命令,可以看到hive已经设定好的参数

hive> set hive.cli.print.current.db;

Hive的进阶(表的操作等)相关推荐

  1. 【阿尼亚喜欢BigData】“红亚杯”数据分析进阶—使用Python操作Hive专题赛——满分解析③

    大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!! 本次为师傅们带来的是"红亚杯"数据分析进阶-使用Python操作Hive专题赛--满分解析系列 ...

  2. 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive数据库和表操作 一.数据库操作 1.创建数据库 2.创建 ...

  3. Hive中外部表的alter与drop操作的最低权限要求

    Hive中外部表的alter与drop操作的最低权限要求: 操作类型 目录权限 数据权限 alter(如修改location) Read .write 0 Drop Read 0 Select Rea ...

  4. 【阿尼亚喜欢BigData】“红亚杯”数据分析进阶—使用Python操作Hive专题赛——满分解析②

    大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!! 本次为师傅们带来的是"红亚杯"数据分析进阶-使用Python操作Hive专题赛--满分解析系列 ...

  5. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  6. Hive详细表结构操作(增加列,删除列,修改列,移动列)

    Hive详细表结构操作(增加列,删除列,修改列,移动列) 1.向Hive表中添加某个字段 格式:alter table 表名 add columns (字段名 字段类型 comment '字段描述') ...

  7. Hive表结构操作(增加列,删除列,修改列,移动列)

    前言 Hive 表结构操作 内容 1.给hive表中添加某个字段: 格式: alter table 表名 add columns (字段名 字段类型 comment '字段描述'): 示例1: alt ...

  8. Hive 基础-进阶

    HIVE基础 1,安装:基于hadoop之上,先安装hadoop,安装在另外一篇博客有详细讲到. 2,hive的管理:cli方式,web界面方式 cli方式:直接输入#hive --service c ...

  9. phalapi-进阶篇4(notrom进阶以及事务操作)

    2019独角兽企业重金招聘Python工程师标准>>> #phalapi-进阶篇4(notrom进阶以及事务操作)# ##前言## 先在这里感谢phalapi框架创始人@dogsta ...

最新文章

  1. 实现等待窗体的几种方式
  2. matlab 基础知识class lt; superclass_name
  3. 服务器硬盘SAS与SATA区别介绍
  4. Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案
  5. 一篇来自前端同学对后端接口的吐槽
  6. 【script】python 使用json模块实现字符串与字典的相互转换
  7. BZOJ.1013.[JSOI2008]球形空间产生器(高斯消元)
  8. PageAbility基本概念
  9. python视频提取关键帧_一种视频关键帧提取算法的制作方法
  10. 标准模板库(STL) map —— 初始化问题
  11. cad相对坐标快捷键_CAD入门必记的15个命令,只要熟悉这15个命令几乎就可以走遍天下...
  12. gabor特征 gabor滤波器
  13. Django框架MVT模型工作流程
  14. Python中随机梯度下降法
  15. 【CNN】——矩阵乘法优化
  16. 一个例程学会使用——模糊逻辑工具箱
  17. oracle 表添加一列
  18. 根本原因分析: 五个为什么 (5 Whys)
  19. 【目标检测论文阅读笔记】QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detection
  20. 【原】C++11并行计算 — 数组求和

热门文章

  1. 算法工程师 -常见面试题
  2. JS判断变量是不是数组的5种方法
  3. 北方民族大学计算机考研科目,北方民族大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  4. Unity内置资源如何打包避免冗余
  5. Vmware虚拟机共享主机网络
  6. JS网页更改背景颜色源代码
  7. 电子相册制作软件-数码大师(附使用方法)
  8. 贵州厉害的计算机学校,贵州2021年计算机学校好点的大专学校
  9. go gin下配置https
  10. NDK--利用OpenSL ES实现播放FFmpeg解码后的音频流