欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hive sql

程序员文章站 2022-05-18 17:16:08
...

hive是什么

hive是hadoop的一个数据仓库工具,可以将结构化的数据文件映射丞一张数据库表,并提供类SQL的查询功能。可以将sql语句转换为MapReduce任务进行运行。
官方介绍:https://cwiki.apache.org/confluence/display/Hive#Home-UserDocumentation

hive sql语法及函数

一. 语法:
hive sql与sql的语法大部分都是相同的,主要差异点罗列如下:

  1. hive不支持等值连接
    sql中两表内联可以写成:select * from dual a,dual b where a.key = b.key
    而在hive sql则为:select * from dual a join dual b on a.key = b.key
  2. 分号字符识别不智能,解决办法是使用分号的八进制ASCII码进行转义。
  3. hive sql null和空值处理依赖底层采用什么什么字符表示null

二. 函数
hive sql系统自带函数我们可以通过show functions来查看,用法及详情用法可以通过desc function upper ,desc function upper 了解。
在工作中常用的几类函数如下:

  1. 时间函数:
    from_unixtime:转化unix时间戳到当前时区的时间格式
    unix_timestamp:获取当前unix时间戳
    我们可以通过 from_unixtime+ unix_timestamp 对yyyymmdd和yyyy-mm-dd日期之间的切换

    --2017-12-05转成20171205
    select from_unixtime(unix_timestamp('2017-12-05','yyyy-mm-dd'),'yyyymmdd') from dual;
    
  2. 类型转换:
    CAST 函数:语法为cast(value AS TYPE)
    将 STRING 转为 BIGINT : SELECT CAST('00321' AS BIGINT) FROM table;

  3. 字符串函数
    concat: 字符串连接
    concat_ws:带分隔符字符串连接
    get_json_object:json解析
    split:分隔字符串

  4. 条件判断:
    IF( Test Condition, True Value, False Value ) 如果判断条件为true,则返回True Value
    CASE Statement 多条件判断返回
    COALESCE( value1,value2,... ) 返回第一个不为null的值
    nvl,NVL2 根据第一个参数是否为空,显示后面参数的值
    NULLIF NULLIF(exp1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值。

三. 建表及数据导入

  1. 查看表信息
    SHOW TABLES '.*s' 列出所有以‘s’结尾的表(正则模式使用Java的规则)
    DESCRIBE aaa 列出表中的字段信息
  2. DDL
-- 创建一个名为pokes的表,包括两个字段,第一个字段foo是整型,第二个字段bar是字符串
CREATE TABLE pokes (foo INT, bar STRING);
-- 创建一个名为invites的表,包括两个字段(列):foo、bar,和一个分区字段(列)ds。分区字段是虚拟的字段(列)
CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
-- 删除表
drop table is exists invites;
  1. 数据导入
-- 本地导入
LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
-- 从其他表导入
INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
-- 从其他表导入
FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;