美文网首页
Hive sql常见操作

Hive sql常见操作

作者: nlpming | 来源:发表于2020-08-27 20:50 被阅读0次

1. 基本sql操作

-- 设置队列
set mapreduce.job.queuename=xxxxx;

-- 创建和删除数据库
create database if not exists userdb;
drop databases if exists userdb;

-- 列出所有数据库
show databases;  

-- 使用数据库
use databases;

-- 列出数据库中所有的表
show tables;

-- 列出表中的所有字段
desc table;

-- 统计表的行数
show count(*) from table;

2. hive表操作

-- 创建hive表
create external table if not exists table_name (
  `id` string comment 'id号',
  `name` string comment '名字',
  `height` double comment '身高',
) comment '学生信息表'
partition by (dt string)
row format delimited
fields terminated by '\t'
lines terminated by '\n'
stored as textfile
location 'hdfs文件路径';

-- 删除hive表
drop table if exists table_name;

-- 插入到Hive表
insert overwrite table sale_detail_insert partition (sale_date='2013', region='china')
select customer_id, shop_name, total_price from sale_detail;   

3. 分区操作

-- 删除分区
alter table table_name drop if exists partition(dt = '20200820');

-- 新建分区,存入数据
alter table table_name add if not exists partition(dt = '20200820') location 'hdfs文件路径';

-- 重命名分区
alter table table_name partition xxxxx rename to partition xxxxx;

4. sql高级操作

--- 排序
SELECT id, name, gender, score FROM students ORDER BY score;  -- 正排
SELECT id, name, gender, score FROM students ORDER BY score DESC; -- 倒排
SELECT id, name, gender, score FROM students ORDER BY score DESC, gender;

-- 分页
SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 6;  -- 查询第3页, 第一个是偏移量;OFFSET代表初始偏移;

select id
for students
limit 1,1  -- LIMIT后的第一个参数是输出记录的初始位置,第二个参数偏移量,偏移多少,输出的条目就是多少。

-- 聚合查询
SELECT COUNT(*) FROM students;
SELECT AVG(score) average FROM students WHERE gender = 'M';

-- 分组查询
SELECT COUNT(*) num FROM students GROUP BY class_id; -- 按照class_id分组
SELECT class_id, gender, COUNT(*) num FROM students GROUP BY class_id, gender; -- 按照class_id, gender分组

-- 多表查询
SELECT
    students.id sid,
    students.name,
    students.gender,
    students.score,
    classes.id cid,
    classes.name cname
FROM students, classes;

SELECT
    s.id sid,
    s.name,
    s.gender,
    s.score,
    c.id cid,
    c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;

-- 连接查询
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id; -- INNER JOIN查询(内连接)

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
RIGHT OUTER JOIN classes c
ON s.class_id = c.id; -- RIGHT OUTER JOIN查询(外连接)

-- 多表连接查询
select * 
from (
    select userId from table_a where dt=20160731
) a join (
    select userId from table_b where dt=20160731
) b  on a.userId=b.userId 
join (
    select userId from table_c where dt=20160731
) c on a.userId=c.userId

-- with as 语句优化sql
WITH t1 AS (
        SELECT *
        FROM carinfo
    ), 
    t2 AS (
        SELECT *
        FROM car_blacklist
    )
SELECT *
FROM t1, t2

5. Hive内置函数

(1)数学函数
  • 常用的数学函数都有:round、floor、ceil、rand、exp 等;
(2)集合函数
  • size:求数组的长度;
  • sort_array:对数组进行排序并返回;
(3)数据类型转换
  • binary:将输入的数字转为二进制;
  • cast:将输入的数据转为特定的类型; 如:cast("1" as BIGINT) 将字符串1转换成了BIGINT类型,如果转换失败将返回NULL;
(4)日期函数
  • from_unixtime(bigint unixtime[, string format]):将时间的秒值转换成format格式(format可为“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh”,“yyyy-MM-dd hh:mm”等等)如from_unixtime(1250111000,"yyyy-MM-dd") 得到2009-03-12
  • unix_timestamp(string date):将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成时间戳 如unix_timestamp('2009-03-20 11:30:01') = 1237573801;
  • to_date(string timestamp):Returns the date part of a timestamp string: to_date("1970-01-01 00:00:00") = "1970-01-01". 返回时间字符串的日期部分;
  • current_date:返回当前的时间日期;
  • current_timestamp:返回当前的时间戳;
(5)条件函数
  • if(boolean testCondition, T valueTrue, T valueFalseOrNull):如果testCondition 为true就返回valueTrue, 否则返回valueFalseOrNull;
  • isnull(a):如果a为null就返回true,否则返回false;
  • isnotnull(a):如果a为非null就返回true,否则返回false;
(6)字符串函数
  • concat(string|binary A, string|binary B...):对字符串进行拼接;
  • concat_ws(string SEP, string A, string B...):使用指定的分隔符sep,对字符串进行拼接;
  • get_json_object(string json_string, string path):解析json字符串,例如:get_json_object(para['response'], '$.result')
  • instr(string str, string substr):查找字符串str中子字符串substr出现的位置,如果查找失败将返回0,如果任一参数为Null将返回null,注意位置为从1开始的;
  • length(string A):返回字符串长度;
  • locate(string substr, string str[, int pos]):查找字符串str中的pos位置后字符串substr第一次出现的位置;
  • lower(string A):将所有字符串变成小写;
  • regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT):按照Java正则表达式PATTERN将字符串INTIAL_STRING中符合条件的部分成REPLACEMENT所指定的字符串;
  • reverse(string A):反转字符串;
  • trim(string A):将字符串A中前后出现的空格去除;
  • levenshtein(string A, string B):计算两个字符串之间的差异大小 如:levenshtein('kitten', 'sitting') = 3;
(7)聚合函数
  • coutn(*):统计总行数,包括含有NULL值的行;
  • sum(col):表示求指定列的和;
  • 其他函数:avg, min, max, variance 等;

参考资料

相关文章

  • Hive sql常见操作

    基本sql操作 hive表操作 分区操作 Hive内置函数 (1)数学函数 常用的数学函数都有:round、flo...

  • 大数据分析利器之hive(三)

    大数据分析利器之hive 一、课前准备 安装hive环境 掌握hive sql常见的DDL和DML操作 掌握hiv...

  • 记录一次 hadoop+tornado 简单实践(二) -- h

    hive 数据库操作 hive 支持大部分的 sql 语法,因此熟悉 sql 可以很方便的上手 hive 操作 h...

  • 大数据分析利器之hive(四)

    一、课前准备 1. 安装hive环境2. 掌握hive sql常见的DDL和DML操作 二、课堂主题 本堂课主要围...

  • [译]Hive学习指南(二)

    Hive SQL的能力 Hive's SQL提供了基本SQL操作。这些操作作用于表和分区,具有以下能力: 可使用W...

  • python3 windows使用pyhive连接Hive

    背景:工作需要,使用 python 操作 hive sql 查询数据使用。目标:使用pyhive连接上hive,并...

  • 2.HiveQL:数据定义

    HiveQL和SQL的区别 1.hive不支持行级插入操作,更新操作和删除操作。hive也不支持事务。 1.创建数...

  • Hive 工作原理

    Hive SQL任务本质上最后是转化成了 MapReduce 任务执行。 MapReduce 实现 SQL 常见操...

  • Hive数据源实战

    Spark SQL支持对Hive中存储的数据进行读写。操作Hive中的数据时,必须创建HiveContext,而不...

  • Hive基础操作

    引入Hive的原因 使用SQL操作HDFS上的数据 Hive内部是什么 Hive二进制分支版本包括三部分 Java...

网友评论

      本文标题:Hive sql常见操作

      本文链接:https://www.haomeiwen.com/subject/jojhsktx.html