阅读本文你可以获取:

1.数据库的查询

2.hive表的基本操作(建表三种常用方式、删除表、修改表、加载数据、内外表转换、添加分区、复制数据)

3.SQL到HiveQL的的一些不同点

1.   基本操作

--查询数据库
Show databases;
--筛选数据库:
Show databases like 'h.*';
--修改数据库指定位置:
Create database test_database Location '/my/file'; --显示数据库文件所在目录语句:
Describe database test_database;
--删除数据库:
Drop database if exist test_database cascade;--hive 不允许用户删除一个包含有表的数据库,所以可在最后加cascade即级联删除。
--显示具体表的信息:
Describe extended/formatted(扩展/格式化) test_database.test;--实际情况用formatted更多,可读性更强
--查看表分区:
Show partitions table ;
Show partitions table partitons(column ='分区名');--查看指定分区 --基本表操作 --建表语句示例:
--hive创建表主要有三种方式,
--第一种直接使用create table命令,
--第二种使用create table ... as select...(会产生数据)。
--第三种使用create table tablename like exist_tablename命令。不会拷贝数据
use rpt;
drop table if exists test;
create external table test(--external建立外部表,如果建内部表则不加此关键字
testid string comment '分流id',
group_id string comment '用户组id'
)comment '测试表'
partitioned by (ds string)
stored as orc; --表添加注释:
Create database test_database comment 'This is a test database!'; --删除表:
DROP TABLE test1; --修改表结构:
DESC student1;--查看表结构
ALTER TABLE student1 ADD COLUMNS (address STRING,grade STRING); --修改表名:
ALTER TABLE student1 RENAME TO student3; --创建和已知表相同结构的表:
CREATE TABLE copy_student1 LIKE student1; --导入外部文件数据:
--加载数据到student1表中
LOAD DATA LOCAL INPATH '/home/hadoop/data/student1.txt' INTO TABLE student1; --加载hdfs中的文件:
LOAD DATA INPATH '/user/hive/student1.txt' INTO TABLE copy_student1; --修改列名:
alter table tablename change column c_Old c_New int comment 'XXXXXX' after 某列;--某列之后
来自 <https://blog.csdn.net/scgaliguodong123_/article/details/46941419> --增加列:
Alter table tablename add columns (
Id int comment'id',
Name string comment 'name'
) --删除或者替换列:(会替换表中所有列)
Alter table tablename replace columns
(
Id int,
Name string
); --内部表转外部表
alter table tablename set TBLPROPERTIES ('EXTERNAL' = 'TRUE');
--外部表转内部表
alter table table_name set TBLPROPERTIES('EXTERNAL'='FALSE');
来自 <https://blog.csdn.net/scgaliguodong123_/article/details/46941419> --添加/删除分区语句
Alter table test add partition(ds='2018-06-02')--已有分区的表
alter table test drop if exist partition(ds='2018-06-01') ;--删除表分区 --复制表数据:
INSERT OVERWRITE TABLE copy_student2 SELECT * FROM student1; --多表同时复制:
hive> FROM student1
> INSERT OVERWRITE TABLE copy_student3
> SELECT *
> INSERT OVERWRITE TABLE copy_student4
> SELECT *;

2.SQL到HiveQL的转换

来自 <https://blog.csdn.net/hguisu/article/details/7256833>

1、Hive不支持等值连接

SQL中对两表内联可以写成:

select * from dual a,dual b where a.key = b.key;
Hive中应为
select * from dual a join dual b on a.key = b.key;
而不是传统的格式:
SELECT t1.a1 as c1, t2.b1 as c2FROM t1, t2
WHERE t1.a2 = t2.b2

2、分号字符

分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:
select concat(key,concat(';',key)) from dual;
但HiveQL在解析语句时提示:
FAILED: Parse Error: line 0:-1 mismatched input '<EOF>' expecting ) in function specification
解决的办法是,使用分号的八进制的ASCII码进行转义,那么上述语句应写成:
select concat(key,concat('\073',key)) from dual;

3、IS [NOT] NULL

SQL中null代表空值, 值得警惕的是, 在HiveQL中String类型的字段若是空(empty)字符串, 即长度为0, 那么对它进行IS NULL的判断结果是False.

4、Hive不支持将数据插入现有的表或分区中,仅支持覆盖重写整个表,示例如下:

INSERT OVERWRITE TABLE t1
SELECT * FROM t2;

5.hive不支持INSERT INTO, UPDATE, DELETE操作

其中 INSERT INTO syntax is only available starting in version 0.8。

INSERT INTO就是在表或分区中追加数据。

Hive语法小释的更多相关文章

  1. Hive语法

    1.Select 语法 SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_ ...

  2. Java基础中一些容易被忽视的语法小细节总结

    一:语法细节 1. Java中的命名规则: package:统一使用小写字母 class:首字母大写,使用驼峰标识 method:首字母小写,使用驼峰标识 field:首字母小写,使用驼峰标识 sta ...

  3. Hive如何处理小文件问题?

    一.小文件是如何产生的 1.动态分区插入数据,产生大量的小文件,从而导致map数量剧增. 2.reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的). 3.数据源本身就包含大量的小 ...

  4. 合并hive/hdfs小文件

    磁盘: heads/sectors/cylinders,分别就是磁头/扇区/柱面,每个扇区512byte(现在新的硬盘每个扇区有4K) 文件系统: 文件系统不是一个扇区一个扇区的来读数据,太慢了,所以 ...

  5. Hadoop记录-hive merge小文件

    1. Map输入合并小文件对应参数:set mapred.max.split.size=256000000;  #每个Map最大输入大小set mapred.min.split.size.per.no ...

  6. 一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)

    Hive官网(HQL)语法手册(英文版):https://cwiki.apache.org/confluence/display/Hive/LanguageManual Hive的数据存储 1.Hiv ...

  7. python 全栈开发,Day89(sorted面试题,Pycharm配置支持vue语法,Vue基础语法,小清单练习)

    一.sorted面试题 面试题: [11, 33, 4, 2, 11, 4, 9, 2] 去重并保持原来的顺序 答案1: list1 = [11, 33, 4, 2, 11, 4, 9, 2] ret ...

  8. hive 处理小文件,减少map数

    1.hive.merge.mapfiles,True时会合并map输出.2.hive.merge.mapredfiles,True时会合并reduce输出.3.hive.merge.size.per. ...

  9. 大数据之路week07--day07 (Hive结构设计以及Hive语法)

    Hive架构流程(十分重要,结合图进行记忆理解)当客户端提交请求,它先提交到Driver,Driver拿到这个请求后,先把表明,字段名拿出来,去数据库进行元数据验证,也就是Metasore,如果有,返 ...

随机推荐

  1. 【基础】Linux系统的运行级别

    1.系统运行级别的配置文件 什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别. 它让一些程序在一个级别启动,而另外一个级别的时候不启动. Linux系统的有效登录模式有0~9共十种, ...

  2. (十三)、向shell脚本中传参

    一.向脚本中传递位置参数 向脚本中传递参数的数目理论上可以无数多,但是只有前9个能被访问,使用shift可以改变此限制 $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 脚本名字 first ...

  3. 常见的JS手写函数汇总(代码注释、持续更新)

    最近在复习面试中常见的JS手写函数,顺便进行代码注释和总结,方便自己回顾也加深记,内容也会陆陆续续进行补充和改善. 一.手写深拷贝 <script> const obj1 = { name ...

  4. 第一个开源控件:Google 官方下拉刷新控件 SwipeRefreshLayout 强化版,支持上拉刷新

    最近比较闲,所以趁着这时间撸了个SwipeRefreshLayout的加强版,Github地址. 原版只支持下拉刷新,强化之后支持上拉刷新和一进入页面就加载刷新,整个控件的加载动画是一致的,毫无违和感 ...

  5. java中游标

    package YouBiao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Resu ...

  6. tcp上传学习二--文本文件上传

    //暮雪超霸.加油!!!package tcp文本上传; import java.io.BufferedReader; import java.io.FileReader; import java.i ...

  7. Docker 网络及命令

    Docker常用命令 docker version #查看版本 docker search centos #搜索可用docker镜像 docker images 查看当前docker所有镜像 dock ...

  8. 【转载】VUE的背景图引入

    我现在的项目要将登录页面的背景引一图片做为背景图片,按原jsp中的写法,发现无法找到背景图片,最后从网上查资料,采用上面的写法,成功显示出背景图片,参考网址 https://blog.csdn.net ...

  9. 多媒体开发(4):在视频上显示文字或图片--ffmpeg命令

    小白:我录了段视频,里面用的音乐是有版权的,而且快过期了,能把音乐去掉吗? 小程拿到视频后,一个快捷键打开命令终端,快速打下一行命令: ffmpeg -i 小白.flv -vcodec copy -a ...

  10. swing桌面四子棋程序开发过程中遇到的一些问题记录(二)

    第二个遇到的问题是将JButton按钮设置成透明的按钮.首先UI给我一张透明的图片,如果我直接给Button按钮设置背景图片的话,是没有透明的效果的,只会留下白色的底,设置前后的效果如下图 制作透明的 ...