百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Hive SQL常用命令总结,大数据开发学习者请按需收藏

bigegpt 2024-08-16 14:26 2 浏览

Hive是基于Hadoop生态的一个重要组件,是对数据仓库进行管理和分析数据的工具。她提供了SQL查询方式来分析存储在HDFS分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能。

这种SQL就是Hive SQL,她可以将SQL语句转换为Map Reduce任务运行,通过特殊的SQL去查询分析需要的内容,使不熟悉map reduce的用户很方便的利用SQL 语言查询,汇总,分析数据。

一、基础命令

1、数据库操作

  • show databases; # 查看某个数据库
  • use 数据库; # 进入某个数据库
  • show tables; # 展示所有表
  • desc 表名; # 显示表结构
  • show partitions 表名; # 显示表名分区
  • show create table_name; # 显示创建表的结构

2、表结构修改

  • use xxdb; create table xxx; # 内部表
  • create table xxx like xxx; # 创建一个表,结构与其他一样
  • use xxdb; create external table xxx; # 外部表
  • use xxdb; create external table xxx (l int) partitoned by (d string); # 分区表
  • alter table table_name set TBLPROPROTIES ('EXTERNAL'='TRUE'); # 内部表转外部表
  • alter table table_name set TBLPROPROTIES ('EXTERNAL'='FALSE');# 外部表转内部表

3、字段类型

  • 基本类型: tinyint, smallint, int, bigint, float, decimal, boolean, string
  • 复合类型:struct, array, map

二、常用函数

  • length() # 返回字符串长度
  • trim() # 去除两边空格
  • lower(), upper() # 大小写转换
  • reverse() # 反转字符串
  • cast(expr as type) # 类型转换
  • substring(string A, int start, int len) # 字符串截取
  • split(string str, string pat) # 按照pat字符串分割str,返回分割后的字符串数组
  • coalesce(v1, v2, v3, ...) # 返回列表中第一个非空元素,如果所有值都为空,则返回null
  • from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss') # 返回当前时间
  • instr(string str, string search_str) # 返回第二个参数在待查找字符串中的位置(找不到返回0)
  • concat(string A, string B, string C, ...) # 字符串连接
  • concat_ws(string sep, string A, string B, string C, ...) # 自定义分隔符sep的字符串连接
  • str_to_map(string A, string item_pat, string dict_pat) # 将字符串转为map
  • map_keys(map m) # 提取出map的key, 返回key的array
  • datediff(date1, date2) # 日期比较函数,返回相差天数,datediff('${cur_date},d)
  • explode(colname) # explode就是将hive一行中复杂的array或者map结构拆分成多行

三、相关概念

1、hive

hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库库表,并提供类SQL查询功能。

2、基本组成

用户接口:CLI,shell命令行;JDBC/ODBC是hive的java实现;webGUI是通过浏览器访问hive;元数据存储:通常是存储在关系数据库如mysql, derby中;hive的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表),表的数据所在目录等。

解释器,编译器,优化器完成HQL查询语句从词法分析,语法分析,编译,优化以及查询计划的生成。生成的查询存储在HDFS中,并随后有mapreduce调用执行。因此,hive与Hadoop的关系可以理解为用户发出SQL查询语句,hive将查询存储在HDFS中,然后由mapreduce调用执行。

3、table

Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。

4、partition

Partition 对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。

5、buckets

Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00020

6、external table

External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。

Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。

External Table 只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在 LOCATION 后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个 External Table 时,仅删除元数据,表中的数据不会真正被删除。

7、全量数据和增量数据

查看分区信息:如果分区的大小随时间增加而增加,则最新的分区为全量数据。如果分区的大小随时间增加而大小上下变化,则每个分区都是增量数据。

四、HQL和SQL的异同

1、HQL和SQL常见不同,

  • select distinct 后必须指定字段名
  • join 条件仅支持等值关联且不支持or条件
  • 子查询不能在select中使用;
  • HQL中没有UNION,可使用distinct+ union all 实现 UNION;
  • HQL以分号分隔,必须在每个语句结尾写上分号;
  • HQL中字符串的比较比较严格,区分大小写及空格,因此在比较时建议upper(trim(a))=upper(trim(b))
  • 日期判断,建议使用to_date(),如:to_date(orderdate)=‘2016-07-18’
  • 关键字必须在字段名上加``符号,如select `exchange` from xxdb.xxtb;
  • 数据库和表/视图之间仅有1个点,如xx_db.xx_tb。

2、HQL不支持update,采用union all + left join (is null)变相实现update。

  • 取出增量数据;
  • 使用昨日分区的全量数据通过主键左连接增量数据,并且只取增量表中主键为空的数据(即,取未发生变化的全量数据);
  • 合并1、2的数据覆盖至最新的分区,即实现了update。

3、HQL不支持delete,采用not exists/left join(is null)的方法变相实现。

  • 取出已删除的主键数据(表B);
  • 使用上一个分区的全量数据(表A)通过主键左连接A,并且只取A中主键为空的数据,然后直接insert overwrite至新的分区。

对于会SQL的人员,转入Hive SQL还是比较容易的,语法大部分是想通的,少部分函数不太一致。

码字不易,如果您觉得文章写得不错,

请您 1.关注作者~ 您的关注是我写作的最大动力

2.私信我“大数据”

我将与您分享一套最新的大数据学习资源和全套开发工具

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...