1.HiveQL的数据类型
HiveQL不支持更新/索引/事物等操作,子查询和join操作也很局限。
HiveQL的数据类型
基本类型:数值 布尔 字符串
复杂类型:arraymap struct
基本类型可以隐式向上转换 struct可以转换成double
2.HiveQL常用操作-----创建表
create table userinfo(id int,name string)row format delimited fields terminated by '\t';
注解:row format delimited fields terminated by是HiveQL特有的,用来指定数据的分割方式,上述格式表示数据的分割方式是以tab键进行分割,默认格式如下:
row format delimited fields terminated by '\001' collection items terminated by '\002' map keys terminated by '\003' lines terminated by '\n' stored as textfile
注解:
collection items terminated by '\002' 表示集合类型中的数据的分隔方式,ARRY STRUCT MAP中的key/value之间的分隔
map keys terminated by '\003' 针对Map的key内的分隔方式
lines terminated by '\n' 表示行之间已回车分隔
stored as textfile 指定以文本存储
Hive的表:
<1>外部表外部表中的数据不在数据仓库中,在指定的位置,只是在Hive元数据库中注册,建立方式:create external tablename...
<2>托管表托管表中的数据移动到数据仓库的目录下,由Hive管理, 建立方式:cretae table tablename...
3.HiveQL常用操作-----导入数据
表建立完成后,可以从本地文件系统或者HDFS中导入数据文件
load data local inpath '/home/dengpeng/1' overwrite into table userinfo
如果从HDFS中导入,则不要关键字local
load data inpath '/home/dengpeng/1' overwrite into table userinfo
托管表导入的数据文件可在数据仓库目录user/warehouse/<tablename>下看到
Hive的数据导入只是复制或者移动文件,并不对数据的模式进行检查,对数据的模式进行检查要等到查询的时候才进行,这就是Hive采用的“schema on load"加载方式,大大提高了加载数据的效率。
4.HiveQL常用操作-----分区(partition)
<1>定义:
分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表啦,提高查询的效率
<2>建立分区
create table ptest(userid int) partitioned by (name string)row format delimited fields terminated by '\t'
注意:表中的列不能和分区中的列重合
<3>导入数据
load data local inpath '/home/dengpeng/1' into table ptest partition(name='jack');
load data local inpath '/home/dengpeng/jack' overwrite into table ptest partition (name='jack');
<4>查看分区数据
hive>dfs -ls /user/hive/warehouse/ptest/name=jack/;
<5>对分区进行查询
select userid from ptest where name = 'jack';
<6>显示分区
hive>show partitions ptest;
<7>对分区插入数据
insert overwrite table ptest partition(name='jack')select name from userinfo;
5.HiveQL常用的操作-----桶
可以把表和分区组织成桶,桶是按照行分开组织的特定字段,每个桶对应以个reduce操作,在建立桶之前需要设置hive.enforce.bucketing属性为true,使得Hive能够识别桶
set hive.enforce.bucketing = true
hive>set hive.enforce.bucketing;
hive>create table btest2(id int ,name string) clustered by(id) into 3 buckets row format delimited fields terminated by '\t';
这样按照用户id分成了3个桶,那么就对应3个Reduce操作,输出三个文件
hive>insert overwrite table btest2 select * from userinfo;插入数据
hive>dfs -ls /user/hive/warehouse/btest2;查看数据仓库下的桶目录,三个桶对应三个目录
Hive使用对分桶所用的值进行hash,并用hash结果除以桶的个数做取余的方式分桶,保证了每个桶中都有数据,但每个桶中的数据条数不一定相等,下面命令的结果是不宜样的:
hive>dfs -cat /user/hive/warehouse/btest2/*0_0;
hive>dfs -cat /user/hive/warehouse/btest2/*1_0;
hive>dfs -cat /user/hive/warehouse/btest2/*2_0;
分桶可以获得比分区更高的查询效率,同时分桶也便于对全部的数据进行采样处理,下面是对桶取样的操作:
hive>select * from btest2 tablesample(bucket 1 out of 3 on id);
6.HiveQL常用的操作-----多表插入
定义:
多表插入指的是在同一条语句中,把读取的同一份元数据插入到不同的表中。只需要扫描一遍元数据即可完成所有表的插入操作,效率很高。
hive>create table mutil1 as select id,name from userinfo;
hive>craete table mutil2 like mutil1;
hive>from userinfo insert overwrite table mutil1 select id,name insert overwrite table mutil2 select count(distinct id),name group by name;
7.HiveQL常用操作------修改表
重命名表,增加数据列的操作如下:
alert table mutil1 rename to mutil3;
alert table mutil1 add colums(grade string);
hive>describe mutil1;查看表结构
8.HiveQL常用操作------删除表
drop table mutil1;
对于托管表,drop操作会把元数据和数据文件删除掉
对于外部表,drop操作只删除元数据
如果只要删除表中的数据,保留表明的话可以在HDFS上删除数据文件。
dfs -rmr /user/hive/warehouse/mutil1/*
9.HiveQL常用操作------连接
内连接select userinfo.*,choice.* from userinfo join choice on(userinfo.id = choice.userid);检索userinfo和choice表中标识号相同的所有行
左向外连接select userinfo.*,choice.* from userinfo left outer join choice on (userinfo.id = choice.usreid);
右向外连接select userinfo.*,choice.* from userinfo right outer join choice on (userinfo.id = choice.userid);
全外连接select userinfo.* from userinfo full outer join choice on (usreinfo.id = choice.usreid);
半连接select userinfo.* from userinfo left semi join choice on (userinfo.id = choice.userid);
10.HiveQL常用操作------子查询
标准的SQL语句的子查询支持嵌套的查询,而HiveQL的支持有限,只能在from子句中加入子查询
select teacher,MAX(class_num) from (select teacher,count(classname)as class_num from classinfo group by teacher)subq group by teacher;
11.HiveQL常用操作------创建视图
Hive只支持逻辑视图,并不支持逻辑视图,建立视图后可以在mysql元数据库中看到创建的视图表,但是在Hive的数据仓库目录下是没有相应的视图表目录的。
create view teacher_classnum as select teacher,count(classname) from classinfo group by teacher;
相关推荐
### Hive高级编程知识点详解 #### 一、Hive组件概览 ...通过掌握 HiveQL 的使用方法以及优化技巧,可以极大地提高数据处理的效率和准确性。希望以上内容能够帮助读者更好地理解和应用 Hive 技术。
以上我们讨论了Hive的基本概念,包括它的体系架构、安装步骤以及HiveQL的使用。Hive是大数据处理领域中非常重要的工具,掌握它对于处理大规模数据集具有重要意义。通过这些知识点,我们可以更好地使用Hive进行数据...
例如,可以使用map函数构建Map类型,使用array函数构建Array类型,然后通过指定索引或键来访问对应的值。 在日期函数方面,HiveQL提供了UNIX时间戳与日期之间的转换、当前时间戳的获取以及基于日期的函数如年、月、...
HiveQL源码分析 HiveQL,全称为Hive Query Language,是Apache Hive的核心组件,用于处理和管理大规模数据集。它提供了SQL-like接口,使得数据分析师和开发者能够以熟悉的方式查询分布式存储的数据。HiveQL源码的...
接下来,根据数据仓库中表的映射关系,使用8种不同的重写策略来重构查询树,以便它能够适用于HiveQL的语法规则。最后,将重构后的查询树转化为正确的HiveQL语句。 DFMapper的关键在于它能够正确翻译绝大多数的SQL...
而HiveQL是基于Apache Hive的数据仓库工具,它允许用户使用类SQL语法来查询和管理存储在Hadoop集群中的大数据集。 Scriptis的另一个显著特点是其对UDF(用户定义函数)的支持。UDF允许用户自定义函数以扩展标准的...
除了在Hive中使用HiveQL进行数据查询外,Hive还提供了命令行界面Hive Shell,这是一个让数据库管理员和开发者可以直接在命令行中执行HiveQL命令的工具。 知识点八:SQL兼容性 Hive提供了与SQL的兼容性,但用户需要...
查看表名及其对应的路径可以使用以下 SQL 语句: ```sql drop view v_table_path; create view v_table_path as select c.name, b.db_id, tbl_name, location, b.tbl_id, b.tbl_type, date_format(from_...
`HiveQL Details.txt`详细阐述了HiveQL的语法和使用细节,是学习和理解HiveQL的重要参考资料。`Hive任务优化--控制hive任务中的map数和reduce数.txt`揭示了如何通过调整作业配置参数来优化Hive查询性能,这是大数据...
使用Hadoop进行数据分析是一个涉及多个步骤的过程,特别是在处理大规模数据集时。以下是一个基本的步骤指南,帮助你使用Hadoop进行数据分析: 1. 环境搭建 安装Hadoop:在集群上安装Hadoop...编写HiveQL查询:使用Hive
3. 插入数据:使用 HiveQL 将数据插入到表中。 4. 查询数据:使用 HiveQL 查询数据。 Hive 的优点 Hive 的优点是: 1. 高性能:Hive 基于 Hadoop 的分布式计算架构,能够对大规模数据进行高效处理。 2. 灵活性:...
分布式数据仓库的块放置策略 与在多节点 Hadoop 集群上配置数据相关的正在进行的工作相关,我们提供了两个... 转换为 HiveQL,我们使用 Hive 上可用的“with cube”运算符(版本 0.10.0,2013 年 1 月 14 日发布)。
- **使用Hive**:使用HiveQL查询可以直接得到结果: ```sql SELECT product_category, SUM(sales_amount) AS total_sales, AVG(sales_quantity) AS avg_sales FROM sales_data GROUP BY product_category; ``` ...
Hive是一个建立在Hadoop上的数据仓库工具,它提供了类SQL查询语言——HiveQL,使得用户可以使用类似SQL的语法来对存储在Hadoop文件系统中的大数据集进行查询和分析。这本书对Hive的各个特性进行了全面介绍,对于初学...
Beeline是Hive的一个新的命令行界面工具,它使用SQLLine作为底层来执行HiveQL语句。Beeline通过JDBC连接HiveServer2,与传统的Hive命令行界面(CLI)相比,Beeline更加轻量级,并支持通过网络连接到HiveServer2。 #...
书中还提供了如何使用HiveQL编写的实例,展示了如何在Hive中执行查询、创建表、分区以及进行聚合和连接操作等。此外,本书还对Hive的高级特性,如用户自定义函数(UDF)和数据存储格式等进行了阐述。 《Hive编程...