漫谈大数据 - HiveSQL总结(一)库表操作

news2024/10/6 16:19:50

        导语:针对hive各种数据库操作,内部表、外部表、分区表、分桶表的表属性查看修改操作以及hive数据的导入与导出详解。

hive简介:

        hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MR任务来执行。

目录

数据库操作

创建数据库

修改数据库

查看数据库详细信息

删除数据库

数据表操作

内部表

建表

字段类型

查询表的结构

外部表

建外部表

本地文件系统向表中加载数据

hdfs文件系统向表中加载数据

分区表

建分区表

加载数据

分区的增删改查

分桶表

分桶优点

使用方法

修改表和删除表

修改表操作

删除表操作

hive表加载数据

直接向分区表中插入数据

通过load方式加载数据

通过查询方式加载数据

查询语句中创建表并加载数据

在创建表是通过location指定加载数据的路径

hive表中数据导出

insert导出

Hadoop命令导出到本地


数据库操作

创建数据库

-- 创建数据库
create database if not exists database_name;


-- 指定hdfs存储位置
create database database_name location '/path';

修改数据库

alter  database  name set  dbproperties('createtime'='20230301');

查看数据库详细信息

查看数据库基本信息
desc  database  name;

查看数据库更多详细信息
desc database extended  name;

删除数据库

删除一个空数据库,数据库下面不能有数据表
drop  database  name;

强制删除数据库,包含数据库下面的表一起删除
drop  database  name cascade;

数据表操作

内部表

建表

 create table stu(id int,name string);

-- 创建表并指定字段之间的分隔符
create  table if not exists stu2(id int ,name string) 
row format delimited fields terminated by '\t' -- 指定字段分隔符
stored as textfile                             -- 指定存储格式
location '/user/stu2';                         -- 指定存储位置

-- 根据查询结果创建表
create table stu3 as select * from stu2;

--根据已经存在的表结构创建表
create table stu4 like stu2;

字段类型

hive数据类型

类型

含义

BOOLEAN

true/false

TINYINT

1字节的有符号整数 -128~127

SMALLINT

2个字节的有符号整数,-32768~32767

INT

4个字节的带符号整数

BIGINT

8字节带符号整数

FLOAT

4字节单精度浮点数1.0

DOUBLE

8字节双精度浮点数

DEICIMAL

任意精度的带符号小数

decimal(13,2) 代表最多有13位数字,其中后2位是小数,整数部分是11位;如果整数部分超过11位,则这个字段就会变成null;如果小数部分不足2位,则后面用0补齐两位,如果小数部分超过两位,则超出部分四舍五入

STRING

字符串,变长

VARCHAR

变长字符串

CHAR

固定长度字符串

BINARY

字节数组

TIMESTAMP

时间戳,毫秒值精度

DATE

日期

INTERVAL

时间频率间隔

ARRAY

有序的的同类型的集合

MAP

key-value,key必须为原始类型,value可以任意类型

STRUCT

字段集合,类型可以不同

UNION

在有限取值范围内的一个值

查询表的结构

只查询表内字段及属性
desc stu2;

详细查询
desc formatted  stu2;

查询创建表的语句
show create table stu2;

外部表

外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉,只会删除表的元数据(表头)

建外部表

create external table student (s_id string,s_name string) 
row format delimited fields terminated by '\t';

本地文件系统向表中加载数据

追加操作
load data local inpath '/export/servers/hivedatas/stu.txt' into table student;

覆盖操作
load data local inpath '/export/servers/hivedatas/stu.txt' overwrite  into table student;

hdfs文件系统向表中加载数据

load data inpath '/hivedatas/te.csv' into table techer;

加载数据到指定分区
load data inpath '/hivedatas/te.csv' into table techer partition(cdate=20201210);
  • 使用 load data local 表示从本地文件系统加载,文件会拷贝到hdfs上
  • 使用 load data 表示从hdfs文件系统加载,文件会直接移动到hive相关目录下,注意不是拷贝过去,因为hive认为hdfs文件已经有3副本了,没必要再次拷贝了
  • 如果表是分区表,load 时不指定分区会报错
  • 如果加载相同文件名的文件,会被自动重命名

分区表

建分区表

create table score(s_id string, s_score int) partitioned by (month string);


-- 建一个表带多个分区
create table score2 (s_id string, s_score int) partitioned by (year string,month string,day string);

注意

hive表创建的时候可以用 location 指定一个文件或者文件夹,当指定文件夹时,hive会加载文件夹下的所有文件,当表中无分区时,这个文件夹下不能再有文件夹,否则报错

加载数据

加载数据到一个分区的表中

load data local inpath '/export/servers/hivedatas/score.txt' into table score partition (month='201806');

加载数据到一个多分区的表中去

load data local inpath '/export/servers/hivedatas/score.txt' into table score2 partition(year='2018',month='06',day='01');

分区的增删改查

查看分区
show  partitions  score;

添加一个分区
alter table score add partition(month='201805');

同时添加多个分区
alter table score add partition(month='201804') partition(month = '201803');

删除分区
alter table score drop partition(month = '201806');

分桶表

将数据按照指定的字段进行分成多个桶中去,就是按照分桶字段进行哈希划分到多个文件当中去
分区就是分文件夹,分桶就是分文件

分桶优点

  1. 提高join查询效率
  2. 提高抽样效率

使用方法

开启hive的捅表功能

set hive.enforce.bucketing=true;

设置reduce的个数

set mapreduce.job.reduces=3;

创建桶表

create table course (c_id string,c_name string) clustered by(c_id) into 3 buckets;

注意

桶表的数据加载通过hdfs  dfs  -put文件或者通过load  data均不可以,

只能通过insert  overwrite 进行加载
所以把文件加载到桶表中,需要先创建普通表

修改表和删除表

修改表操作

-- 修改表名称
alter  table  old_table_name  rename  to  new_table_name;



-- 增加/修改列信息

查询表结构
desc score5;

添加列
alter table score5 add columns (mycol string, mysco string);

更新列
alter table score5 change column mysco mysconew int;

删除表操作

删除表操作
drop table score5;


清空表操作
truncate table score6;

注意

如果 hdfs 开启了回收站,drop 删除的表数据是可以从回收站恢复的,表结构恢复不了,需要自己重新创建;truncate 清空的表是不进回收站的,所以无法恢复truncate清空的表

hive表加载数据

直接向分区表中插入数据

insert into table score partition(month ='201807') values ('001','002','100');

通过load方式加载数据

load data local inpath '/export/servers/hivedatas/score.csv' overwrite into table score partition(month='201806');

通过查询方式加载数据

insert overwrite table score2 partition(month = '201806') select s_id,c_id,s_score from score1;

查询语句中创建表并加载数据

create table score2 as select * from score1;

在创建表是通过location指定加载数据的路径

create external table score6 (s_id string,c_id string,s_score int) row format delimited fields terminated by ',' location '/myscore';

hive表中数据导出

insert导出

将查询的结果导出到本地
insert overwrite local directory '/export/servers/tt' select * from score;

将查询的结果格式化导出到本地
insert overwrite local directory '/export/servers/tt' row format delimited fields terminated by '\t' collection items terminated by '#' select * from student;

将查询的结果导出到HDFS上(没有local)
insert overwrite directory '/export/servers/tt' row format delimited fields terminated by '\t' collection items terminated by '#' select * from score;

Hadoop命令导出到本地

dfs -get /export/servers/exporthive/000000_0 /export/servers/exporthive/local.txt;

欢迎点赞收藏评论交流~

hive的DQL查询语法以及hive函数总结请至下篇

漫谈大数据 - HiveSQL总结(二)查询操作_昊昊该干饭了的博客-CSDN博客导语:HiveSQL各关键字详解,hive函数大全,类似于个人记录工具书,后续遇到其他的也会继续加进来。https://blog.csdn.net/qq_52213943/article/details/130289418?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双系统安装Windowslinux

文章目录 1.1 联想小新windows10重装1.2 宏基暗影骑士windows10重装2.1 ubuntu18.04重装1)清理空间并制作U盘启动2)ubuntu分区 3.1 ros安装4.1 deb包安装5.1 网络设置6.1 VSCode环境配置 1.1 联想小新windows10重装 bioss设置 ①微软官网制作u盘启动 ②…

微信小程序PHP+python+nodejs+springboot+vue 电影院订票选座系统

管理员的主要功能有: 1.管理员输入账户登陆后台 2.个人中心:管理员修改密码和账户信息 3.会员管理:对注册的会员信息进行删除,查询,添加,修改 4.电影分类管理:对电影的分类信息进行添加&#xf…

python+nodejs+springboot+vue 教学师生互动答疑系统

然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E-R图。然后,设计框架并根据设计的框架编写代码…

浅学WebFlux--构建一个响应式的SpringBoot服务

前言 看惯了SpringMVC,最近在闲来之余抽空了解了一下Spring早已发布并支持的一种新web框架-WebFlux。由于这玩意的使用需要具备的基础是Reactive programming 的理解、Reactor 的基础以及熟练的java8 lambda使用。但是并不影响笔者摸着石头过河……在此做个浅学笔记…

【三十天精通Vue 3】第十二天 Vue 3 过滤器详解(已废弃)

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 过滤器概述1.1 过滤器的简介1.2 过滤器的作用1.3 过…

创建Vue3.0工程

1.使用 vue-cli 创建 官方文档:创建一个项目 | Vue CLI (vuejs.org) ## 查看vue/cli版本,确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm install -g vue/cli ## 创建 vue create vue_test ## 启动 cd vue_test npm run se…

7年时间,从功能测试到测试开发月薪30K,有志者事竟成

突破自己的技术瓶颈并不是一蹴而就,还是需要看清楚一些东西,这里也有一些经验和见解跟大家分享一下。同样是职场人士,我也有我的经历和故事。在工作期间,我有过2年加薪5次的小小“战绩”(同期进入公司的员工&#xff0…

番外12:ADS导出到AD变为PCB文件

番外12:ADS导出到AD变为PCB文件并嘉立创制板 番外12:ADS导出到AD变为PCB文件,此处的示例为功率放大器! STEP 1: 从ADS导出dxf文件 打开制作好的版图文件,在原有基础上打好散热孔和固定孔,散热孔半径0.63…

PCB阻焊桥存在的DFM(可制造性)问题,华秋一文告诉你

PCB表面的一层漆,称为阻焊油墨,也就是PCB线路板阻焊油墨。阻焊油墨是PCB线路板中非常常见、也是主要使用的油墨,一般90%都是绿色,但也有杂色油墨:红色、蓝色、黑色、白色、黄色等。 阻焊油墨的作用就是绝缘&#xff0…

反射:替对象执行方法

反射,可不只是利用Class创建对象哟,更重要是替对象执行方法!关于反射创建对象,它可以提供一种通用的机制,对任意Class对象得到它的实例,而不需要import。 举个例子,Spring底层就是利用反射为我…

各种文字生成图片的AIGC模型(openAI、谷歌、stable、Midjourney等)

1 前言 AIGC,全名“AI generated content”,又称生成式AI,意为人工智能生成内容。例如AI文本续写,文字转图像的AI图、视频等。 本文主要描述文字生成图片的模型。而且目前扩散模型(Diffusion Models)流行…

CANoe使用记录(一):新建Canoe工程

目录 1、概述 2、新建工程 2.1、新建工程界面 2.2、查看License 2.3、添加DBC文件 2.4、测量窗口 2.5、通道用量 2.6、通道匹配 2.7、硬件通道配置 2.8、状态监控 1、概述 Canoe是德国Vector公司推出的一款总线开发设备,主要用于总线类的开发、仿真、测试…

【Python】【进阶篇】二十六、Python爬虫的Scrapy爬虫框架

目录 二十六、Python爬虫的Scrapy爬虫框架26.1 Scrapy下载安装26.2 创建Scrapy爬虫项目1) 创建第一个Scrapy爬虫项目 26.3 Scrapy爬虫工作流程26.4 settings配置文件 二十六、Python爬虫的Scrapy爬虫框架 Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架,该框架…

【Java 数据结构】单链表经典面试题 (动图解析)

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

Redis问题

一、认识Redis 1. 什么是 Redis? Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。Redis 提供了多种数据类型来支持不同的业务场景&#…

vue-seamless-scroll无缝滚动组件使用方法详解+解决轮播空白缝隙问题(最后面)

下载安装 1.npm npm install vue-seamless-scroll --save 2.yarn yarn add vue-seamless-scroll 使用 1、全局注册 import Vue from vue import scroll from vue-seamless-scroll Vue.use(scroll) //或者 //Vue.use(scroll,{componentName: scroll-seamless}) 2、局部注册 im…

刘强东的“百亿补贴” 被指“雷”声大雨点小

京东集团2022年财报显示,2022年第四季度京东收入为2954亿元,同比增加7.1%,与2021年四季度23%的同比增速确有不小的差距。前三季度对应的同比增速分别为17.95%、5.44%和11.35%,与2021年相比均有回落。从财报中可以看出,…

什么是Selenium?使用Selenium进行自动化测试

什么是 Selenium? Selenium 是一种开源工具,用于在 Web 浏览器上执行自动化测试(使用任何 Web 浏览器进行 Web 应用程序测试)。   等等,先别激动,让我再次重申一下,Selenium 仅可以测试Web应用…

Unity VFX -- (2)玩一玩粒子系统

增加火花 复杂的VFX通常是由多个单独的粒子系统所组成。当它们组合到一起时,这些独立的个体会产生出更加有趣的效果。下面我们来为火焰增加火花效果。 1. 在Hierarchy中,展开Fire_ParticleSystem_Prefab物体,选择VFX_Sparks子物体。 2. 激活V…

java springboot工程引导类,简单认识程序入口

我们在创建springboot项目时 总会看到这么一个启动类 首先 我们要知道 我们的程序最后就成立一个spring容器 而你所有的类都是交给这个spring容器去管理的 做 springboot 程序 也会有这个spring容器 为了方便大家看 我们将启动类的代码改成这样 package com.example.thres…