首页 > 其他分享 >数据仓库建模工具之一——Hive学习第四天

数据仓库建模工具之一——Hive学习第四天

时间:2024-07-18 22:51:05浏览次数:18  
标签:HDFS string students 数据仓库 建模 hive Hive table 数据

Hive的基本操作

1.3HIve的表操作(接着昨天的继续学习)

1.3.2 显示表

show tables;
show tables like 'u*';
desc t_person;
desc formatted students; // 更加详细

1.3.3 加载数据

1、使用hdfs dfs -put '本地数据' 'hive表对应的HDFS目录下'

2、使用 load data

下列命令需要在hive shell里执行

create table IF NOT EXISTS students2
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

// 将HDFS上的/input1目录下面的数据 移动至 students表对应的HDFS目录下,注意是 **移动、移动、移动**
load data inpath '/input1/students.txt' into table students;
  • 注意:使用hdfs导入数据至hive,使用的是剪切操作,即原hdfs路径下的文件在被导入到hive中之后,原路径下的文件就不复存在
// 清空表
truncate table students;
// 加上 local 关键字 可以将Linux本地目录下的文件 上传到 hive表对应HDFS 目录下 **原文件不会被删除,是复制,不是移动**
load data local inpath '/usr/local/soft/data/students.txt' into table students;
// overwrite 覆盖加载
load data local inpath '/usr/local/soft/data/students.txt' overwrite into table students;

3、create table xxx as SQL语句

4、insert into table xxxx SQL语句 (没有as)

create table IF NOT EXISTS students3
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';


// 将 students表的数据插入到students2 这是复制 不是移动 students表中的数据不会丢失
insert into table students2 select * from students;

// 覆盖插入 把into 换成 overwrite
insert overwrite table students2 select * from students;

1.3.4 修改列

查询表结构

desc students2;

添加列

alter table students2 add columns (education string);
  • 添加列之后,查询表的数据,新增的那一列是没有具体的数据进行映射的,所以全是null
  • 当向其中插入新的数据时,新的数据和原先的数据在HDFS中看似是分开的,但是其实就是一个表数据,
  • 注意的是新的数据插入之后不会影响之前的数据,在HDFS中没有对应的数据,就相当于没有映射过来就是null

查询表结构

desc students2;

更新列

alter table stduents2 change education educationnew string;

1.3.5 删除表

drop table students2;

1.4 Hive内外部表

面试题:内部表和外部表的区别?如何创建外部表?工作中使用外部表

1.4.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/;

1.4.1 Hive外部表

外部表说明

外部表因为是指定其他的hdfs路径的数据加载到表中来,所以hive会认为自己不完全独占这份数据

删除hive表的时候,数据仍然保存在hdfs中,不会删除。

删除外部表只会删除hive中的映射出来的数据表,以及存在MySQL中的数据的元数据信息。

// 外部表
create external table students_external
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/hive_test/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......

设计外部表的初衷就是 让 表的元数据 与 数据 解耦

  • 操作案例: 分别创建dept,emp,salgrade。并加载数据。

创建数据文件存放的目录

hdfs dfs -mkdir -p /bigdata/hive_test1/dept
hdfs dfs -mkdir -p /bigdata/hive_test1/emp
hdfs dfs -mkdir -p /bigdata/hive_test1/salgrade
  • 创建dept表
CREATE EXTERNAL TABLE IF NOT EXISTS dept (
  DEPTNO int,
  DNAME string,
  LOC string
) row format delimited fields terminated by ','
location '/hive_test/dept';

10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
  • 创建emp表
CREATE EXTERNAL TABLE IF NOT EXISTS emp (
   EMPNO int,
   ENAME string,
   JOB string,
   MGR int,
   HIREDATE date,
   SAL int,
   COMM int,
   DEPTNO int
 ) row format delimited fields terminated by ','
 location '/hive_test/emp';
 
7369,SMITH,CLERK,7902,1980-12-17,800,null,20
7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02,2975,null,20
7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01,2850,null,30
7782,CLARK,MANAGER,7839,1981-06-09,2450,null,10
7788,SCOTT,ANALYST,7566,1987-07-13,3000,null,20
7839,KING,PRESIDENT,null,1981-11-17,5000,null,10
7844,TURNER,SALESMAN,7698,1981-09-08,1500,0,30
7876,ADAMS,CLERK,7788,1987-07-13,1100,null,20
7900,JAMES,CLERK,7698,1981-12-03,950,null,30
7902,FORD,ANALYST,7566,1981-12-03,3000,null,20
7934,MILLER,CLERK,7782,1982-01-23,1300,null,10
  • 创建salgrade表
CREATE EXTERNAL TABLE IF NOT EXISTS salgrade (
  GRADE int,
  LOSAL int,
  HISAL int
) row format delimited fields terminated by ','
location '/hive_test/salgrade';

1,700,1200
2,1201,1400
3,1401,2000
4,2001,3000
5,3001,9999

1.5 Hive导出数据

将表中的数据备份

  • 将查询结果存放到本地
//创建存放数据的目录
mkdir -p /usr/local/soft/bigdata

//导出查询结果的数据(导出到Node01上)
insert overwrite local directory '/usr/local/soft/bigdata/person_data' select * from t_person;
  • 按照指定的方式将数据输出到本地
-- 创建存放数据的目录
mkdir -p /usr/local/soft/bigdata

-- 导出查询结果的数据
insert overwrite local directory '/usr/local/soft/bigdata/hive_test1/person' 
ROW FORMAT DELIMITED fields terminated by ',' 
collection items terminated by '-' 
map keys terminated by ':' 
lines terminated by '\n' 
select * from t_person;

insert overwrite local directory '/usr/local/soft/bigdata/hive_test1/stu' 
ROW FORMAT DELIMITED fields terminated by ','  
lines terminated by '\n' 
select clazz,count(1) as count from students group by clazz;
  • 将查询结果输出到HDFS

将sql语句的查询结果输出到HDFS中时,在HDFS上是直接将该结果存放在指定的文件夹里。

-- 创建存放数据的目录
hdfs dfs -mkdir -p /bigdata/hive_test1/copy

-- 导出查询结果的数据
insert overwrite directory '/bigdata/copy2' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from students
  • 直接使用HDFS命令保存表对应的文件夹
// 创建存放数据的目录
hdfs dfs -mkdir -p /bigdata/person

// 使用HDFS命令拷贝文件到其他目录
hdfs dfs -cp /hive/warehouse/t_person/*  /bigdata/person
  • 将表结构和数据同时备份
  • 将数据导出到HDFS

将数据导出到HDFS中时,会在指定的文件目录下产生一个该数据的元数据文件信息_metadata和一个用于存放真实数据的文件夹 data,在该文件夹下面才是数据文件

//创建存放数据的目录
hdfs dfs -mkdir -p /bigdata/copy

//导出查询结果的数据
export table t_person to '/bigdata/copy';

​ 删除表结构

drop table t_person;

​ 恢复表结构和数据

import from '/bigdata;

注意:时间不同步,会导致导入导出失败

标签:HDFS,string,students,数据仓库,建模,hive,Hive,table,数据
From: https://www.cnblogs.com/shmil/p/18308434

相关文章

  • 8个软件和渲染农场:让3D建模和渲染变得简单
    3D建模和渲染已成为艺术与技术的交汇点,尽管这一领域充满挑战,但总有一些工具和资源能让用户使用变得不那么艰难。今天,我们将探讨“8个软件和渲染农场:让3D建模和渲染变得简单”,这些工具不仅简化了建模和渲染的过程,还通过渲染农场技术,使得即使是资源有限的个人也能享受到专业的渲染效......
  • 【数学建模】——多领域资源优化中的创新应用-六大经典问题解答
    目录题目1:截取条材题目 1.1问题描述1.2数学模型1.3求解1.4解答题目2:商店进货销售计划题目2.1问题描述2.2数学模型2.3求解2.4解答题目3:货船装载问题题目3.1问题重述 3.2数学模型3.3求解3.4解答题目4:城市消防站选址问题 题目4.1问题重述4.2......
  • 关于hive默认不能改,和查的问题
    配置好hive后默认支持查找,和增加。需要在hive-site.xml里面添加如下配置:<property> <name>hive.support.concurrency</name> <value>true</value></property><property> <name>hive.enforce.bucketing</name> <value>true</value>......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
       数学建模能力的提升建立在学生具备数学建模思维与思想的基础上,亲自对数学建模过程形成深刻认知,并且通过具体的问题分析来获取必要的数学建模经验与技巧等。因此,在开展数学教学期间,教师要注意有计划、有目的地结合一些实际社会问题,引导高中生仔细地观察和分析问题,使他们在......
  • 数据仓库建模工具之一——Hive学习第三天
    1、Hive的基本操作1.1 Hive库操作1.1.1 创建数据库1)创建一个数据库,数据库在HDFS上的默认存储路径是/hive/warehouse/*.db。createdatabasetestdb;2)避免要创建的数据库已经存在错误,增加ifnotexists判断。(标准写法)--中括号表示可以省略的内容createdatabase[if......
  • 2024-07-17 如何在vscode部署你的代码块,从而在新建页面时能快速搭建模板(windows环境)
    步骤一:打开vscode,按住ctrl+shif+p唤出命令窗口 步骤二:在窗口中输入命令,并回车Preferences:OpenUserSnippets 对,就是这个代码片段,接着输入你想添加代码的某某语言or脚本,比如我要添加vue的代码片段输入vue,回车,会显示vue.json文件出来给你更改,我的是这样 注意:如果你......
  • Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据
    全文下载链接:http://tecdat.cn/?p=17748最近我们被客户要求撰写关于销售量时间序列建模的研究报告,包括一些图形和统计输出。在本文中,在数据科学学习之旅中,我经常处理日常工作中的时间序列数据集,并据此做出预测我将通过以下步骤:探索性数据分析(EDA)问题定义(我们要解决什么)变量......
  • 数据仓库中事实表设计的关键步骤解析
    在数据仓库的设计过程中,事实表是描述业务度量的核心组件。本文将深入探讨数据仓库中事实表设计的关键步骤,包括选择业务过程及确定事实表类型、声明粒度、确定维度和确定事实的过程,帮助读者更好地理解和应用事实表设计的原则和方法。第一步:选择业务过程及确定事实表类型在事实......
  • UML/SysML建模工具更新情况(2024年7月)共12款,StarUML 6.1.2
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集工具最新版本:PlantUMLv1.2024.6更新时间:2024年7月7日工具简介将文本转换为UML图形,可以在许多其他工具中使用。开源。平台:多平台获得地址https://plantuml.com/工具最新版本:E......
  • Hive自定义函数编写方法(含源代码解读,超详细,易理解)
    一、Hive自定义函数介绍        1.内置函数        Hive自带了一些函数。比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。2.自定义函数        当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UD......