
Hive
Charles Gao
这个作者很懒,什么都没留下…
展开
-
Hive中的日志
如果Hive出错了,我们该怎么办呢,当然是去查找日志了!Hive中的日志分为两种系统日志,记录了hive的运行情况,错误状况。Job 日志,记录了Hive 中job的执行的历史过程。1. 系统日志系统日志存储在什么地方呢 ?在hive/conf/ hive-log4j.properties 文件中记录了Hive日志的存储情况,默认的存储情况:hive.root.logger=WARN,DRFAhive.log.dir=/tmp/${user.name} # 默认的存储位置hive.l原创 2021-03-06 02:52:15 · 3385 阅读 · 0 评论 -
Hive分通表和分区表的区别
把表或分区划分成bucket有两个理由1,更快,桶为表加上额外结构,链接相同列划分了桶的表,可以使用map-side join更加高效。2,取样sampling更高效。没有分区的话需要扫描整个数据集。hive> create table bucketed_user (id int,name string)clustered by (id) sorted by (id asc) into 4 buckets;重点1:CLUSTERED BY来指定划分桶所用列和划分桶的个数。HIVE对key的原创 2021-02-22 22:39:08 · 1053 阅读 · 0 评论 -
Hive分桶表
分桶表分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分。分桶是将数据集分解成更容易管理的若干部分的另一个技术。分区针对的是数据的存储路径;分桶针对的是数据文件。1. 创建分桶表create table stu_buck(id int, name string)clustered by(id)into 4 bucketsrow format delimited fields term原创 2021-02-22 22:09:14 · 499 阅读 · 2 评论 -
HIVE/SQL窗口函数
一.窗口函数有什么用?在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求:排名问题:每个部门按业绩来排名topN问题:找出每个部门排名前N的员工进行奖励面对这类需求,就需要使用sql的高级功能窗口函数了。二.什么是窗口函数?窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。窗口函数的基本语法如下:<窗口函数> over (partition by <用于分组的列名>or原创 2021-02-22 19:13:43 · 371 阅读 · 0 评论 -
HIVE 分区表详解
一、背景1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。2、分区表指的是在创建表时指定的partition的分区空间。3、如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构。二、技术细节1、一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。2、表和列名不区分大小写。3、分区是以字段的形式在原创 2021-02-21 19:01:24 · 4283 阅读 · 0 评论 -
4种排序方式比较:order by, sort by, distribute by, cluster by
文章记录了4种排序方式:order by, sort by, distribute by, cluster by总结:order by 全局排序,只有一个 Reducer,通过order对字段进行降序或者升序sort by 对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排序,此时可以使用 sort by。Sort by 为每个reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集来说不是排序。distribute by 在有些情原创 2021-02-21 03:17:47 · 8646 阅读 · 1 评论 -
SQL Join方式总结
SQL Join方式总结:(一共7种)1,内连接SELECT FROM TABLEA A INNER JOIN TABLEB B ON A.key=B.key2,全外连接 Mysql暂不支持SELECT FROM TABLEA A FULL OUTER JOIN TABLEB B ON A.key=B.key3,全外连接-差集 Mysql暂不支持SELECT FROM TABLEA A FULL OUTER JOIN TABLEB B ON A.key=B.key WHERE A.key原创 2021-02-20 23:19:41 · 213 阅读 · 0 评论 -
Group by 和 correlated subqueries的转化
计算 emp 每个部门中每个岗位的最高薪水参数: employee表,包含所有信息 department 部门,string类型 job 工作,string类型 salary 每个人的薪水,int类型答案一:用group bySELECT department, job, max(salary)FROM employeeGROUP BY department,job答案二:用correlated subqueriesSELECT depar原创 2021-02-20 20:50:57 · 191 阅读 · 0 评论 -
Having和Where+subqueries的转换
Having表示对上述结果进行过滤,所以比Where更加灵活。Where之后不能跟聚合函数,因为where表示对每一行进行条件限制,此时聚合函数的值还没有求出,但是Having可以跟聚合函数,因为Having表示对结果进行过滤。例子:求平均薪资大约2000的部门及部门薪资参数: employee表,包含所有信息 department 部门,string类型 salary 每个人的薪水,int类型下面这个两个答案是错的:(where之后不能用聚合函数的信息)答案1:SELE原创 2021-02-20 20:25:41 · 200 阅读 · 0 评论 -
Hive数据导出
1.Insert导出2.Hadoop 命令导出到本地3.Hive Shell 命令导出基本语法:(hive -f/-e 执行语句或者脚本 > file)4.Export 导出到 HDFS 上export 和 import 主要用于两个 Hadoop 平台集群之间 Hive 表迁移。原创 2021-02-20 00:35:10 · 209 阅读 · 0 评论 -
创建表时通过 Location 指定加载数据路径(先有数据,后建表)
如果文件夹中已有txt格式数据,可以先上传数据到HDFS的路径(不一定是数据库和表所在的文件夹),然后再建表。常规方法是先建表,然后用load和insert加载数据。原创 2021-02-19 23:02:49 · 2407 阅读 · 1 评论 -
查询语句中创建表并加载数据(As Select)
这里有一种非常快的建表方式,用As我们根据查询结果创建表(查询的结果会添加到新创建的表中)例如:create table if not exists student3as select id, name from student;然后一个名为student3的表就被建立,并且有两个parameters: id 和 name。其数据类型和student表一样,且student表中每一行的数据也被拷贝到student3中。可以用 show tables 和 select * from student原创 2021-02-19 22:29:59 · 995 阅读 · 0 评论 -
Insert插入数据
INSERT插入数据插入数据-1使用INSERT语句将数据插入表/分区Hive支持从同一个表进行多次插入INSERT INTO中TABLE关键字是可选的INSERT INTO可以指定插入到哪些字段中如:INSERT INTO t(x,y,z)INSERT INTO table_name VALUES,支持插入值列表数据插入必须与指定列数相同-- INSERT支持OVERWRITE(覆盖)和INTO(追加)INSERT OVERWRITE/INTO TABLE tablename1原创 2021-02-19 22:19:51 · 1102 阅读 · 0 评论 -
Hive Load装载数据与HDFS的关系
装载数据:LOAD移动数据LOCAL:指定文件位于本地文件系统 ;OVERWRITE表示覆盖现有数据使用方法:-- load数据格式LOAD DATA LOCAL INPATH '/home/dayongd/Downloads/employee.txt' OVERWRITE INTO TABLE employee;-- 方式一:LOCAL表示文件位于本地,OVERWRITE表示覆盖现有数据LOAD DATA LOCAL INPATH '/home/dayongd/Downloads/empl原创 2021-02-19 20:56:15 · 1800 阅读 · 1 评论 -
insert、load、put向表中插入数据
本文意在记录insert、load、put插入数据后,对元数据TABLE_PARAMS中numFiles、numRows的影响。1. insert1)本身插入时会走MapReduce程序2)对元数据TABLE_PARAMS中numFiles、numRows都会相应改变数值(通过计数器记录)3)所以用count(*)查询记录时,不再走MapReduce程序,直接读取元数据TABLE_PARAMS中numRows数值2. put1)这个命令和hive没什么关系,只是单纯上传文件到HDFS,当然不会走原创 2021-02-19 20:24:47 · 1350 阅读 · 0 评论 -
Hive架构(数据库和表)
本文介绍一下Hive中的数据库(Database/Schema)和表(Table)的基础知识,由于篇幅原因,这里只是一些常用的、基础的。一、Hive的数据库和表先看两张图:从图上可以看出,Hive作为一个“数据库”,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成。再往下分,可以分为分区和桶。1.Hive在HDFS上的默认存储路径Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.wa原创 2021-02-19 17:14:57 · 3890 阅读 · 5 评论 -
Hive 增加/修改/替换列信息
1.更新列ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_namecolumn_type [COMMENT col_comment] [FIRST|AFTER column_name]2.增加和替换列ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)注:ADD 是代表新增一字段,字段位置在所有列原创 2021-02-18 23:26:25 · 2203 阅读 · 0 评论 -
管理表与外部表的相互转换
也可以打开MySql库查看表的信息原创 2021-02-18 21:54:37 · 179 阅读 · 0 评论 -
Hive外部表
因为表是外部表,所以 Hive 并非认为其完全拥有这份数据。所以删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉(所以用drop命令之后再用show命令,就会发现这张外部表消失了)。但这张表的信息在HDFS里却还存有,所以简单的命令:create table if not exists 原来这张外部表的名字就可以恢复这张表以前的内容,之后用show和desc命令就可以查看这张表。...原创 2021-02-18 19:16:12 · 301 阅读 · 0 评论 -
Hive修改数据库(如何强制删除)
1.修改数据库用户可以使用 ALTER DATABASE 命令为某个数据库的 DBPROPERTIES 设置键-值对属性值,来描述这个数据库的属性信息。hive (default)> alter database db_hive set dbproperties('createtime'='20170830');在hive中查看修改结果hive> desc database extended db_hive;db_name comment location owner_name ow原创 2021-02-18 18:02:00 · 2436 阅读 · 0 评论 -
Hive查询数据库(以及详细信息)
1.显示数据库1)显示数据库hive> show databases;2)过滤显示查询的数据库hive> show databases like 'db_hive*'; 以db_hive为开头的OKdb_hivedb_hive_12.查询数据库1)显示数据库信息hive> desc database db_hive;OKdb_hive hdfs://hadoop102:9820/user/hive/warehouse/db_hive.dbatguiguUSER原创 2021-02-18 15:57:05 · 6842 阅读 · 0 评论 -
Hive 创建数据库(以及指定存放位置)
语句:CREATE DATABASE [IF NOT EXISTS] database_name[COMMENT database_comment][LOCATION hdfs_path][WITH DBPROPERTIES (property_name=property_value, ...)];1.创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.dbhive (default)> create database db_hive;原创 2021-02-18 15:34:11 · 10521 阅读 · 0 评论 -
Hive数据类型(基本数据类型+集合数据类型)
基本数据类型集合数据类型案例实操1.Hive 上创建测试表 testcreate table test(name string,friends array<string>,children map<string, int>,address struct<street:string, city:string>)row format delimited fields terminated by ','collection items terminat原创 2021-02-18 03:14:24 · 415 阅读 · 0 评论 -
区别:count(1) 和 count(*)和count(列名)
执行效果上:count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL;count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL;count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。所以呢,count(1)和count(*)之间没有区别,因为他们两个都不会过滤空值,但count(列名)就有区别了,因为count(列名)会去过滤空值原创 2021-02-17 18:57:08 · 2635 阅读 · 3 评论 -
Hive查询不走MapReduce
在使用Hive的时候,有时候只是想取表中某个分区的前几条的记录看下数据格式,比如一个很常用的查询:select * from xxx where partition_column=xxx limit 2;这种对数据基本没什么要求,随便来点就行,既然如此为什么不直接读取本地存储的数据作为结果集呢?Hive命令都要转换为MapReduce任务去执行,但是因为启动MapReduce需要消耗资源,然后速度还很慢(相比较于直接从本地文件中读取而言),所以Hive对于查询做了优化,对于某些查询(比如消耗资源大的查原创 2021-02-17 18:26:55 · 1124 阅读 · 0 评论 -
Hive交互方式
本文列举了三种Hive的交互方式:Hive Shell, JDBC, 使用sql语句或者sql脚本进行交互。1.用Hive Shell#登录[hadoop@node03 ~]$ cd /kkb/install/hive-1.1.0-cdh5.14.2/[hadoop@node03 hive-1.1.0-cdh5.14.2]$ bin/hive#退出hive (default)> quit;图片:2.用JDBC2.1 后台先启动hive服务[hadoop@node03 ~]$原创 2021-02-17 13:42:45 · 215 阅读 · 0 评论 -
hive内部建表和目录结构
1、默认情况 Hive内部表都属于缺省库default,在HDFS的目录为/user/hive/warehouse/(以下默认Hive的HDFS根目录为/user/hive)下。下图中abc,bonus,department,dept,emp为缺省库default下的几张表,目录名与表名一致。[root@data1 ~]# hdfs dfs -ls /user/hive/warehouse/Found 7 itemsdrwxrwxrwt - root hive 0 201原创 2021-02-16 01:44:41 · 1139 阅读 · 0 评论