DDL操作

本文介绍了Hive中元数据服务的配置与访问方法、使用Beeline客户端进行JDBC访问的过程、解决Metastore和HiveServer2服务的问题、Hive配置详解、数据类型与转换、DDL操作以及数据的导入导出等关键操作。
摘要由CSDN通过智能技术生成
在这里插入代码片

一、 使用独立的元数据服务的方式访问Hive
– 概述:当开启多个hive客户端的时候,大家访问同一个metastore服务和元数据进行交互!

– 实现步骤:
– 修改配置文件 hive-site.xml


hive.metastore.uris
thrift://hadoop102:9083

-- 手动单独启动 metastore 服务
hive --service metastore

二、 使用JDBC方式访问Hive(使用jdbc的方式展示Hive客户端)
– 概述: 出于对客户端用户体验的提升,我们可以采用 beeline 客户端操作hive,
– 通知启动一个支持beeline客户端的服务 hiveserver2

– 实现步骤:
– 修改配置文件 hive-site.xml


hive.server2.thrift.bind.host
hadoop102

```sql
<!-- 指定hiveserver2连接的端口号 -->
<property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
</property>

-- 启动 hiveserver2 服务 
hive --service hiveserver2

-- 启动beeline客户端
beeline -u jdbc:hive2://hadoop102:10000 -n atguigu

-- 注意:使用beeline 客户端一定要注意 在Hadoop的的core-site.xml 中添加以下配置
<!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 -->
<property>
  <name>hadoop.proxyuser.atguigu.hosts</name>
  <value>*</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理用户所属组 -->
<property>
  <name>hadoop.proxyuser.atguigu.groups</name>
  <value>*</value>`在这里插入代码片`
</property>
<!-- 配置该atguigu(superUser)允许通过代理的用户-->
<property>
  <name>hadoop.proxyuser.atguigu.users</name>
  <value>*</value>
</property>

三、 解决 metastore 和 hiveserver2 服务的敞口独占及进程阻塞问题
 
1. metastore 
   -- 处理 控制台 日志输出问题 
   hive --service metastore 1>/opt/module/hive-3.1.2/logs/metastore.log 2>&1

   -- 处理 进程阻塞 问题 
   hive --service metastore 1>/opt/module/hive-3.1.2/logs/metastore.log 2>&1 &

   -- 处理窗口独占 问题 
   nohup hive --service metastore 1>/opt/module/hive-3.1.2/logs/metastore.log 2>&1 &


2. hiveserver2 
   -- 处理 控制台 日志输出问题 
   hive --service hiveserver2 1>/opt/module/hive-3.1.2/logs/hiveserver2.log 2>&1

   -- 处理 进程阻塞 问题 
   hive --service hiveserver2 1>/opt/module/hive-3.1.2/logs/hiveserver2.log 2>&1 &

   -- 处理窗口独占 问题 
   nohup hive --service hiveserver2 1>/opt/module/hive-3.1.2/logs/hiveserver2.log 2>&1 &



四、 Hive的一些配置工作 
1. Hive的交互命令
-- 概述: 当启动Hive客户端 可以结合一些命令参数 完成一些简单交互功能

-- 交互命令:
   -e
   -f
   -hiveconf

```sql
在这里插入代码片
  1. Hive常见属性配置

2.1 hive窗口打印默认库和表头

1)打印 当前库 和 表头
在hive-site.xml中加入如下两个配置:

hive.cli.print.header
true


hive.cli.print.current.db
true

2.2 参数配置方式
– 概述: 针对Hive,给hive修改配置参数的方式

– Hive中加载配置的顺序: hive-default.xml.template --> hive-site.xml --> 加载一些临时的配置

– 案例: 临时修改Hive的配置项 hive.cli.print.current.db
– 方式一:在启动Hive客户端的时候通过交互命令来修改 -hiveconf
hive -hiveconf hive.cli.print.current.db=false

– 方式二:登录Hive客户端后,通过set 命令临时修改

五、 Hive中的数据类型

  1. 基本数据类型
    int bigint double string

– 1. 建表

create table stu(
 id    int,
 name  string,
 sal   double,
 idcard  bigint
);

– 2. 插入数据

insert into stu values(1001, 'hello', 25000.00, 12345678965544333);

– 3. 优化Hive为本地模式(为了执行Job更快一些)

set hive.exec.mode.local.auto=true;

– 4. 简单查询

select * from stu;

±--------±----------±---------±-------------------+
| stu.id | stu.name | stu.sal | stu.idcard |
±--------±----------±---------±-------------------+
| 1001 | hello | 25000.0 | 12345678965544333 |
±--------±----------±---------±-------------------+
– 5.优化:让job执行效率高些(切换本地模式)
set hive.exec.mode.local.auto=true; //开启本地mr

  1. 集合数据类型

array map struct

– 1. 分析集合数据结构
{
“name”: “songsong”,
“friends”: [“bingbing” , “lili”] , //列表Array,
“children”: { //键值Map,
“xiao song”: 19 ,
“xiaoxiao song”: 18
}
“address”: { //结构Struct,
“street”: “hui long guan” ,
“city”: “beijing”,
“psotid”:123456
}
}

– 2. 准备一个数据文件
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing_123456
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing_123_456

– 3. 创建person表

create table person(
name string,
friends array,
children map<string,int>,
address structstreet:string,city:string,psotid:bigint
)
row format delimited fields terminated by “,”
collection items terminated by “_”
map keys terminated by “:”
lines terminated by “\n”
;

– 4. 将数据 person.txt 上传至 person表在HDFS中对应的位置

– 5. 简单查询
select * from person;

select name, friends[0], children[‘xiaoxiao song’], address.city from person;
±----------±----------±------±---------+
| name | _c1 | _c2 | city |
±----------±----------±------±---------+
| songsong | bingbing | 19 | beijing |
| yangyang | caicai | NULL | beijing |
±----------±----------±------±---------+

  1. 数据类型的转化
    – 1. 隐式转换(自动转化)
    select ‘1’ + 3;
    显示结果:
    ±-----+
    | _c0 |
    ±-----+
    | 4.0 |
    ±-----+

– 2. 显式转换
select cast(‘1’ as int) + 3;
±-----+
| _c0 |
±-----+
| 4 |
±-----+

六、 DDL数据库定义操作

  1. 库相关的操作
    – 语法结构:(中括号中的内容都是可选内容)
    create database db_name; – 简易化建库语法

CREATE DATABASE [IF NOT EXISTS] database_name – [IF NOT EXISTS] 判断当前库是否存在(不建议加…)
[COMMENT database_comment] – 针对当前库的描述信息
[LOCATION hdfs_path] – 指定当前库对应HDFS中的具体位置(通常不加,走默认路径)
[WITH DBPROPERTIES (property_name=property_value, …)]; – 针对当前库的结构化描述信息

– 1. 创建库
create database mydb1
comment ‘my db’
with dbproperties(‘author’=‘zcq’, ‘create_time’=‘20220119’);

create database mydb2
comment ‘my db2’
location ‘/mydb2’
with dbproperties(‘author’=‘zcq’, ‘create_time’=‘20220119’);

– 2. 查看库
show databases; – 查看当前Hive中所有的库的名称
desc database mydb1; – 查看指定的库的详情
±---------±---------±---------------------------------------------------±------------±------------±------------+
| db_name | comment | location | owner_name | owner_type | parameters |
±---------±---------±---------------------------------------------------±------------±------------±------------+
| mydb1 | my db | hdfs://hadoop102:9820/user/hive/warehouse/mydb1.db | atguigu | USER | |
±---------±---------±---------------------------------------------------±------------±------------±------------+
desc database extended mydb1; – 查看指定的库的详情

– 3. 修改库
alter database mydb2 set dbproperties(‘author’=‘bigdata1118’);

– 4. 删除数据库
drop database mydb1;

drop database mydb cascade; – 级联删除(非空的库的删除操作)

  1. 表相关的操作
    – 语法结构:(中括号中的内容都是可选内容)
    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name – [EXTERNAL]:指定当前表的类型为外部表,如果不加默认是内部表(管理表)

[(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, …) INTO num_buckets BUCKETS] – 创建分桶表的关键字

[SORTED BY (col_name [ASC|DESC], …)] – 针对当前表指定默认的排序字段(通常情况不建议加)

[row format delimited fields terminated by “xxxx”] – 指定当前行数据字段对应的值之间的分割符
[collection items terminated by “xxxx”] – 指定集合数据中的元素之间的分割符
[map keys terminated by “xxxx”] – 指定map结构中的key 和 value的分割符
[lines terminated by “\n”] – 指定每一行数据的之间分割符

[STORED AS file_format] – 指定当前表的存储文件的格式,默认是textfile(纯文本)

[LOCATION hdfs_path] – -- 指定当前表对应HDFS中的具体位置(通常不加,走默认路径)

[TBLPROPERTIES (property_name=property_value, …)] – 针对当前表的结构化描述信息

[AS select_statement] – 当复制一张表的加此项内容

create table haha1
as select name, friends, children, address from person
SORTED BY (name desc)
;

2.1 内部表和外部表的使用
– 1. 建表 (内部表/管理表)
— 案例实操
– 准备数据
– 创建student表
create table student(
id int, name string
)
row format delimited fields terminated by ‘\t’;

– 基本查询
select * from student;

– 查看当前student表的详细信息
desc formatted student;
| Table Type: | MANAGED_TABLE

– 删除表
drop table student;
– 结论:当前表如果是 内部表 删除的时候会把其在HDFS对应的真实数据以及目录结构都删除。

– 2. 建表 (外部表)
create external table student(
id int, name string
)
row format delimited fields terminated by ‘\t’;

– 基本查询
select * from student;

– 查看当前student表的详细信息
desc formatted student;
| Table Type: | EXTERNAL_TABLE

– -- 删除表
drop table student;

– 结论:当前表如果是 外部表 删除的时候不会把其在HDFS对应的真实数据以及目录结构都删除。

– 3. 分析 内部表和外部表的使用场景
– 内部表:一般Hive中中间建表的场景,更适合用内部表
– 外部表:通常情况下,为了保证HDFS中的数据的安全性,我们在Hive中使用外部表。

– 4. 管理表(内部表)与外部表的互相转换
– 将外部表转换成内部表
alter table student set tblproperties(‘EXTERNAL’=‘FALSE’);
alter table student set tblproperties(‘EXTERNAL’=‘TRUE’);

2.2 修改表
– 1. 修改表名
alter table test1 rename to test2;

– 2. 针对列信息的修改
1). 更新列(针对字段的数据类型只能往大改不能往小改)
alter table test3 change column id my_id bigint;

2). 新增列
alter table test3 add columns (age int, sal double);

3). 替换列(针对字段的数据类型只能往大改不能往小改)
alter table test3 replace columns (id bigint, i_name string, age bigint, i_sal double);

2.3 删除表
drop table dept;

七、 DML数据操作
– 概念:数据的导入导出操作

  1. 数据导入

1.1 load导入方式
– 语法结构:
load data [local] inpath ‘数据的path’ [overwrite] – [local] 表示导入数据的来源于服务器本地,如果不加local,那相当于导入数据的来源在HDFS
into table student
[partition (partcol1=val1,…)]; – 针对分区表导入数据的可选项

– 案例实操:
– 1. 创建一张表
create table stu1(id string, name string)
row format delimited fields terminated by ‘\t’;
– 2. 从本地导入数据(覆盖)
load data local inpath ‘/opt/module/hive-3.1.2/datas/stu.txt’ overwrite
into table stu1;

– 3. 从本地导入数据(不覆盖)
load data local inpath ‘/opt/module/hive-3.1.2/datas/stu1.txt’
into table stu1;

– 4. 从HDFS导入数据
create table stu2(id string, name string)
row format delimited fields terminated by ‘\t’;

load data inpath ‘/stu2/student.txt’ overwrite
into table stu2;

1.2 通过查询语句向表中插入数据(Insert)
– 建表
create table stu3(id int, name string)
row format delimited fields terminated by ‘\t’;

– 1. 基本模式插入(根据单张表查询结果)
insert overwrite table stu3
select id, name from student;

insert into table stu3
select id, name from student;

– 2. 创建表时通过Location指定加载数据路径
create table stu4(id int, name string)
row format delimited fields terminated by ‘\t’
location ‘/stu2’;

  1. 数据导出
    – 将查询的结果导出到本地
    insert overwrite local directory ‘/opt/module/hive-3.1.2/datas/export/student’
    row format delimited fields terminated by ‘:’
    select * from student;

– 将查询的结果导出到HDFS
insert overwrite directory ‘/export_data/student2’
row format delimited fields terminated by ‘\t’
select * from student;

– Export导出到HDFS上 & Import数据到指定Hive表中
– 将数据导出到HDFS
export table student to ‘/export_data/student3’;
– 将以上导出的数据导入到hive中
import table bucunzai from ‘/export_data/student3’;

  1. 清除表的数据
    truncate table student;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值