hive环境部署

2022-11-29 01:47:32 浏览数 (1)

步骤一:安装部署Zookeeper,Hadoop分布式环境

本实验采用hadoop 2.7.1部署三台大数据处理平台环境。如图1-2所示

图1-2 hadoop分布式环境

注意:各主机中的操作系统版本需保持一致。安装过程中都在hadoop用户下,本教材中密码统一采用:password(注意大小写)

步骤二:解压安装文件

使用tar命令解压安装包到指定目录,并重命名。

[root@master ~]# cd /opt/software/

[root@master software]# tar -zxvf apache-hive-2.0.0-bin.tar.gz -C /usr/local/src/ # 解压到统一安装目录

[root@master software]# cd /usr/local/src

[root@master src]# mv /usr/local/src/apache-hive-2.0.0-bin /usr/local/src/hive

[root@master src]# chown -R hadoop:hadoop hive

编辑/etc/profile文件。

[root@master src]# cd

[root@master ~]# vi /etc/profile

将以下配置信息添加到/etc/profile文件的末尾。

# set Hive environment

export HIVE_HOME=/usr/local/src/hive # Hive安装目录

export PATH=$HIVE_HOME/bin:$PATH # 添加将Hive的bin目录

export HIVE_CONF_DIR=$HIVE_HOME/conf #Hive的环境变量

执行source /etc/profile命令,使配置的环境变量在系统全局范围生效。

[root@master ~]# source /etc/profile

以上命令只需要在hive安装的节点操作,本文在master主节点进行Hive部署

实验任务二:MySQL安装与启动

步骤一:卸载MariaDB

先查看一下系统上的mariadb

[root@master ~]# rpm -qa | grep mariadb

mariadb-libs-5.5.52-2.el7.x86_64

然后卸载

[root@master ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

ps:

rpm -qa 列出所有已安装软件包

rpm -e packagename  删除软件包

rpm -e --nodeps packagename  强制删除软件和依赖包

rpm -q 包名     查询包是否安装

rpm -ivh 包名     安装软件包

步骤二:使用rpm安装mysql

安装的顺序为:

[root@master ~]# cd /opt/software/mysql-5.7.18

[root@master mysql-5.7.18]# rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm

[root@master mysql-5.7.18]# rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm

[root@master mysql-5.7.18]# rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm

[root@master mysql-5.7.18]# rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm

再通过#rpm -qa | grep mysql检查mysql安装情况

[root@master mysql-5.7.18]# vi /etc/my.cnf

#已有配置进行修改,没有的需要新增

default-storage-engine=innodb

innodb_file_per_table

collation-server=utf8_general_ci

init-connect='SET NAMES utf8'

character-set-server=utf8

启动mysql服务和查看其状态

[root@master mysql-5.7.18]# systemctl start mysqld

[root@master mysql-5.7.18]# systemctl status mysqld

[root@master mysql-5.7.18]# cat /var/log/mysqld.log | grep password

得到MySQL初始密码:

[root@master mysql-5.7.18]# mysql_secure_installation #重新设定密码和配置

设定密码要符合安全规则Password123$

注:允许远程连接设定为n,表示允许远程连接,其它设定为y

[root@master mysql-5.7.18]# mysql -uroot -pPassword123$

步骤三:新建Hive用户与元数据

在MySQL中新建名称为:hive_db的数据库存储Hive元数据。并新建hive用户,密码为Password123$,同时赋予所有权限。

mysql>create database hive_db;

mysql>create user hive identified by 'Password123$';

mysql>grant all privileges on *.* to hive@'%' identified by 'Password123$' with grant option ;

mysql>grant all privileges on *.* to 'root'@'%'identified by 'Password123$' with grant option;

mysql>flush privileges;

create database hive_db:新建hive_db数据库作为Hive的元数据存储地址。

create user hive identified by 'Password123$':创建Hive访问用户,用户名为hive,密码为hive。

grant all privileges on *.* to hive@'%' identified by 'Password123$' with grant option:grant 权限1,权限2,...权限n on 数据库名称.表名称 to 用户名@用户地址。赋予hive用户对所有数据库所有表的所有权限且任何地址都能建立连接“%”,并具有授予权。

flush privileges :刷新MySQL的系统权限相关表。

赋予hive用户对所有数据库所有表的所有权限且任何地址都能建立连接“%”,并具有授予权。

图1-6 创建Hive用户操作MySQL

实验任务三:配置Hive参数

步骤一: 配置hive-site.xml

复制源文件hive-default.xml.template并修改为hive-site.xml。修改对应参数的值。

[root@master ~]# su - hadoop

[hadoop@master ~]$ cp /usr/local/src/hive/conf/hive-default.xml.template /usr/local/src/hive/conf/hive-site.xml

[hadoop@master ~]$ vi /usr/local/src/hive/conf/hive-site.xml

<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive_db?createDatabaseIfNotExist=true</value> </property> <!--mysql用户名--> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value>

</property>

<!--mysql中hive用户密码--> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>Password123$</value> </property> <!--mysql驱动--> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/usr/local/src/hive/tmp</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/usr/local/src/hive/tmp/${hive.session.id}_resources</value> </property> <property> <name>hive.querylog.location</name> <value>/usr/local/src/hive/tmp</value> </property> <property> <name>hive.server2.logging.operation.log.location</name> <value>/usr/local/src/hive/tmp/operation_logs</value> </property> <property> <name>hive.server2.webui.host</name> <value>master</value> </property> <property> <name>hive.server2.webui.port</name> <value>10002</value> </property> </configuration>

javax.jdo.option.ConnectionURL: JDBC连接字符串,默认为自带的metastore_db数据库,现以MySQL作为元数据存储地址,需建立JDBC连接,且hive_db处为实验二中创建的MySQL数据库,存储元数据。

javax.jdo.option.ConnectionUserName:连接MySQL的hive操作用户,实验二创建。

javax.jdo.option.ConnectionPassword:连接MySQL的hive操作用户密码,实验二创建。

javax.jdo.option.ConnectionDriverName:配置数据库连接驱动。

hive.downloaded.resources.dir:远程资源下载的临时目录。

hive.server2.webui.host:hiveserver2 WebUI页面访问地址。

hive.server2.webui.port: hiveserver2 WebUI页面访问端口。

除此之外,Hive默认配置文件为hive-default.xml.template。若用户没有对相关配置参数进行修改,Hive将读取默认配置文件参数进行启动,其他重要配置信息如:

hive.metastore.warehouse.dir:HDFS上存储配置数据仓库的目录。

hive.exec.scratchdir:hive用来存储不同阶段的map/reduce的执行计划的目录,同时也存储中间输出结果。

其他详细参数可参照官方配置文件或者hive-default.xml.template下<description>标签下的描述信息,本文使用默认参数,既需要在HDFS上新建Hive的数据仓库文件夹,并赋予读写权限。

[hadoop@master ~]$ hadoop fs -mkdir -p /user/hive/warehouse

[hadoop@master ~]$ hadoop fs -chmod g w /user/hive/warehouse

[hadoop@master ~]$ mkdir /usr/local/src/hive/tmp

步骤二: 配置hive-env.xml

在此处设置Hive和Hadoop环境变量,这些变量可以使用控制Hive的执行。

[hadoop@master ~]$ cp /usr/local/src/hive/conf/hive-env.sh.template /usr/local/src/hive/conf/hive-env.sh

[hadoop@master ~]$ vi /usr/local/src/hive/conf/hive-env.sh

# Set JAVA

export JAVA_HOME=/usr/local/src/java

# Set HADOOP_HOME to point to a specific hadoop install directory

export HADOOP_HOME=/usr/local/src/hadoop

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/usr/local/src/hive/conf

# Folder containing extra ibraries required for hive compilation/execution can be controlled by:

export HIVE_AUX_JARS_PATH=/usr/local/src/hive/lib

退出保存,数据库的初始化,保证此时MySQL为启动状态执行一下命令。注意的是,需要将Hive连接MySQL的驱动器文件上传至Hive的lib文件夹下。本文选择的驱动器版本为:mysql-connector-java-5.1.26.jar

[hadoop@master ~]$ cp /opt/software/mysql-connector-java-5.1.46.jar /usr/local/src/hive/lib/

[hadoop@master ~]$ schematool -initSchema -dbType mysql

图1-8 Hive驱动器连接MySQL

当显示schemaTool completed时,初始化成功,Hive与MySQL建立连接。启动完毕后查看MySQL下hive_db数据库,发现多出许多个新表(55个)。

图1-9 Hive_db数据库下生成表

步骤三: 启动Hive

启动Hadoop集群,MySQL后,命令框输入hive。

[hadoop@master ~]$ hive

图1-10 Hive shell页面

创建新表并验证MySQL。

hive> show databases;

hive> create database hive_test_db;

hive> use hive_test_db;

hive> create table t_user(id int, name string);

hive> show tables;

图1-11 Hive创建表

打开MySQL数据库,使用实验二配置过的hive_db数据库,此时注意,hive创建的表统一都在hive_db数据库的TBLS表中。当创建表存在,既基于MySQL存储元数据的Hive组件搭建完毕。

mysql> use hive_db;

mysql> select * from TBLS;

图1-12 验证MySQL

实验任务四:beeline CLI远程访问Hive

步骤一: 修改Hadoop的core-site.xml文件

使用beeline CLI访问Hive,需要在Hadoop集群中为Hive赋予代理用户权限。

[hadoop@master ~]$ cd /usr/local/src/hadoop/etc/hadoop

[hadoop@master hadoop]$ vi core-site.xml

[hadoop@slave1 ~]$ vi /usr/local/src/hadoop/etc/hadoop/core-site.xml

[hadoop@slave2 ~]$ vi /usr/local/src/hadoop/etc/hadoop/core-site.xml

#添加如下配置

<property>

  <name>hadoop.proxyuser.hadoop.hosts</name>

  <value>*</value>

 </property>

 <property>

  <name>hadoop.proxyuser.hadoop.groups</name>

  <value>*</value>

</property>

注意:其中hadoop.proxyuser.hadoop.hosts与hadoop.proxyuser.hadoop.groups标注灰色的主机名为访问的hadoop代理用户名。既给与相关权限可以通过hiveserver2服务进行访问操作。“*”为固定写法,前者表示Hadopp集群下所有节点可以使用hadoop代理用户访问Hive,后者表示所有组。

启动hiveserver2服务,等待时间较长,此页面不要关闭。

[hadoop@master hadoop]$ cd

[hadoop@master ~]$ stop-all.sh

[hadoop@master ~]$ start-all.sh

[hadoop@master ~]$ hiveserver2

图1-13 启动hiveserver2服务

步骤二: 添加远程访问节点

假设在slaves1节点进行远程访问,首先需要在slaves1节点上添加Hive组件,从master节点复制即可。

[root@master ~]# scp -r /usr/local/src/hive root@slave1:/usr/local/src/

[root@slave1 ~]# chown -R hadoop:hadoop /usr/local/src/hive

slaves1配置hadoop用户环境变量,可以使用Hive命令。

[root@slave1 ~]# vi /etc/profile

#hive

export HIVE_HOME=/usr/local/src/hive

export HIVE_CONF_DIR=$HIVE_HOME/conf

export PATH=$HIVE_HOME/bin:$PATH

[root@slave1 ~]# su - hadoop

[hadoop@ slave1 ~]$ source /etc/profile

步骤三: 远程访问

通过jdbc 连接到beeline 就可以对 hive 进行操作了。在slaves1节点hadoop用户下执行以下命令。

[hadoop@slave1 ~]$ beeline -u jdbc:hive2://master:10000

图1-14 其他节点远程连接

同时可以在Hive WebUI页面上查看访问的客户端。如下图所示,192.168.90.110(master)节点与192.168.90.181(slave1)节点并发访问Hive。

图1-15 Hive Web页面查看访问节点

实验二 Hive 库操作与表操作

实验内容与目标

完成本实验,您应该能够:

  • 掌握Hive数据库操作
  • 掌握Hive表操作

相关知识

这里记录了Hive DDL语句,包括:

CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX

DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX

TRUNCATE TABLE

ALTER DATABASE/SCHEMA, TABLE, VIEW

MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)

SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, VIEWS, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE

DESCRIBE DATABASE/SCHEMA, table_name, view_name, materialized_view_name

实验环境

服务器集群

3个以上节点,节点间网络互通,各节点最低配置:双核CPU、8GB内存、100G硬盘

运行环境

CentOS 7.2

用户名/密码

root/password hadoop/password

服务和组件

HDFS、Yarn、MapReduce

实验过程

实验任务一:Hive库操作

步骤一: 创建数据库

Hive中创建学校数据库。

[hadoop@master ~]$ hive

hive > create database school;

图1-16 Hive创建数据库

语法:CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name

  [COMMENT database_comment]      //关于数据块的描述

  [LOCATION hdfs_path]          //指定数据库在HDFS上的存储位置

  [WITH DBPROPERTIES (property_name=property_value, ...)]; 

步骤二: 修改数据库并显示数据库详细信息

hive> alter database school set dbproperties('creater'='H3C');

hive> desc database extended school;

添加自定义属性,创建者为H3C。

图1-17 Hive修改数据库属性

hive> alter database school set owner user root;

hive> desc database extended school;

修改数据库的所有者为root。

图1-18 Hive修改数据库所有者

语法:desc database [extended] database_name;

步骤三: 删除数据库并显示全部数据库

hive> drop database school;

hive> show databases;

语法:show <database_name>

drop database <database_name>

图1-19 Hive删除数据库并显示

其他操作,如切换数据库,语法:use database_name。删除包含表的数据库,语法:drop database if exists database_name cascade。查看正在使用哪个库,语法:select current_database()。其他操作可参考官方说明文档。

实验任务二:Hive表操作

步骤一:创建表

在school数据库中建立teacher表,具有工号、姓名、学科,授课年级四项属性。创建之前需要使用use语言切换操作数据库。

hive> create database school;

hive> use school;

hive> create table teacher(

> num int,

> name string,

> email map<string,int>,

> class array<string>);

图1-20 Hive创建表

语法:create [external] table [if not exists] table_name

[(col_name data_type [comment col_comment], ...)] ----指定表的名称和表的具体列信息。

[comment table_comment] ---表的描述信息。

[partitioned by (col_name data_type [comment col_comment], ...)] ---表的分区信息。

[clustered by (col_name, col_name, ...)

[sorted by (col_name [asc|desc], ...)] into num_buckets buckets] ---表的桶信息。

[row format row_format] ---表的数据分割信息,格式化信息。

[stored as file_format] ---表数据的存储序列化信息。

[location hdfs_path] ---数据存储的文件夹地址信息

Hive默认创建的普通表被称为管理表或内部表。表的数据由Hive进行统一管理,默认存储于数据仓库目录中。可通过Hive的配置文件hive-site.xml对进行修改。可以通过Hadoop web UI进行查看创建结果。

图1-21 HDFS查看创建结果

除了默认的内部表之外,Hive也可以使用关键词“EXTERNAL”创建外部表。外部表的数据可以存储于数据仓库以外的位置,既可以手动修改存储于HDFS上的地址。

分区表:目的是为了避免暴力扫描,一个分区就是HDFS上的一个独立文件夹;Hive的分区就是HDFS的目录分割;注意的是,创建表时指定的表的列中不应该包含分区列,分区列需要使用关键词partitioned by在后面单独指定。

hive> create table teacher(

> num int,

> name string,

> email map<string,int>,

> class array<string>)

> partitioned by (age int)

> row format delimited fields terminated by ",";

分桶表:可以将表或者分区进一步细化成桶,是对数据进行更细粒度的划分,以便获得更高的查询效率。桶在数据存储上与分居不同的是,一个分区会存储于一个目录数据文件存储于该目录中,而一个桶将存储为一个文件,数据内容存储于文件中。注意的是,创建桶表时指定桶列需要提前创建,使用关键词clustered by在后面单独指定,并指定分为多少个桶(buckets)。

hive> create table teacher(

> num int,

> name string,

> email map<string,int>,

> class array<string>)

> clustered by (num) into 4 buckets

> row format delimited fields terminated by ",";

步骤二:查看所有表与详细信息

hive> show tables; hive> desc teacher; hive> desc formatted teacher; 语法:desc <table_name>

图1-22 Hive查看表详情

也可以复制一个已经存在的表。

hive> create table teacher2 like teacher;

语法:create <table_name> like <table_copy_name>;

步骤三:修改表

修改表名。

hive> alter table teacher rename to new_teacher;

语法:alter table <table_name> rename to <new_table_name>

修改表的列名,数据类型,列注释和列所在的位置,FIRST将列放在第一列,AFTER col_name将列放在col_name后面一列。下面的语句将列名num修改为number,数据类型为更改为string并添加注释,最后将这一列放在name后面。

hive> alter table new_teacher change num number string comment 'the num of teacher, change datatype to string ' after name;

语法:alter table <table_name> change [cloumn] <col_old_name> <col_new_name> column_type [conmment col_conmment] [first|after column_name];

增加/更新列,add columns允许用户在当前列的末尾,分区列之前添加新的列,replace columns允许用户更新列,更新的过程是先删除当前的列,然后在加入新的列。

hive> alter table new_teacher add columns(age int);

语法:alter table <table_name> add|replace columns (<col_name> data_type [conmment col_comment], ...);

图1-23 alter操作

步骤四:删除表退出

删除表。 hive> drop table teacher2; 语法:drop table <table_name> 清空表。 hive> truncate table new_teacher; 语法:truncate table <table_name> hive> exit;

图1-24 清空数据并删除表

实验三 Hive查询

实验内容与目标

完成本实验,您应该能够:

  • 学习Hive Shell基本操作。
  • 学习多表查询

实验视图

图1-25 select简单操作

实验环境

服务器集群

3个以上节点,节点间网络互通,各节点最低配置:双核CPU、8GB内存、100G硬盘

运行环境

CentOS 7.2

用户名/密码

root/password hadoop/password

服务和组件

HDFS、Yarn、MapReduce

实验过程

实验任务一:数据导入

步骤一:插入单条数据并查询

新建学生表,具有学号,姓名,班级,身高体重信息,成绩,插入单条数据进行测试。插入复杂类型需要使用select命令转储。查询语句则跟MySQL语语句一致。

语法:insert into <table_name> select <data,map(), array()>

语法:select * from <table_name>;

hive> create table student(

> num int,

> name string,

> class string,

> body map<string,int>,

> exam array<string>)

> row format delimited

> fields terminated by '|'

> collection items terminated by ','

> map keys terminated by ':'

> lines terminated by 'n';

hive> create table lib(

> num int,

> book string)

> row format delimited

> fields terminated by '|'

> collection items terminated by ','

> map keys terminated by ':'

> lines terminated by 'n';

hive> create table price(

> book string,

> price int)

> row format delimited

> fields terminated by '|'

> collection items terminated by ','

> map keys terminated by ':'

> lines terminated by 'n';

hive> insert into student (num,name,class,body,exam) select 20200101,'Wlen','grade 2',map('height',175,'weight',60),array('80','70');

图1-26 插入单条信息

步骤二:批量导入

在插入数据过程中调用MR操作,效率低下,既Hive的数据通常为Load批量导入。准备数据,数据可以为本地存储,也可以是HDFS上。

数据存储在txt文本中,属性之间以” |”隔开,需要注意的是在创建表时,应设置fields terminated by '|',否则,默认为“,”。由于表中含有复杂数据格式,简单的分隔符通常失去效果。数据如下:

图1-27 导入信息详情

使用Load函数批量导入数据。

hive> load data local inpath '/opt/software/student.txt' into table student;

hive> load data local inpath '/opt/software/lib.txt' into table lib;

hive> load data local inpath '/opt/software/price.txt' into table price;

语法:load data local inpath <address> [overwrite] into table < table_name>;

当数据存储地址为HDFS时,相当于对数据在HDFS上进行迁移。

语法:load data inpath <address> [overwrite] into table <table_name>;

图1-28 数据导入

实验任务二:select查询

步骤一:简单查询

Hive中的SELECT基础语法和标准SQL语法基本一致,支持WHERE、DISTINCT、GROUP BY、ORDER BY、HAVING、LIMIT、子查询等;在所有的数据库系统中,SELECT语句是使用最多,也最复杂的一块。

语法:SELECT [ALL | DISTINCT] select_expr, select_expr, ...

FROM table_reference

[WHERE where_condition] [GROUP BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMIT number]

普通查询跟MySQL查询的一模一样。

hive> select * from student;

图1-29 select查询

步骤二:条件查询

1.where语句

Where语句是属于布尔表达式,其后可以与“且”,“或”进行联动进行复杂查询。注意特殊字段的查找方式。

hive> select * from student where class = 'grade 4';

hive> select * from student where exam[0] = 96 or exam[1]=77;

hive> select * from student where body['height'] = 170;

图1-30 条件查询

2. distinct和 all语句

distinct用途为去除重复的项,不加参数则默认为all。distinct参数执行时调用MR进行排序,对大规模数据效率较高。

hive> select class from student;

hive> select distinct class from student;

图1-31 去除重复项

3. group by与having语句

group by是对列进行分组查询,having可以对group by结果进行进一步的过滤。Having与where的区别是,where后面不能写分组函数,而having后面可以使用分组函数。

以下语句首先筛选统计年级总数,然后过滤出2年级以上的同学有多少个。

hive> select class ,count(*) from student group by class;

hive> select class ,count(*) num from student group by class having num >=2;

其中num为存储count(*)的结果。

图1-32 分组查询

步骤三:limit限制语句与union联合

语法: Select * from <table_name> limit <up,down> select UNION [ALL | DISTINCT] select UNION [ALL | DISTINCT] select …

Limit限制查询的说明范围,当大数据查询时,行出过多需要限制查询。union把多个select的结果并集展示出来,可以多表联动。

hive> select * from student limit 2,4; hive> select class from student union select num from student;

图1-33 限制查询

步骤四:order by排序与sort by排序

order by为全局排序,后面可以有多列进行排序,默认按字典排序。对于大规模的数据集order by的效率非常低。在很多情况下,并不需要全局排序,此时可以使用sort by。以下对成绩进行排序,结果虽然一样。当遇到大规模数据时,sort by可以通过修改reducer个数,为每个reducer产生一个排序文件。每个Reducer内部进行排序,对全局结果集来说不是排序。而order by只调用一个Reducer进行计算。

hive> set mapreduce.job.reduces=3; hive> select * from student sort by exam[0]; hive> select * from student order by exam[0];

图1-34 排序

步骤五:JOIN多表查询

语法:select <clo> from <table_name> join <table_name> on <table.clo>=< table.clo > join <table_name> on <table.clo>=< table.clo >…

join可以连接多表联合查询,要求查询的条件在连个表中,而且连接 n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。本例有两个表,以为学生表具有学号num,一个图书馆表,具有学号以及借书名称。

hive> select * from student join lib on student.num =lib.num;

查询每个人的借书的名称。

图1-35 两表查询

hive> select * from student left outer join lib on student.num =lib.num;

左连接,查询每个人的借书的名称。区别是左表的信息都显示,例如:下图中学号20200103与20200106没有借书记录,显示为NULL。

图1-36 左连接查询

hive> select * from student right outer join lib on student.num =lib.num;

与左连接对应的是右连接,右表全部显示。

图1-37 右连接查询

hive> select * from student full outer join lib on student.num =lib.num; 全连接是左右连接的综合使用,显示两张表的所有信息。若没有关联项目则放到最后显示为NULL。

图1-38 全连接查询

hive> select * from student left semi join lib on student.num =lib.num;

半连接只显示左表内容,即显示跟连接的右表有关系的左表内容。

图1-39 半连接查询

hive> select * from student join lib on student.num =lib.num join price on lib.book=price.book;

多表(两个以上)查询,例如:查询学生租借的书以及书的价格。大多数情况下,Hive会对每对jion连接对象启动一个MapReduce任务。

图1-40 多表查询

0 人点赞