基础语句

CREATE DROP 建表、删表

  • 建表
--------------------------------------
-- 1. 直接建表
-------------------------------------- -- 创建非分区表时,省去后半部分即可
create table if not exists table_name(
id string comment 'id ',
num string comment '数值'
)
partitioned by (
ym string comment '月份 '
); --------------------------------------
-- 2. 复制其他表的表结构
--------------------------------------
create table if not exists new_table like old_table; --------------------------------------
-- 3. 从其他表选取数据创建并插入新表
--------------------------------------
create table if not exists new_table as
select * from old_table;
  • 删表
drop table table_name ;

ALTER 更改表结构

分区

  • 添加分区
alter table table_name
add if not exists partition (y='2016',m='12');
  • 删除分区
ALTER TABLE table_name DROP IF EXISTS PARTITION (ym='201706');
  • 重命名分区
 ALTER TABLE table_name PARTITION (y='2017',m='05')
RENAME TO PARTITION (y='2017',m='06');

  • 删除列
ALTER TABLE table_name DROP COLUMN id;
  • 增加列
Alter table table_name add COLUMNS (id string comment '代号');
  • 修改列 (此处可用于 修改字段注释)
ALTER TABLE table_name CHANGE id level string comment '层级代号';
  • 替换列
ALTET TABLE table_name REPLACE COLUMNS
(id_new string COMMENT '新字段1', level_new string COMMENT '新字段2');

  • 重命名表名
ALTER TABLE old_table RENAME TO new_table;

INSERT 插入

  • 插入单条数据 (Hive 已支持单条插入)
 insert into table_name  values(201705,'lol');
  • 插入分区表
 insert overwrite table  table_name   PARTITION (y='2017',m='01')
select *
from table_name_2
where pt = concat('2017','01');

LOAD 载入

  • 重写载入分区表 (非分区表同理)
LOAD DATA LOCAL INPATH 'total.txt' overwrite into table table_name partition (y='2016',m='12');

其他语句

  • 其他基础SQL类似的语句不再赘述,此处再多列举几个常用语句:
-- 列举库或表
SHOW DATABASES/TABLES;
-- 根据关键字查找库或表
SHOW DATABASES/TABLES LIKE "*keyword*";
-- 列举所有函数
SHOW FUNCTIONS;
-- 查看分区
SHOW PARTITIONS test_table;
-- 查看建表语句
SHOW CREATE TABLE table_name;
-- 详细描述,包括建表时间、最后更新时间、行数统计等。
DESC FORMATTED test_table;
-- 解释语句
EXPLAIN select * from dual;
-- 清空表
truncate table table_name;

函数、技巧、方法

  • 执行顺序理解 
    根据 explain 语句的使用发现,在执行以下语句时: 
    TableScan步骤,where条件中若有分区筛选条件且目标分区确实存在、且判断方式为=时,自动进行过滤, 然后再在Filter Operator进行其他条件的筛选: 
    predicate: (latitude is not null and (UDFToDouble(longitude) > 100.0) AND (UDFToDouble(ym) > 201701.0)) (type: boolean) 
    predicate: (lat_avg is not null and lng_avg is not null) (type: boolean) 
    所以, 先join在where和先where在join是等等价的
  select b.*, a.name,a.price,a.city
from table_name_a a
join table_name_b b
on round(b.lng_avg,2) = round(a.longitude,2)
and round(b.lat_avg,2) = round(a.latitude,2)
where a.longitude >100
  • shell内通过hive -v " "调用执行HiveQL语句时,如需要注释,请注意转义问题

    1. 注释的那条语句不能含有分号;
    2. 注释语句后接语句尽量避免导jar包的语句
    3. 避免使用 /* */
  • 选择除某几个字段外的所有字段 
    当某个表的字段特别多,若想选取除某几个字段外的所有字段时,这时语句写起来就会很麻烦,比如有时两个表join的条件的字段名相同时,只能保留一个字段。但有一个方法可以解决这个问题,如下:

set hive.support.quoted.identifiers=none;
select `(y|m|d)?+.+` from dual;
需注意:
括号内不能有空格
在shell里调用时需要对这个反引号进行转义
  • 通过concat_wscollect_setstr_to_map的使用,实现字符串转map
str_to_map(concat_ws(',',collect_set(concat_ws(':',key, cast(value as string)))))
  • avg()函数会自动剔除NULL,总数除以非NULL个数
  • 字符串截取函数substrsubstring是等价的 
    substr(string A, int start, int len) 
    substring(string A, int start, int len)
  • x between a and b 等同于 a<= x <=b

  • 子查询加最好要加别称 
    报错:Failed rule: ‘identifier’ in subquery source 
    解决:子查询加 别称

  • 设置队列问题, mapred.job.queue.namemapreduce.job.queuename

set mapred.job.queue.name=queue_xx;

MRv2重新命名了MRv1中的所有配置参数,但兼容MRv1中的旧参数,只不过会打印一条警告日志提示用户参数过期。详见此篇博文

  • 查询表的实际更新情况 
    desc formatted 的结果往往只有CreateTimeLastAccessTime经常为UNKNOWN的状态,可以用hadoop 指令去查询数据文件的真实更新时间:hadoop fs ‐ls truePath/databaseName.db/tableName/

调优

占个坑,有时间再来填

Hive里的坑点

  • limit m,n 的问题 
    使用语句:create table a as select * from b limit m,n时,会导致新建表a内无数据,解决办法: 
    1. 看似可以其实并不好使: create table a as select * from (select * from b limit m,n ) t
    2. 解决: 使用row_number() 加序号,根据序号选取
  • NULL 值问题 
    1. length(NULL) 等于NULL
    2. NULL空字符串
      由下可见:NULL不可以与字符串或数值比较,''可与字符串比较但不可与数值比较
hive (xx_safe)> select * from dual;
OK
dual.lol
100
50
1
1
2
fangjiale
NULL
--(此处为'')
hive (xx_safe)> select * from dual where lol !='1';
OK
dual.lol
fangjiale
100
50
2
--(此处为'')
hive (xx_safe)> select * from dual where lol !=1;
OK
dual.lol
100
50
2

Hive HiveQL基础知识及常用语句总结的更多相关文章

  1. Hive 这些基础知识,你忘记了吗?

    Hive 其实是一个客户端,类似于navcat.plsql 这种,不同的是Hive 是读取 HDFS 上的数据,作为离线查询使用,离线就意味着速度很慢,有可能跑一个任务需要几个小时甚至更长时间都有可能 ...

  2. Shell编程(二)——shell的基础知识及常用命令

    shell的基础知识 一.bash有以下特点: 1.记录命令历史 2.指令和文件名补全 3.别名 alias rm='rm -i' 4.通配符 * 0个或多个字符 ?​匹配一个字符 5 输入输出重定向 ...

  3. Hive(一)基础知识

    一.Hive的基本概念 (安装的是Apache hive 1.2.1) 1.hive简介 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表, 并提供类 SQ ...

  4. MySQL基础知识和常用命令总结

    说明:以下内容是阅读书籍<<MySQL必知必会>>的摘要和总结 检索数据 排序检索数据 过滤数据 使用通配符过滤 使用正则表达式进行搜索 创建计算字段 使用数据处理函数 汇总数 ...

  5. loadrunder之脚本篇——脚本基础知识和常用操作

    1)编码工具设置 自动补全输入Tools->General Options->Environment->Auto complete word 显示功能语法Tools->Genr ...

  6. [基础学习]MySQL常用语句命令总结

    前言 相信平时大家在开发时都会使用MySQL数据库,它是目前比较火的一款数据库工具,对于大多数企业的业务来说,MySQL可以很完美地支持了. 很多时候我们都是借助mysql可视化工具操作mysql,虽 ...

  7. Git基础知识与常用命令

    一:相关概念: 1:工作区(Working Directory): 就是你在电脑里能看到的目录 2:版本库(Repository): 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. ...

  8. (转)rabbitMQ基础知识及命令语句

    摘要: 整理rabbitmq的用户管理相关知识,备忘 安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败. ...

  9. python - 基础知识,if语句

    一.认识计算机 计算机是一个高度集成的电子电路. 组成:CPU(中央处理器).内存 .主板 .电源(心脏) .显示器  .键盘  .鼠标  .显卡(NAVID,AMD) .硬盘 操作系统 :Windo ...

随机推荐

  1. 八. jenkins参数化构建 git分支

    使用git管理代码时往往会有多分支开发,这时部署通过修改配置不试用.可以通过参数化构建. 1.通过字符参数方式 新建一个maven项目,选择参数化构建过程-字符参数,如下: 源码管理中配置如下: 其它 ...

  2. English-spoken

    May i come in? 我可以进来么? May I introduce myself? 我能做个自我介绍么? I'm sorry I didn't hear that clearly. May ...

  3. 数据结构C语言实现

    顺序表实现 typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Po ...

  4. QTP 保留对象

    1. 常用保留对象(Utility Objects) 保留对象:所谓QTP保留对象就是QTP本身预留的一些可用对象. 通俗些讲就是,当打开QTP时它就已经把这些对象给实例化了,直到关闭QTP后,这些保 ...

  5. pytorch与numpy中的通道交换问题

    pytorch网络输入图像的格式为(C, H, W),而numpy中的图像的shape为(H,W,C) 所以一般需要变换通道,将numpy中的shape变换为torch中的shape. 方法如下: # ...

  6. while语句基本练习(求和思想,统计思想)

    A:循环结构while语句的格式: 初始化语句; while(判断条件语句) { 循环体语句; 控制条件语句; } B:执行流程: a:执行初始化语句 b:执行判断条件语句,看其返回值是true还是f ...

  7. 年度重大升级,IntelliJ IDEA 2019.2 稳定版发布

    文章转载自 OSCHINA 社区 [http://www.oschina.net] 期待已久. 7月24日,JetBrains 正式发布了 IntelliJ IDEA 2019.2 稳定版. 作为 I ...

  8. 【题解】Beads

    题目描述 Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数, ...

  9. [FW]使用kprobes查看内核内部信息

    使用printk打印变量等方法,是调试内核的有效方法之一,但是这种方法必须重新构建并用新内核启动,调试效率比较低.以内核模块的方式使用kprobes.jprobes,就可以在任意地址插入侦测器,执行包 ...

  10. cnblogs博客主题原来可以弄得这么美观

    参考了网友 https://www.cnblogs.com/maybreath/p/5253824.html的做法,没想到真的可以耶. 总想弄个方便的.简洁的.可以被搜索引擎搜到的博客.以前用过wor ...