Apache Hive的基本使用语法(二)

Hive SQL操作

7、修改表

  • 表重命名
alter table score4 rename to score5;
  • 修改表属性值
# 修改内外表属性
ALTER TABLE table_name SET TBLPROPERTIES("EXTERNAL"="TRUE");
# 修改表注释
ALTER TABLE table_name SET TBLPROPERTIES ('comment' = new_comment);
ALTER TABLE tablename  ADD PARTITION (month='201101');
  • 修改分区值
ALTER TABLE tablename PARTITION (month='202005') RENAME TO PARTITION (month='201105');
  • 删除分区
ALTER TABLE tablename DROP PARTITION (month='201105');
  • 添加列
ALTER TABLE table_name ADD COLUMNS (v1 int, v2 string);
  • 修改列名
ALTER TABLE test_change CHANGE v1 v1new INT;
  • 清空表(只可以清空内部表)
TRUNCATE TABLE tablename;
  • 删除表
DROP TABLE tablename;

8、数组类型(array)

  • 如下数据文件,有2个列,locations列包含多个城市:
    说明:name与locations之间制表符分隔,locations中元素之间逗号分隔
    在这里插入图片描述
    可以使用array数组类型,存储locations的数据
    建表语句:
create table myhive.test_array(name string, work_locations array<string>)
row format delimited fields terminated by '\t'
COLLECTION ITEMS TERMINATED BY ',';

在这里插入图片描述

  • 常用查询语句
# 查询所有数据
select * from myhive.test_array;
# 查询loction数组中第一个元素
select name, work_locations[0] location from myhive.test_array;
# 查询location数组中元素的个数
select name, size(work_locations) location from myhive.test_array;
# 查询location数组中包含tianjin的信息
select * from myhive.test_array where array_contains(work_locations,'tianjin');

9、映射类型(map)

  • map类型其实就是简单的指代:Key-Value型数据格式。 有如下数据文件,其中members字段是key-value型数据
    字段与字段分隔符: “,”;需要map字段之间的分隔符:“#”;map内部k-v分隔符:“:”
    在这里插入图片描述
  • 建表语句
create table myhive.test_map(
id int, name string, members map<string,string>, age int
)
row format delimited
fields terminated by ','
COLLECTION ITEMS TERMINATED BY '#' 
MAP KEYS TERMINATED BY ':';

在这里插入图片描述

  • 常用查询语句
# 查询全部
select * from myhive.test_map;
# 查询father、mother这两个map的key
select id, name, members['father'] father, members['mother'] mother, age from myhive.test_map;
# 查询全部map的key,使用map_keys函数,结果是array类型
select id, name, map_keys(members) as relation from myhive.test_map;
# 查询全部map的value,使用map_values函数,结果是array类型
select id, name, map_values(members) as relation from myhive.test_map;
# 查询map类型的KV对数量
select id,name,size(members) num from myhive.test_map;
# 查询map的key中有brother的数据
select * from myhive.test_map where array_contains(map_keys(members), 'brother');

10、结构类型(struct)

  • struct类型是一个复合类型,可以在一个列中存入多个子列,每个子列允许设置类型和名称
    有如下数据文件,说明:字段之间#分割,struct之间冒号分割
    在这里插入图片描述
  • 建表语句
create table myhive.test_struct(
id string, info struct<name:string, age:int>
)
row format delimited
fields terminated by '#'
COLLECTION ITEMS TERMINATED BY ':';
  • 常用查询
select * from hive_struct;
# 直接使用列名.子列名 即可从struct中取出子列查询
select ip, info.name from hive_struct;

11、数据查询

  • 查询语句基本语法如下(跟普通数据库sql查询基本一样):
    SELECT [ALL | DISTINCT]select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BYcol_list] [HAVING where_condition] [ORDER BYcol_list] [CLUSTER BYcol_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMIT number]
# 排序查询
SELECT * FROM orders WHERE useraddress like '%广东%' ORDER BY totalmoney DESC LIMIT 1;
# 分组查询
SELECT userid, AVG(totalmoney) AS avg_money FROM itheima.orders GROUP BY userid HAVING avg_money > 10000;
# Join连接查询
SELECT o.orderid, o.userid, u.username, o.totalmoney, o.useraddress, o.paytime FROM itheima.orders o LEFT JOIN itheima.users u ON o.userid = u.userid;
# RLIKE查询(支持正则)
SELECT * FROM itheima.orders WHERE useraddress RLIKE '.*广东.*';
SELECT * FROM itheima.orders WHERE userphone  RLIKEE '188\\S{4}0\\S{3}';
# UNION查询
SELECT t_id FROM itheima.course WHERE t_id = '周杰轮'
		UNION ALL
	SELECT t_id FROM itheima.course WHERE t_id = '王力鸿'

12、数据抽样

  • 基于随机分桶抽样语法:
    SELECT ... FROM tbl TABLESAMPLE(BUCKET x OUT OF y ON(colname | rand()))
SELECT * FROM orders TABLESAMPLE(BUCKET 1 OUT OF 10 ON rand());
  • 基于数据块抽样语法(每一次抽样的结果都一致):
    SELECT ... FROM tbl TABLESAMPLE(num ROWS | num PERCENT | num(K|M|G));
  1. num ROWS 表示抽样num条数据
  2. num PERCENT 表示抽样num百分百比例的数据
  3. num(K|M|G) 表示抽取num大小的数据,单位可以是K、M、G表示KB、MB、GB
SELECT * FROM orders TABLESAMPLE(num rows);

13、虚拟列

  • 虚拟列是Hive内置的可以在查询语句中使用的特殊标记,可以查询数据本身的详细参数。
  • Hive目前可用3个虚拟列:
  1. INPUT__FILE__NAME,显示数据行所在的具体文件
  2. BLOCK__OFFSET__INSIDE__FILE,显示数据行所在文件的偏移量
  3. ROW__OFFSET__INSIDE__BLOCK,显示数据所在HDFS块的偏移量
    注:此虚拟列需要设置:SET hive.exec.rowoffset=true 才可使用
SELECT *, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK FROM course;

Hive函数

  • Hive的函数分为两大类:内置函数(Built-in Functions)、用户定义函数UDF(User-Defined Functions):
    在这里插入图片描述
    Hive函数官方文档,点此查看
  • Hive内置函数(举例说明)
# 查看当下可用的所有函数
show functions
# 查看函数的使用方式
describe function extended funcname
  • 数学函数
# 取整函数: round  返回double类型的整数值部分 (遵循四舍五入)
select round(3.1415926);
# 指定精度取整函数: round(double a, int d) 返回指定精度d的double类型
select round(3.1415926,4);
# 取随机数函数: rand 每次执行都不一样 返回一个0到1范围内的随机数
select rand();
# 指定种子取随机数函数: rand(int seed) 得到一个稳定的随机数序列
select rand(3);
# 求数字的绝对值
select abs(-3);
# 得到pi值(小数点后15位精度)
select pi();
  • 集合函数
    在这里插入图片描述
  • 类型转换函数
    在这里插入图片描述
  • 日期函数
    在这里插入图片描述
  • 条件函数
    在这里插入图片描述
  • 数据脱敏函数
    在这里插入图片描述
  • 字符串函数
    在这里插入图片描述
  • 其他函数
    在这里插入图片描述
    至此,Apache Hive的基本使用语法分享结束!!!

相关推荐

  1. django基本使用-ORM()

    2024-03-29 05:24:09       41 阅读
  2. Vue笔记(基本语法

    2024-03-29 05:24:09       49 阅读
  3. lua基本语法使用

    2024-03-29 05:24:09       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 05:24:09       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 05:24:09       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 05:24:09       82 阅读
  4. Python语言-面向对象

    2024-03-29 05:24:09       91 阅读

热门阅读

  1. 10.windows ubuntu 组装软件:spades,megahit

    2024-03-29 05:24:09       39 阅读
  2. Ubuntu下显卡超频和提高功耗方式

    2024-03-29 05:24:09       46 阅读
  3. 【PostgreSQL】- 1.1 在 Debian 12 上安装 PostgreSQL 15

    2024-03-29 05:24:09       50 阅读
  4. Docker版本:18.06.1安装

    2024-03-29 05:24:09       35 阅读
  5. Debian GNU/Linux 安装docker与docker compose

    2024-03-29 05:24:09       33 阅读
  6. vue3中onUnmounted详解

    2024-03-29 05:24:09       40 阅读
  7. Linux(CentOS)/Windows-C++ 云备份项目(结项,项目总结)

    2024-03-29 05:24:09       41 阅读
  8. Kotlin:@JvmOverloads注解

    2024-03-29 05:24:09       41 阅读