HIVE从入门到精通------(1)hive的基本操作
1.开启hive
1.首先在master的/usr/local/soft/下启动hadoop: master : start-all.sh
start-all.sh
2.在另一个master(2)上监控hive日志: master(2): tail -F /tmp/root/hive.log
tail -F /tmp/root/hive.log
3.在master上启动元数据服务: master: nohup hive --service metastore &
nohup hive --service metastore &
4.用服务端在启动hiveserver2服务: master: nohup hiveserver2 &
nohup hiveserver2 &
5.在node1中开启服务端: node1: beeline -u jdbc:hive2://master:10000 -n root
beeline -u jdbc:hive2://master:10000 -n root
2.上传数据到hdfs
1.在hive中,将linux中创建本地文件上传至hdfs
1.首先在hive中移动到数据库,在指定的数据库下面创建表:
hive:
create table ........;
2.在master中移动到本地数据库,在该数据库下面创建本地文件,在文件内导入数据:
master:
cd /usr/local/soft/bigdata30/ //linux上的路径
vim a.txt
3.在hive中,将linux的txt文件导入到hdfs:
hive:
//inpath路径是linux上的路径,是上传数据,操作过后linux本地的数据不会消失
load data local inpath '/usr/local/soft/bigdata30/a.txt' into table a;
2.在hive中,将hdfs上面文件移动到hive表中
1.首先在hive中移动到数据库,在指定的数据库下面创建表:
hive:
create table ........;
2.通过某些任务会在hdfs上面产生数据,将hdfs上的/input1目录下的数据移动至students表对应的hdfs目录下:
hive:
//这个命令是移动数据,操作过后原位置inpath上的数据将不存在,inpath上的路径是hdfs数据目录的路径
load data inpath '/input1/students.txt' into table students;
3.当反复多次执行上传数据命令在相同路径,会产生copy文件:
//以追加的形式
再次执行,load data inpath '/input1/students.txt' into table students;
在students文件的目录下面将存在:
students.txt students_copy_1.txt
4.以覆盖的形式
load data inpath '/input1/students.txt' overwrite into table students;
3.在hive中,将已存在的表中插入自己写的sql语句
1.首先在hive中移动到数据库,在指定的数据库下面创建表students2:
hive:
create table ........;
2.将对students表进行sql操作过后的指定数据插入到空表students2中,这是复制原表数据还在
insert into table students2 select * from students;
多次执行会追加数据
3.覆盖插入
insert overwrite table students2 select * from students;
4.模板
insert overwrite table xxx.xxx partition(xxx=${xxx})
select
xxx from xxx;
4.在linux中,将本地数据传入到hdfs
1.首先在hive中移动到数据库,在指定的数据库下面创建表:
hive:
create table ........;
2.在master中移动到本地数据库,在该数据库下面将文件从Windows里面拖入:
master:
cd /usr/local/soft/bigdata30/ //linux上的路径
或vim.....
3.在master中,将linux的txt文件导入到hdfs:
master:
hadoop fs -put '本地数据' 'hive表对应的HDFS目录下'
hadoop fs -put students.txt /user/hive warehouse/bigdata30.db/students/
3.hive导出数据
1.将查询结果存放到本地
1.在master创建目录:
mkdir -p /usr/local/soft/bigdata30/hive_out1
2.在hive中将查询的数据导出到linux的目录里面:
//在本地地址下面,其中的/person_data是不存在的,在/usr/local/soft/bigdata30/hive_out1下面没有这个,是用来存放hdfs导出数据的文件夹
**insert overwrite local directory '/usr/local/soft/bigdata30/hive_out1/person_data' **
select * from students;
3.可以在导出数据的时候对数据的格式进行处理:
insert overwrite local directory '/usr/local/soft/bigdata30/hiveout1'
ROW FORMAT DELIMITED fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
lines terminated by '\n'
select * from students2;
4.库操作
1.创建数据库
1.创建一个数据库,数据库在HDFS上的默认存储路径是/hive/warehouse/.db。 这个是default库,没指定库进行创建的话就会直接在该目录下进行创建。
create database 库名;
2.避免已经存在的错误
create database [if not exists] 库名;
3.指定位置创建数据库
在指定的位置下面创建数据库,这个路径上的库名和指定创建的库名不一定要相同,只是作为映射关系
create database if not exists
库名 location '/bigdata30/db';
如果是:CREATE DATABASE IF NOT EXISTS aaa LOCATION '/user/hive/warehouse/bbb';
aaa 的路径: hdfs://master:9000/user/hive/warehouse/bbb
4.修改数据库
不可改动:
数据库名称:一旦创建了数据库,数据库的名称是不可更改的。
数据库的位置:数据库在Hive中的存储位置是指定创建时就确定的,无法后期修改。
数据库的所有者:一旦创建了数据库,数据库的所有者也是不可更改的。
alter database 库名 set dbproperties('createtime'='20240612');
5.数据库详细信息
1.显示数据库
show databases;
2.通过like进行过滤
show databases like 'students*';
3.查看详情信息
desc databases 库名;
6.切换数据库
use 库名;
7.删除数据库
1.直接删除没有表的库
drop database 库名;
2.删除有表的库
drop database if exists 库名 cascade;
3.避免不存在错误
drop database if exists 库名;
5.表操作
1.默认建表
create table 表名
(
id bigint,
name string,
age int,
gender string,
clazz string
)
row format delimited fields terminated by ','; //必选,指定分隔符
(传入的数据要和建表时侯指定的分隔符相同)
2.指定location建表
1.如果创建一张表,未指定位置,那么其会指定在/user/hive/warehouse/bigdata30.db下面创建,再hdfs上面可以看见所创建的表名。
2.如果指定位置进行创建,但是位置最后没有包含表名,再hdfs上看不到所对应的表名。
指定位置创建对应的表的时候在指定的位置最后要带上所创建的表名。
create table IF NOT EXISTS students2
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/bigdata30/students2'; // 指定Hive表的数据的存储位置,一般在数据已经上传到HDFS,想要直接使用,会指定Location,通常Locaion会跟外部表一起使用,内部表一般使用默认的location
3.指定存储格式
create table if not exists 表名
(
id bigint,
name string
)
row format delimited fields terminated by ','
stored as orc //指定存储格式为orc
location '/bigdata30/out6';
如果不指定,默认为textfile,注意:除textfile以外,其他的存储格式的数据都不能直接加载,需要使用从表加载的方式。
4.将查询结果创建为一个新表
创建一张表 ,将某个语句所查询到的数据进行储存,专门用来存储查询语句的表
CREATE TABLE 新表名 AS SELECT 查询语句;
CREATE TABLE adult_students AS
SELECT * FROM students
WHERE age >= 18;
这个语句的含义是,从students表格中选择所有年龄大于等于18岁的学生信息,并将结果存储到名为adult_students的新表格中。
5.模仿已存在表的格式创建不带数据的相同格式的表
这个语法是在数据库中创建一个新表,但是不会复制数据,只会复制表结构,模仿另一张表的形式创建新表格。它的形式是:
CREATE TABLE 新表名 LIKE 要模仿的表名;
举个例子,假设我们有一个名为employees的表格,其中包含员工的姓名、工号、部门等信息。我们想要创建一个结构与employees相同但不含数据的新表格employees_backup,可以执行以下语句:
CREATE TABLE employees_backup LIKE employees;
简单用户信息表创建:
create table t_user(
id int,
uname string,
pwd string,
gender string,
age int
)
row format delimited fields terminated by ','
lines terminated by '\n'; //满一行就换行
1,admin,123456,男,18
2,zhangsan,abc123,男,23
3,lisi,654321,女,16
复杂人员信息表创建:
create table IF NOT EXISTS t_person(
name string,
friends array<string>,
children map<string,int>,
address struct<street:string ,city:string>
)
row format delimited fields terminated by ',' -- 列与列之间的分隔符
collection items terminated by '_' -- 元素与元素之间分隔符
map keys terminated by ':' -- Map数据类型键与值之间的分隔符
lines terminated by '\n'; -- 行与行之间的换行符
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,beng bu_anhui
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,he fei_anhui
6.表详细信息
show tables;
show tables like 'u*';
desc t_person;
desc formatted students; // 更加详细
7.修改列
查询表结构
desc students2;
添加列
alter table students2 add columns (education string);
ALTER TABLE 表名 ADD COLUMN 列名 数据类型;
查询表结构
desc students2;
更新列
alter table stduents2 change education educationnew string;
ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型;
8.删除表
drop table students2;
6.Hive内外部表
面试题:内部表和外部表的区别?如何创建外部表?工作中使用外部表
1.hive内部表
当创建好表的时候,HDFS会在当前表所属的库中创建一个文件夹
当设置表路径的时候,如果直接指向一个已有的路径,可以直接去使用文件夹中的数据
当load数据的时候,就会将数据文件存放到表对应的文件夹中
而且数据一旦被load,就不能被修改
我们查询数据也是查询文件中的文件,这些数据最终都会存放到HDFS
当我们删除表的时候,表对应的文件夹会被删除,同时数据也会被删除
默认建表的类型就是内部表
// 内部表
create table students_internal
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input2';
hive> dfs -put /usr/local/soft/data/students.txt /input2/;
2.Hive外部表
(多了个 external 关键字)
外部表说明
外部表因为是指定其他的hdfs路径的数据加载到表中来,所以hive会认为自己不完全独占这份数据
删除hive表的时候,数据仍然保存在hdfs中,不会删除。
// 外部表
create external table students_external
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input3';
hive> dfs -put /usr/local/soft/data/students.txt /input3/;
删除表测试一下:
hive> drop table students_internal;
Moved: 'hdfs://master:9000/input2' to trash at: hdfs://master:9000/user/root/.Trash/Current
OK
Time taken: 0.474 seconds
hive> drop table students_external;
OK
Time taken: 0.09 seconds
hive>
一般在公司中,使用外部表多一点,因为数据可以需要被多个程序使用,避免误删,通常外部表会结合location一起使用
外部表还可以将其他数据源中的数据 映射到 hive中,比如说:hbase,ElasticSearch......
设计外部表的初衷就是 让 表的元数据 与 数据 解耦
HIVE从入门到精通------(1)hive的基本操作的更多相关文章
- Spark入门到精通--(第九节)环境搭建(Hive搭建)
上一节搭建完了Hadoop集群,这一节我们来搭建Hive集群,主要是后面的Spark SQL要用到Hive的环境. Hive下载安装 下载Hive 0.13的软件包,可以在百度网盘进行下载.链接: h ...
- 大数据入门到精通18--sqoop 导入关系库到hdfs中和hive表中
一,选择数据库,这里使用标准mysql sakila数据库 mysql -u root -D sakila -p 二.首先尝试把表中的数据导入到hdfs文件中,这样后续就可以使用spark来dataf ...
- [Hadoop大数据]——Hive部署入门教程
Hive是为了解决hadoop中mapreduce编写困难,提供给熟悉sql的人使用的.只要你对SQL有一定的了解,就能通过Hive写出mapreduce的程序,而不需要去学习hadoop中的api. ...
- Spark入门实战系列--5.Hive(上)--Hive介绍及部署
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...
- Spark入门实战系列--5.Hive(下)--Hive实战
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Hive操作演示 1.1 内部表 1.1.1 创建表并加载数据 第一步 启动HDFS ...
- Hadoop生态圈-Hive快速入门篇之HQL的基础语法
Hadoop生态圈-Hive快速入门篇之HQL的基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的重点是介绍Hive中常见的数据类型,DDL数据定义,DML数据操作 ...
- Hadoop生态圈-Hive快速入门篇之Hive环境搭建
Hadoop生态圈-Hive快速入门篇之Hive环境搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据仓库(理论性知识大多摘自百度百科) 1>.什么是数据仓库 数据 ...
- hive编程入门课程(加精)
hive编程入门课程 http://wenku.baidu.com/link?url=BfyZWjz48G_6UJImzWw39OLB0sUrIYEYxoxNpaFbADUQekmOvQy4FPY1f ...
- [转帖]Hive 快速入门(全面)
Hive 快速入门(全面) 2018-07-30 16:11:56 琅琊山二当家 阅读数 4343更多 分类专栏: hadoop 大数据 转载: https://www.codercto.com/ ...
- hive数据仓库入门到实战及面试
第一章.hive入门 一.hive入门手册 1.什么是数据仓库 1.1数据仓库概念 对历史数据变化的统计,从而支撑企业的决策.比如:某个商品最近一个月的销量,预判下个月应该销售多少,从而补充多少货源. ...
随机推荐
- vscode关于json文件添加注释报错处理
- Redis 的安装与配置详解【Redis系列一】
〇.前言 关于 Redis 在日常开发中还是用的比较多的,特别是在秒杀.消息队列.排行榜等数据交互时效要求较高的场景,Redis 都可以轻松应对. 本文将针对 Redis 进行简单介绍,以及如何安装, ...
- Unicode 15.0 标准已发布,新增鹅、豌豆等 20个emoji
原文地址:The Unicode Blog: Announcing The Unicode Standard, Version 15.0 Unicode 标准版本 15.0 现已推出,包括核心规范.附 ...
- Machine Learning - 笔记1
一.监督学习(supervised learning) 1.回归(regression) ①按我的理解来说,就是对于训练模型所用到的数据集,能够知道Input和Output的特征.比如 ...
- 制作SSL证书(签发免费证书)
制作SSL证书(签发免费证书) 下载证书生成器 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org ...
- yapi 自动化安装遇到的问题
yapi版本: 1.10.2 yapi server 启动之后 填写好配置,点击开始部署,发现控制台打印如下日志 (node:19879) Warning: Accessing non-existen ...
- NOIP模拟91(多校24)
T1 破门而入 解题思路 签到题(然而我数组开小直接变成暴力分...) 发现其实就是第一类斯特林数,然后 \(n^2\) 推就好了. 感觉可以用 NTT 优化成 \(nlogn\) ,但是好像并没有什 ...
- node child_process模块exec
child_process是Node.js自带的核心模块之一,无需额外安装即可使用. child_process模块提供了创建子进程的功能,可以在Node.js中执行外部命令.脚本文件等,并与其进行交 ...
- CF1900D - Small GCD 题解
1900D - Small GCD 给定序列 \(A\),定义 \(f(a, b, c)\) 为 \(a, b, c\) 中最小的次小的数的 \(\gcd\),求: \[\sum_{i = 1}^n ...
- LeetCode 692. Top K Frequent Words 前K个高频单词 (Java)
题目: Given a non-empty list of words, return the k most frequent elements. Your answer should be sort ...