HIVE技术
本文章基于黑马免费资料编写。
hive介绍
- 简介
- hive架构
hive需要启动的配置
- 执行元数据库初始化命令 使用hive必须启动的服务
./schematool -initSchema -dbType mysql -verbos
- 启动 Hive
创建一个 hive 的日志文件夹
mkdir /export/server/hive/logs
启动元数据管理服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
启动客户端
- Hive Shell 方式(可以直接写 SQL ): bin/hive
- Hive ThriftServer 方式(不可直接写 SQL ,需要外部客户端链接使用):
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
- 用beeline连接:!connect jdbc:hive2://node1:10000 账号hadoop 密码无
数据库操作
- 创建数据库
#创建数据库
create database if not exists 数据库名;
#使用数据库
use 数据库名;
- 查看数据库详细信息
desc database 数据库名;
数据库本质上就是在 HDFS 之上的文件夹。
默认数据库的存放路径是 HDFS 的: /user/hive/warehouse 内
- 创建数据库并指定 hdfs 存储位置
#指定存储位置
create database 数据库名 location 'hdfs文件路径';
#例如
create database myhive2 location '/myhive2';
- 删除数据库
#删除一个空数据库,如果数据库下面有数据表,那么就会报错
drop database myhive;
#强制删除数据库,包含数据库下面的表一起删除
drop database myhive2 cascade;
数据表操作
-
创建数据表语法
• EXTERNAL ,创建外部表
• PARTITIONED BY , 分区表
• CLUSTERED BY ,分桶表
• STORED AS ,存储格式
• LOCATION ,存储位置 -
数据类型
红色为常见的数据类型
- 创建数据表
CREATE TABLE test(
id INT,
name STRING,
gender STRING
);
- 删除表
DROP TABLE table_name;
hive表类型
- 内部表
- 外部表
- 分区表
- 分桶表
- 内部表
CREATE TABLE table_name ......
#例如
create table if not exists stu(id int,name string);
未被 external 关键字修饰的即是内部表, 即普通表。 内部表又称管理表 , 内部表数据存储的位置由
hive.metastore.warehouse.dir 参数决定(默认: /user/hive/warehouse ),删除内部表会直接删除元数据( metadata )及存储数据,因此内部表不适合和其他工具共享数据。
- 外部表
CREATE EXTERNAL TABLE table_name ......LOCATION......
#例如
CREATE EXTERNAL TABLE stu(id int,name string) LOCATION '/myhive';
被 external 关键字修饰的即是外部表, 即关联表。
外部表是指表数据可以在任何位置,通过 LOCATION 关键字指定。 数据存储的不同也代表了这个表在理念是并不是Hive 内部管理的,而是可以随意临时链接到外部数据上的。所以,在删除外部表的时候, 仅仅是删除元数据(表的信息),不会删除数据本身。
内部表操作
- 创建一个内部表并插入数据,查看数据存储位置
create database if not exists myhive;
use myhive;
create table if not exists stu(id int,name string);
insert into stu values (1,"zhangsan"), (2, "wangwu");
select * from stu;
- 自行指定分隔符
create table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t';
#解释
row format delimited fields terminated by '\t' :表示以 \t 分隔
- 其它创建内部表的形式
#除了标准的 CREATE TABLE table_name 的形式创建内部表外
#基于查询结果建表
CREATE TABLE table_name as
#例如
create table stu3 as select * from stu2;#基于已存在的表结构建表
CREATE TABLE table_name like
#例如
create table stu4 like stu2;#也可以使用 DESC FORMATTED table_name ,查看表类型和详情
DESC FORMATTED stu2;
- 删除内部表
DROP TABLE table_name
#例如
drop table stu2;
外部表操作
外部表,创建表被 EXTERNAL 关键字修饰,从概念是被认为并非 Hive 拥有的表,只是临时关联数据去使用。
创建外部表也很简单,基于外部表的特性,可以总结出: 外部表 和 数据 是相互独立的, 即:
-
可以先有表,然后把数据移动到表指定的 LOCATION 中
-
也可以先有数据,然后创建表通过 LOCATION 指向数据
-
先有表再有数据
#1. 在 Linux 上创建新文件, test_external.txt,用'\t'分割
vim test_external.txt
#2.先创建外部表,然后移动数据到 LOCATION 目录
#首先检查: 确认不存在 /tmp/test_ext1 目录
hadoop fs -ls /tmp
#创建外部
create external table test_ext1(id int, name string) row format delimited fields
terminated by ‘\t’ location ‘/tmp/test_ext1’;
#空结果,无数据
select * from test_ext1
#上传数据:
hadoop fs -put test_external.txt /tmp/test_ext1/
#即可看到数据结果
select * from test_ext1
- 先有数据再有表
#在hdfs中创建文件夹
hadoop fs -mkdir /tmp/test_ext2
#将linux中的txt数据文件上传到hdfs中
hadoop fs -put test_external.txt /tmp/test_ext2/
#创建指定位置的外部表
create external table test_ext2(id int, name string) row format delimited fields terminated by ‘\t’ location ‘/tmp/test_ext2’;
#查询数据
select * from test_ext2;
内外部表切换
desc formatted stu;
#内部表转外部表
alter table stu set tblproperties('EXTERNAL'='TRUE');
#外部表转内部表
alter table stu set tblproperties('EXTERNAL'='FALSE');
要注意: (‘EXTERNAL’=‘FALSE’) 或 (‘EXTERNAL’=‘TRUE’) 为固定写法,区分大小写!!!
数据加载 - LOAD 语法
#建表,comment为加注释
CREATE TABLE myhive.test_load(
dt string comment ' 时间(时分秒) ',
user_id string comment ' 用户 ID',
word string comment ' 搜索词 ',
url string comment ' 用户访问网址 '
) comment ' 搜索引擎日志表 ' ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t';#加载数据,注意,基于 HDFS 进行 load 加载数据,源数据文件会消失(本质是被移动到表所在的目录中)
load data local inpath '/home/hadoop/search_log.txt' into table myhive.test_load;
load data inpath '/tmp/search_log.txt' overwrite into table myhive.test_load;
数据加载 - INSERT SELECT 语法
除了 load 加载外部数据外,我们也可以通过 SQL 语句,从其它表中加载数据。
INSERT [OVERWRITE | INTO] TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT
EXISTS]] select_statement1 FROM from_statement;
#将SELECT 查询语句的结果插入到其它表中,被 SELECT 查询的表可以是内部表或外部表。
INSERT INTO TABLE tbl1 SELECT * FROM tbl2;
INSERT OVERWRITE TABLE tbl1 SELECT * FROM tbl2;
数据加载 - 两种语法的选择
对于数据加载,我们学习了: LOAD 和 INSERT SELECT 的方式,那么如何选择它们使用呢?
- 数据在本地
- 推荐 load data local 加载
- 数据在 HDFS
- 如果不保留原始文件: 推荐使用 LOAD 方式直接加载
- 如果保留原始文件: 推荐使用外部表先关联数据,然后通过 INSERT SELECT 外部表的形式加载数据
- 数据已经在表中
- 只可以 INSERT SELECT
hive 表数据导出 - insert overwrite 方式
- 将
hive
表中的数据导出到其他任意目录,例如linux
本地磁盘,例如hdfs
,例如mysql
等等
#语法
insert overwrite [local] directory ‘path’ select_statement1 FROM from_statement;
#将查询的结果导出到本地 - 使用默认列分隔符
insert overwrite local directory '/home/hadoop/export1' select * from test_load ;
#将查询的结果导出到本地 - 使用列分隔符
insert overwrite local directory '/home/hadoop/export2' row format delimited fields terminated by '\t'
select * from test_load;
#将查询的结果导出到HDFS上(不带local关键字)
insert overwrite directory '/tmp/export' row format delimited fields terminated by '\t' select * from test_load;
hive 表数据导出 - hive shell
#基本语法:( hive -f/-e 执行语句或者脚本 > file )
bin/hive -e "select * from myhive.test_load;" > /home/hadoop/export3/export4.txt
bin/hive -f export.sql > /home/hadoop/export4/export4.txt
注意:推荐将外部表加载到内部表管理
分区表
#基本语法
create table tablename(...) partitioned by ( 分区列 列类型 , ......) row format delimited fields terminated by '';
#创建单分区表
create table score(s_id string,c_id string,s_score int) partitioned by ( month string) row format delimited fields terminated by '\t';
#创建多分区表
create table score(s_id string,c_id string,s_score int) partitioned by (year string,month string, day string) row format delimited fields terminated by '\t';
#加载数据到分区表中
load data local inpath '/export/server/hivedatas/score.txt' into table score partition(month='202501')
#加载数据到一个多分区表中
load data local inpath '/export/server/hivedatas/score.txt' into table score partition(year = '2025',month = '01',day='06')
- 分区表的使用
#查看分区
show partitions score;
#添加一个分区
alter table score add partition(month='202506')
#同时添加多个分区
alter table score add partition(month='202501') partition(month='202502')
#删除分区
alter table score drop partition(month = '202501')
相关文章:
HIVE技术
本文章基于黑马免费资料编写。 hive介绍 简介 hive架构 hive需要启动的配置 执行元数据库初始化命令 使用hive必须启动的服务 ./schematool -initSchema -dbType mysql -verbos启动 Hive 创建一个 hive 的日志文件夹 mkdir /export/server/hive/logs启动元数据管理服务 n…...
RustDesk ID更新脚本
RustDesk ID更新脚本 此PowerShell脚本自动更新RustDesk ID和密码,并将信息安全地存储在Bitwarden中。 特点 使用以下选项更新RustDesk ID: 使用系统主机名生成一个随机的9位数输入自定义值 为RustDesk生成新的随机密码将RustDesk ID和密码安全地存储…...
卷积神经网络的底层是傅里叶变换
1 卷积神经网络与傅里叶变换、希尔伯特空间坐标变换的关系_卷积神经网络与傅里页变换之间的关系-CSDN博客 从卷积到图像卷积再到卷积神经网络,到底卷了什么? 一维信号卷积:当前时刻之前的每一个时刻是如何对当前时刻产生影响的 图像卷积&…...
Bootstrap 下拉菜单
Bootstrap 下拉菜单 Bootstrap 是一个流行的前端框架,它提供了许多预构建的组件,其中之一就是下拉菜单。下拉菜单是一个交互式元素,允许用户从一系列选项中选择一个。在本篇文章中,我们将详细介绍如何在 Bootstrap 中创建和使用下…...
计算机组成原理(计算机系统3)--实验一:WinMIPS64模拟器实验
一、实验目标: 了解WinMIPS64的基本功能和作用; 熟悉MIPS指令、初步建立指令流水执行的感性认识; 掌握该工具的基本命令和操作,为流水线实验做准备。 二、实验内容 按照下面的实验步骤及说明,完成相关操作记录实验…...
读书笔记~管理修炼-风险性决策:学会缩小风险阈值
假设你的团队为了提升业绩,提出了两个解决方案:A方案是通过营销提升老产品的利润;B方案是通过研发开拓新产品,你会怎么选? 我们先来分析下,其实无论是A方案还是B方案,都会遇到市场难题…...
VIVADO FIFO (同步和异步) IP 核详细使用配置步骤
VIVADO FIFO (同步和异步) IP 核详细使用配置步骤 目录 前言 一、同步FIFO的使用 1、配置 2、仿真 二、异步FIFO的使用 1、配置 2、仿真 前言 在系统设计中,利用FIFO(first in first out)进行数据处理是再普遍不过的应用了,…...
tcp粘包原理和解决
tcp粘包原理和解决 咱们先通过展示基于tcp 的cs端消息通信时的现象,带着问题再解释下面的tcp粘包问题。 一、原始代码 tcp 服务端代码 // socket_stick/server/main.gofunc process(conn net.Conn) {defer conn.Close()reader : bufio.NewReader(conn)var bu…...
C语言预处理艺术:编译前的魔法之旅
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、预处理的作用与流程…...
C++算法第十六天
本篇文章我们继续学习动态规划 第一题 题目链接 978. 最长湍流子数组 - 力扣(LeetCode) 题目解析 从上图可见其实有三个状态 代码原理 注意:我们在分析题目的时候分析出来的是三个状态,分别是上升、下降、平坦,但是…...
计算机网络 (45)动态主机配置协议DHCP
前言 计算机网络中的动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)是一种网络管理协议,主要用于自动分配IP地址和其他网络配置参数给连接到网络的设备。 一、基本概念 定义:DHCP是一种网络协议…...
归子莫的科技周刊#2:白天搬砖,夜里读诗
归子莫的科技周刊#2:白天搬砖,夜里读诗 本周刊开源,欢迎投稿。 刊期:2025.1.5 - 2025.1.11。原文地址。 封面图 下班在深圳看到的夕阳,能遇到是一种偶然的机会,能拍下更是一种幸运。 白天搬砖,…...
平滑算法 效果比较
目录 高斯平滑 效果对比 移动平均效果比较: 高斯平滑 效果对比 右边两个参数是1.5 2 代码: smooth_demo.py import numpy as np import cv2 from scipy.ndimage import gaussian_filter1ddef gaussian_smooth_array(arr, sigma):smoothed_arr = gaussian_filter1d(arr, s…...
Elasticsearch容器启动报错:AccessDeniedException[/usr/share/elasticsearch/data/nodes];
AccessDeniedException 表明 Elasticsearch 容器无法访问或写入数据目录 /usr/share/elasticsearch/data/nodes。这是一个权限问题。 问题原因: 1、宿主机目录权限不足:映射到容器的数据目录 /data/es/data 在宿主机上可能没有足够的权限供容器访问。 …...
【Linux系统编程】——深入理解 GCC/G++ 编译过程及常用选项详解
文章目录 1. GCC/G 编译过程预处理(Preprocessing)编译(Compilation)汇编(Assembly)连接(Linking) 静态链接与动态链接静态链接动态链接静态库和动态库 GCC 常用选项关于编译器的周边…...
Mac安装配置使用nginx的一系列问题
brew安装nginx https://juejin.cn/post/6986190222241464350 使用brew安装nginx,如下命令所示: brew install nginx 如下图所示: 2.查看nginx的配置信息,如下命令: brew info nginxFrom:xxx 这样的,是n…...
Vue3中使用组合式API通过路由传值详解
在Vue 3中,使用组合式API来传递路由参数是一种常见的需求。Vue Router 是 Vue.js 的官方路由管理工具,可以在不同的场景下通过多种方式传递和接收路由参数。下面将详细讲解几种常见的路由传值方式,并提供相应的代码示例。 1. 通过路由参数传…...
两分钟解决 :![rejected] master -> master (fetch first) , 无法正常push到远端库
目录 分析问题的原因解决 分析问题的原因 在git push的时候莫名遇到这种情况 若你在git上修改了如README.md的文件。由于本地是没有README.md文件的,所以导致 远端仓库git和本地不同步。 将远端、本地进行合并就可以很好的解决这个问题 注意:直接git pu…...
浏览器安全(同源策略及浏览器沙箱)
一、同源策略(Same Origin Policy) 1.定义 同源策略(Same - origin Policy)是一种浏览器的安全机制。它规定一个网页的脚本只能访问和操作与它同源的资源。这里的 “源” 包括协议(如 http、https)、域名&…...
w~Transformer~合集11
我自己的原文哦~ https://blog.51cto.com/whaosoft/12472192 #LightSeq 最高加速9倍!字节跳动开源8比特混合精度Transformer引擎,近年来,Transformer 已经成为了 NLP 和 CV 等领域的主流模型,但庞大的模型参数限制了它的高效训练和推理。…...
Coursera四门课备考入学考试
某学校入学考试复习用,刷到的话纯靠缘分,不方便回答多余问题 (博主本人waive掉了没有考过,但还是基本都学完了) 记录学习coursera的四门课(顺序Py在DS前,其他无所谓) Mathematics fo…...
Flink(八):DataStream API (五) Join
1. Window Join Window join 作用在两个流中有相同 key 且处于相同窗口的元素上。这些窗口可以通过 window assigner 定义,并且两个流中的元素都会被用于计算窗口的结果。两个流中的元素在组合之后,会被传递给用户定义的 JoinFunction 或 FlatJoinFunct…...
HarmonyOS NEXT边学边玩:从零实现一个影视App(六、视频播放页的实现)
在HarmonyOS NEXT中,ArkUI是一个非常强大的UI框架,能够帮助开发者快速构建出美观且功能丰富的用户界面。本文将详细介绍如何使用ArkUI实现一个影视App的视频播放页面。将从零开始,逐步构建一个功能完善的视频播放页面,并解释每一部…...
salesforce实现一个字段的默认初始值根据另一个字段的值来自动确定
在 Salesforce 中,可以通过 公式字段 或 触发器 (Trigger) 实现字段的默认初始值根据另一个字段的值来自动确定,具体实现方法如下: 1. 使用公式字段 公式字段是一种动态字段,值会根据公式实时计算。 步骤: 导航到字段…...
Linux 文件权限详解
目录 前言 查看文件权限 修改文件权限 符号方式 数字方式 前言 Linux 文件权限是系统中非常重要的概念之一,用于控制对文件和目录的访问。权限分为读(Read)、写(Write)、执行(Execute)三个…...
【混合开发】CefSharp+Vue桌面应用程序开发
为什么选择CefSharpVue做桌面应用程序 CefSharp 基于 Chromium Embedded Framework (CEF) ,它可以将 Chromium 浏览器的功能嵌入到 .NET 应用程序中。通过 CefSharp,开发者可以在桌面应用程序中集成 Web 技术,包括 HTML、JavaScript、CSS 等…...
springBoot项目使用Elasticsearch教程
目录 一、引言(一)使用背景(二)版本库区别 二、引入依赖(一)springboot集成的es依赖(建议)(二)es提供的客户端库 三、配置(以yaml文件为例&#x…...
模型 多元化思维(系统科学)
系列文章分享模型,了解更多👉 模型_思维模型目录。融合多学科知识,全面解决问题。 1 多元化思维模型的应用 1.1 完美日记的私域流量运营 完美日记作为美妆行业的新兴品牌,通过多元化的思维模型在私域流量运营中取得了显著成功。…...
Google地图瓦片爬虫
地图地址说明 1、谷歌矢量(中文标注) http://mt{0-3}.google.cn/vt/vm416115521&hlzh-CN&glcn&x{x}&y{y}&z{z}&sGalileo 2、谷歌矢量(英文标注) http://mt{0-3}.google.cn/vt/vm416115521&hlen&glcn&x{x}&y{y}&z{z}&sGali…...
【C++】size_t全面解析与深入拓展
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯一、什么是size_t?为什么需要size_t? 💯二、size_t的特性与用途1. size_t是无符号类型示例: 2. size_t的跨平台适应性示例对…...
南水北调中线干线工程建设管理局网站/如何优化网页加载速度
1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输、数据持久化或者其它用途。 反之,解码(Decode࿰…...
陕西建设网官网与陕西省建筑市场监管与诚信信息发布平台/济南网络seo公司
typedef struct queue{ datatype data; struct queue *pNext;}Queue, *pQueue;Queue *enq() pQueue enq()这两个是等价的转载于:https://www.cnblogs.com/sjxbg/p/5760376.html...
linux ctlscript.sh wordpress/互联网站
1、定义:java.lang.IllegalArgumentException 非法论据异常,也可称为非法形参异常。2、说明:项目使用的Java编译器(即Java compiler)使用的jdk版本和Java的运行环境(即jre Java runtime environment&#x…...
网站制作公司成都/南昌seo招聘信息
在中国古典兵学理论中,有所谓“三才论”。此三才系指“帅才”、“相才”与“将才”。孙子兵法、诸葛兵法之中,对三才之使用皆有妙论。现在,让我们以现代科学观点来对“三才”做出科学分析。愚以为所谓“三才”,从功能角度来审视无…...
易动力建设网站怎么样/短视频营销推广方式
一、Linux添加/删除用户和用户组 http://www.cnblogs.com/xd502djj/archive/2011/11/23/2260094.html1、建用户:adduser phpq //新建phpq用户passwd phpq //给phpq用户设置密码2、建工作组groupadd test…...
wordpress零件数据库主体/搜索引擎是指什么
本章说明如何使用额外的插件(如客户化插件)对另一插件(如产品插件)进行扩展。 使用场景 在 产品线工程 中,项目的研发分为领域工程和应用工程。这个过程中会需要对领域工程中的内容进行大量的扩展。 分层与扩展点 下图…...