3.2.1 数据仓库工具 -- Hive(安装配置、建库建表、数据导入导出)_hive建表工具-程序员宅基地

技术标签: hive  

3.2.1 数据仓库工具 – Hive



一、Hive概述

1. Hive的优点

  • 学习成本低。Hive提供了类似SQL的查询语言,开发人员能快速上手;
  • 处理海量数据。底层执行的是MapReduce 任务;
  • 系统可以水平扩展。底层基于Hadoop;
  • 功能可以扩展。Hive允许用户自定义函数;
  • 良好的容错性。某个节点发生故障,HQL仍然可以正常完成;
  • 统一的元数据管理。元数据包括:有哪些表、表有什么字段、字段是什么类型

2.Hive的缺点

  • HQL表达能力有限;
  • 迭代计算无法表达;
  • Hive的执行效率不高(基于MR的执行引擎);
  • Hive自动生成的MapReduce作业,某些情况下不够智能;
  • Hive的调优困难;

3.Hive架构

在这里插入图片描述
在这里插入图片描述

二、Hive安装与配置

2.1 Hive安装配置

Hive官网:http://hive.apache.org
下载网址:http://archive.apache.org/dist/hive/
文档网址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual

在这里插入图片描述

# hive安装包 
apache-hive-2.3.7-bin.tar.gz 

# MySQL安装包 
mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar 

# MySQL的JDBC驱动程序 
mysql-connector-java-5.1.46.jar 

# 整体的安装步骤: 
1、安装MySQL 2、安装配置Hive 3、Hive添加常用配置

2.1.1、MySQL安装

Hive中使用MySQL存储元数据,MySQL的版本 5.7.26。安装步骤:

1、环境准备(删除有冲突的依赖包、安装必须的依赖包) 
2、安装MySQL 
3、修改root口令(找到系统给定的随机口令、修改口令) 
4、在数据库中创建hive用户
1、删除MariaDB

centos7.6自带的 MariaDB(MariaDB是MySQL的一个分支),与要安装的MySQL有冲突,需要删除。

# 查询是否安装了
mariadb rpm -aq | grep mariadb 
# 删除mariadb。-e 删除指定的套件;--nodeps 不验证套件的相互关联性 
rpm -e --nodeps mariadb-libs
2、安装依赖
yum install perl -y 
yum install net-tools -y
3、安装MySQL
# 解压缩 
tar xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar 

# 依次运行以下命令 
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm 
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm 
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm 
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm

其中rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm 报如下错误解决方式:
在这里插入图片描述
原因:这是由于yum安装了旧版本的GPG keys造成的
解决办法:后面加上 --force --nodeps 问题解决

rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm --force --nodeps

4、启动数据库

systemctl start mysqld

5、查找root密码

grep password /var/log/mysqld.log

6、修改 root 口令
# 进入MySQL,使用前面查询到的口令 
mysql -u root -p 

#mysql下执行
# 设置口令强度;将root口令设置为12345678;刷新 
set global validate_password_policy=0; 
set password for 'root'@'localhost' =password('12345678'); flush privileges;

在这里插入图片描述

本地连接不上云服务器:

#mysql下
use mysql
update user set host='%' where user='root' and host='localhost';
#重启mysql
7、创建 hive 用户
-- mysql下
mysql -u root -p

-- 创建用户设置口令、授权、刷新 
CREATE USER 'hive'@'%' IDENTIFIED BY '12345678'; 
GRANT ALL ON *.* TO 'hive'@'%'; 
FLUSH PRIVILEGES;

2.1.2、Hive 安装

安装步骤:
 1、下载、上传、解压缩 
 2、修改环境变量 
 3、修改hive配置 
 4、拷贝JDBC的驱动程序 
 5、初始化元数据库
1、下载Hive软件,并解压缩
cd /opt/lagou/software 
[root@linux03 software]# tar zxvf apache-hive-2.3.7-bin.tar.gz -C ../servers/
cd ../servers 
#文件夹重命名
mv apache-hive-2.3.7-bin hive-2.3.7
2、修改环境变量
# 在 /etc/profile 文件中增加环境变量 
vim /etc/profile

export HIVE_HOME=/opt/lagou/servers/hive-2.3.7 
export PATH=$PATH:$HIVE_HOME/bin 

# 执行并生效 
source /etc/profile
3、修改 Hive 配置
cd $HIVE_HOME/conf 
vim hive-site.xml
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration> 
  <!-- hive元数据的存储位置 -->  
  <property> 
    <name>javax.jdo.option.ConnectionURL</name>  
    <value>jdbc:mysql://linux03:3306/hivemetadata?createDatabaseIfNotExist=true&amp;useSSL=false</value>  
    <description>JDBC connect string for a JDBC metastore</description> 
  </property>
  <!-- 指定驱动程序 -->  
  <property> 
    <name>javax.jdo.option.ConnectionDriverName</name>  
    <value>com.mysql.jdbc.Driver</value>  
    <description>Driver class name for a JDBC metastore</description> 
  </property>  
  <!-- 连接数据库的用户名 -->  
  <property> 
    <name>javax.jdo.option.ConnectionUserName</name>  
    <value>hive</value>  
    <description>username to use against metastore database</description> 
  </property>  
  <!-- 连接数据库的口令 -->  
  <property> 
    <name>javax.jdo.option.ConnectionPassword</name>  
    <value>12345678</value>  
    <description>password to use against metastore database</description> 
  </property> 
</configuration>

备注:

注意jdbc的连接串,如果没有 useSSL=false 会有大量警告 在xml文件中 & amp; 表示 &

4、拷贝 MySQL JDBC 驱动程序

将 mysql-connector-java-5.1.46.jar 拷贝到 $HIVE_HOME/lib

[root@linux03 software]# cp mysql-connector-java-5.1.46.jar $HIVE_HOME/lib

5、初始化元数据库
[root@linux123 ~]# cd $HIVE_HOME/bin
[root@linux123 bin]# schematool -dbType mysql -initSchema
6、启动Hive,执行命令
# 启动hive服务之前,请先启动hdfs、yarn的服务 
[root@linux123 ~]$ hive 
hive> show functions;

在这里插入图片描述

2.1.3、Hive 属性配置

可在 hive-site.xml 中增加以下常用配置,方便使用。

数据存储位置
<property> 
   <!-- 数据默认的存储位置(HDFS) -->  
    <name>hive.metastore.warehouse.dir</name>  
    <value>/user/hive/warehouse</value>  
    <description>location of default database for the warehouse</description> 
</property> 
显示当前库
 <property> 
    <!-- 在命令行中,显示当前操作的数据库 -->  
    <name>hive.cli.print.current.db</name>  
    <value>true</value>  
    <description>Whether to include the current database in the Hive prompt.</description> 
  </property>
显示表头属性
<property> 
    <!-- 在命令行中,显示数据的表头 -->  
    <name>hive.cli.print.header</name>  
    <value>true</value> 
  </property>
本地模式
<property> 
    <!-- 操作小规模数据时,使用本地模式,提高效率 -->  
    <name>hive.exec.mode.local.auto</name>  
    <value>true</value>  
    <description>Let Hive determine whether to run in local mode automatically</description> 
  </property> 

备注:当 Hive 的输入数据量非常小时,Hive 通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间会明显被缩短。当一个job满足如下条件才能真正使用本地模式:
在这里插入图片描述

Hive的日志文件

Hive的log默认存放在 /tmp/root 目录下(root为当前用户名);这个位置可以修改。

vim $HIVE_HOME/conf/hive-log4j2.properties 

> 将以下内容
> #property.hive.log.dir = ${
    sys:java.io.tmpdir}/${
    sys:user.name}
改为:property.hive.log.dir = /opt/lagou/servers/hive-2.3.7/logs

可以不修改,但是要知道位置。
在这里插入图片描述
附录:添加第三方用户(Hadoop)

groupadd hadoop 
# -m:自动建立用户的登入目录 
# -g:指定用户所属的起始群组 
# -G<群组>:指定用户所属的附加群组 
# -s:指定用户登入后所使用的shell 
useradd -m hadoop -g hadoop -s /bin/bash 
passwd hadoop 
visudo 
# 在100行后添加。允许用户执行sudo,免密 
hadoop ALL=(ALL) NOPASSWD:ALL

建议:现阶段使用root用户
在这里插入图片描述

2.1.4、参数配置方式

查看参数配置信息:

-- 查看全部参数 
hive> set; 
-- 查看某个参数 
hive> set hive.exec.mode.local.auto; 
--显示结果:hive.exec.mode.local.auto=false

在这里插入图片描述
参数配置的三种方式:

1、用户自定义配置文件(hive-site.xml) 
2、启动hive时指定参数(-hiveconf) 
3、hive命令行指定参数(set) 
配置信息的优先级: 
set > -hiveconf > hive-site.xml > hive-default.xml
1、配置文件方式

默认配置文件:hive-default.xml
用户自定义配置文件:hive-site.xml
配置优先级:hive-site.xml > hive-default.xml
配置文件的设定对本机启动的所有Hive进程有效;
配置文件的设定对本机所有启动的Hive进程有效;

2、启动时指定参数值

启动Hive时,可以在命令行添加 -hiveconf param=value 来设定参数,这些设定仅对本次启动有效。

# 启动时指定参数 
hive -hiveconf hive.exec.mode.local.auto=true 

# 在命令行检查参数是否生效 
hive> set hive.exec.mode.local.auto; hive.exec.mode.local.auto=true
3、命令行修改参数

可在 Hive 命令行中使用SET关键字设定参数,同样仅对本次启动有效

hive> set hive.exec.mode.local.auto=false; 
hive> set hive.exec.mode.local.auto; 
显示:hive.exec.mode.local.auto=false

set > -hiveconf > hive-site.xml > hive-default.xml

2.2 Hive命令

1、Hive

在这里插入图片描述
-e:不进入hive交互窗口,执行sql语句

hive -e "select * from users"

-f:执行脚本中sql语句

# 创建文件hqlfile1.sql,内容:select * from users 

# 执行文件中的SQL语句 
hive -f hqlfile1.sql 

# 执行文件中的SQL语句,将结果写入文件 
hive -f hqlfile1.sql >> result1.log

2、退出Hive命令行

exit; quit;

3、在命令行执行 shell 命令 / dfs 命令

hive> ! ls; 
hive> ! clear; 
hive> dfs -ls / ;

三、 数据类型与文件格式

Hive支持关系型数据库的绝大多数基本数据类型,同时也支持4种集合数据类型

第 1 节 基本数据类型及转换

Hive类似和java语言中一样,会支持多种不同长度的整型和浮点类型数据,同时也支持布尔类型、字符串类型,时间戳数据类型以及二进制数组数据类型等。详细信息见下表:
在这里插入图片描述
这些类型名称都是 Hive 中保留字。这些基本的数据类型都是 java 中的接口进行实现的,因此与 java 中数据类型是基本一致的:
在这里插入图片描述
数据类型的隐式转换
Hive的数据类型是可以进行隐式转换的,类似于Java的类型转换。如用户在查询中将一种浮点类型和另一种浮点类型的值做对比,Hive会将类型转换成两个浮点类型中值较大的那个类型,即:将FLOAT类型转换成DOUBLE类型;当然如果需要的话,任意整型会转化成DOUBLE类型。 Hive 中基本数据类型遵循以下层次结构,按照这个层次结构,子类型到祖先类型允许隐式转换。
在这里插入图片描述
在这里插入图片描述

hive> select '1.0'+2; 
OK3.0 
hive> select '1111' > 10; 
hive> select 1 > 0.8;

数据类型的显示转换
使用cast函数进行强制类型转换;如果强制类型转换失败,返回NULL

hive> select cast('1111s' as int); 
OKNULL 

hive> select cast('1111' as int); 
OK1111

第 2 节 集合数据类型

Hive支持集合数据类型,包括array、map、struct、union
在这里插入图片描述
和基本数据类型一样,这些类型的名称同样是保留字;
ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似;
STRUCT 与 C 语言中的 Struct 类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套;

hive> select array(1,2,3);
 OK[1,2,3] 

-- 使用 [] 访问数组元素 
hive> select arr[0] from (select array(1,2,3) arr) tmp; 
hive> select map('a', 1, 'b', 2, 'c', 3); 
OK{
    "a":1,"b":2,"c":3} 

-- 使用 [] 访问map元素 
hive> select mymap["a"] from (select map('a', 1, 'b', 2, 'c', 3) as mymap) tmp; 

-- 使用 [] 访问map元素。 key 不存在返回 NULL 
hive> select mymap["x"] from (select map('a', 1, 'b', 2, 'c', 3) as mymap) tmp; 
NULL 
hive> select struct('username1', 7, 1288.68);
OK
{
    "col1":"username1","col2":7,"col3":1288.68} 

-- 给 struct 中的字段命名 
hive> select named_struct("name", "username1", "id", 7, "salary", 12880.68); 
OK
{
    "name":"username1","id":7,"salary":12880.68} 

-- 使用 列名.字段名 访问具体信息 
hive> select userinfo.id > from (select named_struct("name", "username1", "id", 7, "salary", 12880.68) userinfo) tmp; 

-- union 数据类型 
hive> select create_union(0, "zhansan", 19, 8000.88) uinfo;

第 3 节 文本文件数据编码

Hive表中的数据在存储在文件系统上,Hive定义了默认的存储格式,也支持用户自定义文件存储格式。
Hive默认使用几个很少出现在字段值中的控制字符,来表示替换默认分隔符的字符。
Hive默认分隔符

id name age hobby(array) score(map) 
//字段之间:^A 元素之间: ^B key-value之间:^C 
666^Alisi^A18^Aread^Bgame^Ajava^C97^Bhadoop^C87 create table s1( 
id int, 
name string, 
age int, 
hobby array<string>, 
score map<string, int> );
load data local inpath '/home/hadoop/data/s1.dat' into table s1; 
select * from s1;

在这里插入图片描述
在这里插入图片描述

第 4 节 读时模式

在这里插入图片描述

四、 HQL操作之 – DDL命令

参考https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
DDL(data definition language): 主要的命令有CREATE、ALTER、DROP等。
DDL主要是用在定义、修改数据库对象的结构 或 数据类型。
在这里插入图片描述

第 1 节 数据库操作

Hive有一个默认的数据库default,在操作HQL时,如果不明确的指定要使用哪个库,则使用默认数据库;
Hive的数据库名、表名均不区分大小写;
名字不能使用数字开头;
不能使用关键字,尽量不使用特殊符号;
创建数据库语法

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name 
	[COMMENT database_comment]
	[LOCATION hdfs_path] 
	[MANAGEDLOCATION hdfs_path] 
	[WITH DBPROPERTIES (property_name=property_value, ...)];
-- 创建数据库,在HDFS上存储路径为 
/user/hive/warehouse/*.db 
hive (default)> create database mydb;
hive (default)> dfs -ls /user/hive/warehouse; 

-- 避免数据库已经存在时报错,使用 if not exists 进行判断【标准写法】 
hive (default)> create database if not exists mydb; 

-- 创建数据库。添加备注,指定数据库在存放位置 
hive (default)> create database if not exists mydb2 comment 'this is mydb2' location '/user/hive/mydb2.db';

查看数据库

-- 查看所有数据库 
show databases; 

-- 查看数据库信息 
desc database mydb2; 
desc database extended mydb2; 
describe database extended mydb2;

使用数据库

use mydb;

删除数据库

-- 删除一个空数据库 
drop database databasename; 
-- 如果数据库不为空,使用 cascade 强制删除 
drop database databasename cascade;

第 2 节 建表语法

create [external] table [IF NOT EXISTS] table_name 
	[(colName colType [comment 'comment'], ...)] 
	[comment table_comment] 
	[partition by (colName colType [comment col_comment], ...)] 
	[clustered BY (colName, colName, ...) [sorted by (col_name [ASC|DESC], ...)] into num_buckets buckets] 
	[row format row_format] 
	[stored as file_format] 
	[LOCATION hdfs_path] 
	[TBLPROPERTIES (property_name=property_value, ...)] 
	[AS select_statement]; 
	CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] 
	[db_name.]table_name 
	LIKE existing_table_or_view_name
	[LOCATION hdfs_path];

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第 3 节 内部表 & 外部表

在这里插入图片描述
内部表
t1.dat文件内容

2;zhangsan;book,TV,code;beijing:chaoyang,shagnhai:pudong 
3;lishi;book,code;nanjing:jiangning,taiwan:taibei 
4;wangwu;music,book;heilongjiang:haerbin

创建表 SQL

-- 创建内部表
create table t1(
    id int,
    name string,
    hobby array<string>,
    addr map<string, string>
)
row format delimited
fields terminated by ";"
collection items terminated by ","
map keys terminated by ":";

-- 显示表的定义,显示的信息较少
desc t1;
 
-- 显示表的定义,显示的信息多,格式友好
desc formatted t1;
 
-- 加载数据
load data local inpath '/home/hadoop/data/t1.dat' into table t1;
 
-- 查询数据
select * from t1;
 
-- 查询数据文件
dfs -ls /user/hive/warehouse/mydb.db/t1;
 
-- 删除表。表和数据同时被删除
drop table t1;
 
-- 再次查询数据文件,已经被删除

外部表

-- 创建外部表
create external table t2(
id int,
name string,
hobby array<string>,
addr map<string, string>
)
row format delimited
fields terminated by ";"
collection items terminated by ","
map keys terminated by ":";
 
-- 显示表的定义
desc formatted t2;
 
-- 加载数据
load data local inpath '/home/hadoop/data/t1.dat' into table t2;
 
-- 查询数据
select * from t2;
 
-- 删除表。表删除了,目录仍然存在
drop table t2;
 
-- 再次查询数据文件,仍然存在

内部表与外部表的转换

-- 创建内部表,加载数据,并检查数据文件和表的定义
create table t1(
id int,
name string,
hobby array<string>,
addr map<string, string>
)
row format delimited
fields terminated by ";"
collection items terminated by ","
map keys terminated by ":";
 
load data local inpath '/home/hadoop/data/t1.dat' into table t1;
 
dfs -ls /user/hive/warehouse/mydb.db/t1;
 
desc formatted t1;
 
-- 内部表转外部表
alter table t1 set tblproperties('EXTERNAL'='TRUE');
 
-- 查询表信息,是否转换成功
desc formatted t1;
 
-- 外部表转内部表。EXTERNAL 大写,false 不区分大小
alter table t1 set tblproperties('EXTERNAL'='FALSE');
 
-- 查询表信息,是否转换成功
desc formatted t1;

在这里插入图片描述

第 4 节 分区表

在这里插入图片描述
分区表创建与数据加载

-- 创建分区表, 关键字partitioned 
create table if not exists t3(
 id    int
 ,name  string
 ,hobby  array<string>
 ,addr  map<String,string>
)
partitioned by (dt string)
row format delimited
fields terminated by ';'
collection items terminated by ','
map keys terminated by ':';
 
-- 加载数据。
load data local inpath "/home/hadoop/data/t1.dat" into table t3 partition(dt="2020-06-01");
 
load data local inpath "/home/hadoop/data/t1.dat" into table t3 partition(dt="2020-06-02");

备注:分区字段不是表中已经存在的数据,可以将分区字段看成伪列
查看分区

show partitions t3;

新增分区并设置数据

-- 增加一个分区,不加载数据
alter table t3 add partition(dt='2020-06-03');
 
-- 增加多个分区,不加载数据
alter table t3
add partition(dt='2020-06-05') partition(dt='2020-06-06');
 
-- 增加多个分区。准备数据
hdfs dfs -cp /user/hive/warehouse/mydb.db/t3/dt=2020-06-01 /user/hive/warehouse/mydb.db/t3/dt=2020-06-07
hdfs dfs -cp /user/hive/warehouse/mydb.db/t3/dt=2020-06-01 /user/hive/warehouse/mydb.db/t3/dt=2020-06-08
 
-- 增加多个分区。加载数据
alter table t3 add
partition(dt='2020-06-07') 
location '/user/hive/warehouse/mydb.db/t3/dt=2020-06-07'
 
partition(dt='2020-06-08') 
location '/user/hive/warehouse/mydb.db/t3/dt=2020-06-08';
 
-- 查询数据
select * from t3;

修改分区的hdfs路径

alter table t3 partition(dt='2020-06-01') set location '/user/hive/warehouse/t3/dt=2020-06-03';

删除分区

-- 可以删除一个或多个分区,用逗号隔开 
alter table t3 drop partition(dt='2020-06-03'), partition(dt='2020-06-04');

第 5 节 分桶表

在这里插入图片描述

-- 测试数据
1 java 90
1 c 78
1 python 91
1 hadoop 80
2 java 75
2 c 76
2 python 80
2 hadoop 93
3 java 98
3 c 74
3 python 89
3 hadoop 91
5 java 93
6 c 76
7 python 87
8 hadoop 88
-- 创建分桶表
create table course(
id int,
name string,
score int
)
clustered by (id) into 3 buckets
row format delimited fields terminated by "\t";
 
-- 创建普通表
create table course_common(
id int,
name string,
score int
)
row format delimited fields terminated by "\t";
 
-- 普通表加载数据
load data local inpath '/home/hadoop/data/course.dat' into table course_common;
 
-- 通过 insert ... select ... 给桶表加载数据
insert into table course select * from course_common;
 
-- 观察分桶数据。数据按照:(分区字段.hashCode) % (分桶数) 进行分区

在这里插入图片描述

在这里插入图片描述

第 6 节 修改表 & 删除表

-- 修改表名。rename
alter table course_common
rename to course_common1;
 
-- 修改列名。change column
alter table course_common1
change column id cid int;
 
-- 修改字段类型。change column
alter table course_common1
change column cid cid string;
-- 报错 The following columns have types incompatible with the existing columns in their respective positions
-- 修改字段数据类型时,要满足数据类型转换的要求。如int可以转为string,但是string不能转为int
 
-- 增加字段。add columns
alter table course_common1
add columns (common string);
 
-- 删除字段:replace columns, 要保留的写在下面, 要删除的不写, 另外该步骤还可以改字段名
-- 这里仅仅只是在元数据中删除了字段,并没有改动hdfs上的数据文件
alter table course_common1
replace columns(
id string, cname string, score int);
 
-- 删除表
drop table course_common1;

在这里插入图片描述

五、 HQL操作之–数据操作

第 1 节 数据导入

装载数据(Load)
基本语法:

LOAD DATA [LOCAL] INPATH 'filepath'
[OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

在这里插入图片描述
在这里插入图片描述
准备工作:

-- 创建表
CREATE TABLE tabA ( 
id int
,name string
,area string 
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
 
数据文件(~/data/sourceA.txt):
1,fish1,SZ
2,fish2,SH
3,fish3,HZ
4,fish4,QD
5,fish5,SR
 
-- 拷贝文件到 HDFS
hdfs dfs -put sourceA.txt data/

装载数据:

-- 加载本地文件到hive(tabA)
LOAD DATA LOCAL INPATH '/home/hadoop/data/sourceA.txt'
INTO TABLE tabA;
 
-- 检查本地文件还在
 
-- 加载hdfs文件到hive(tabA)
LOAD DATA INPATH 'data/sourceA.txt'
INTO TABLE tabA;
 
-- 检查HDFS文件,已经被转移
 
-- 加载数据覆盖表中已有数据
LOAD DATA INPATH 'data/sourceA.txt'
OVERWRITE INTO TABLE tabA;
 
-- 创建表时加载数据
hdfs dfs -mkdir /user/hive/tabB
hdfs dfs -put sourceA.txt /user/hive/tabB
CREATE TABLE tabB ( 
id INT
,name string
,area string 
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
Location '/user/hive/tabB';

插入数据(Insert)

-- 创建分区表
CREATE TABLE tabC ( 
id INT
,name string
,area string 
)
partitioned by (month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
 
-- 插入数据
insert into table tabC
partition(month='202001')
values (5, 'wangwu', 'BJ'), (4, 'lishi', 'SH'), (3, 'zhangsan', 'TJ');
 
-- 插入查询的结果数据
insert into table tabC partition(month='202002')
select id, name, area from tabC where month='202001';
 
-- 多表(多分区)插入模式, 下面overwrite覆盖的是分区表中的数据
from tabC
insert overwrite table tabC partition(month='202003')
select id, name, area where month='202002'
insert overwrite table tabC partition(month='202004')
select id, name, area where month='202001'or month='202002';

创建表并插入数据(as select)

-- 根据查询结果创建表 
create table if not exists tabD as select * from tabC;

使用import导入数据

import table student2 partition(month='201709') from '/user/hive/warehouse/export/student';

第 2 节 数据导出

-- 将查询结果导出到本地
insert overwrite local directory '/home/hadoop/data/tabC'
select * from tabC;
 
-- 将查询结果格式化输出到本地
insert overwrite local directory '/home/hadoop/data/tabC2'
row format delimited fields terminated by ' '
select * from tabC;
 
-- 将查询结果导出到HDFS
insert overwrite directory '/user/hadoop/data/tabC3'
row format delimited fields terminated by ' '
select * from tabC;
 
-- dfs 命令导出数据到本地。本质是执行数据文件的拷贝
dfs -get /user/hive/warehouse/mydb.db/tabc/month=202001 /home/hadoop/data/tabC4
 
-- hive 命令导出数据到本地。执行查询将查询结果重定向到文件
hive -e "select * from tabC" > a.log                                            "
 
-- export 导出数据到HDFS。使用export导出数据时,不仅有数还有表的元数据信息
export table tabC to '/user/hadoop/data/tabC4';
 
-- export 导出的数据,可以使用 import 命令导入到 Hive 表中
-- 使用 like tname创建的表结构与原表一致。create ... as select ... 结构可能不一致
create table tabE like tabc;
import table tabE from '/user/hadoop/data/tabC4';
 
-- 截断表,清空数据。(注意:仅能操作内部表)
truncate table tabE;
 
alter table tabC set tblproperties("EXTERNAL"="TRUE");
-- 以下语句报错,外部表不能执行 truncate 操作
truncate table tabC;

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47134119/article/details/113317252

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文