当前位置: 首页 > news >正文

实训笔记7.28

实训笔记7.28

  • 7.28笔记
    • 一、Hive的基本使用
      • 1.1 Hive的命令行客户端的使用
      • 1.2 Hive的JDBC客户端的使用
        • 1.2.1 使用前提
        • 1.2.2 启动hiveserver2
        • 1.2.3 使用方式
      • 1.3 Hive的客户端中也支持操作HDFS和Linux本地文件
    • 二、Hive中DDL语法
      • 2.1 数据库的管理
        • 2.1.1 创建语法
        • 2.1.2 修改语法
        • 2.1.3 查询语法
        • 2.1.4 删除语法
      • 2.2 数据表的管理
        • 2.2.1 创建语法
        • 2.2.2 修改语法
        • 2.2.3 查询语法
        • 2.2.4 删除语法
        • 2.2.5 数据表字段类型
    • 三、Hive中DML语法
      • 3.1 Hive的DML操作分为两部分
        • 3.1.1 正常的DML操作:对数据增加、删除、修改操作
        • 3.1.2 import和export操作
    • 四、代码示例

7.28笔记

一、Hive的基本使用

Hive采用类SQL语言HQL进行数据库和数据表的创建、修改、查询、删除等等操作。同时采用HQL语言对表数据进行查询统计分析等操作。表面上hive是通过HQL来进行操作的,但实际底层是基于HDFS、MapReduce、YARN的实现。

1.1 Hive的命令行客户端的使用

只能在Hive的安装节点上使用,无法远程操作。

使用语法:hive 【操作选项】

  1. hive:会进入hive的交互式命令行窗口

  2. hive -e "HQL语句" :不需要进入交互式命令窗口也可以执行HQL语句 ,HQL语句也可以有多条,只要保证语句之间以分号分割即可,但是不建议这种方式执行多条HQL语句

  3. hive -f xxx.sql --hiveconf key=value .... --hivevar key=value ......

    不需要进入交互式命令行窗口去执行多条HQL语句,只要保证多条HQL语句声明到一个SQL文件即可。多条语句以分号分割,同时SQL文件中注释必须以–空格的形式去声明。

    --hiveconf --hivevar代表向SQL文件传递一个参数,传递的参数在SQL使用的时候,使用的语法:

    --hiveconf key=value : ${hiveconf:key}

    --hivevar key=value : ${hivevar:key}

1.2 Hive的JDBC客户端的使用

可以通过Java代码借助JDBC工具远程连接Hive数据仓库,然后通过网络传递HQL语句以及执行结果。

1.2.1 使用前提

必须启动hiveserver2,hiveserver2相等于是hive的远程连接服务,专门用来让我们通过JDBC远程连接的。hiveserver2启动之后会给我们提供一个网络端口10000(必须在hive-site.xml文件中配置hiveserver2的相关参数、core-site.xml中允许hiveserver2的用户操作Hadoop集群)。

1.2.2 启动hiveserver2

nohup hiveserver2 1>xxxx.log 2>&1 &

Hive服务的启动和关闭代码比较多的,因此我们可以启动和关闭的命令封装成为一个shell脚本,便于我们后期的操作 hs2.sh

【注意】我们每次开启虚拟机都需要开启hdfs、yarn、jobhistory、hiveserver2,扩展作业:把HDFS、YARN、Jobhistory、hiveserver2的开启封装到一个通用的脚本文件中。

1.2.3 使用方式

  1. 使用Java代码中的原始的JDBC去操作Hiveserver2

  2. 使用一些基于JDBC的工具\

    1. beeline–hive自带的jdbc客户端
    2. dbeaver–基于jdbc的数据库可视化工具

1.3 Hive的客户端中也支持操作HDFS和Linux本地文件

  1. Hive客户端操作HDFS: dfs 选项操作
  2. Hive客户端操作Linux: !Linux命令

二、Hive中DDL语法

Hive也有DDL语法,DDL语法就是hive用来管理数据库和数据表的语言。虽然Hive使用数据库和数据表来管理结构化数据,但是库和表的底层实现和正宗的数据库是没有任何的关系的。

Hive

2.1 数据库的管理

2.1.1 创建语法

create  databaseif not exists】 database_name 
【comment   "注释"】 
【location   "hdfs的地址"】 
【with dbproperties("key"="value","key"="value",........)

2.1.2 修改语法

  1. 修改数据库的dbproperties:

    alter database database_name set dbproperties(key=value.....)

  2. 修改数据库的存储位置(hive2.2.1版本之后才支持):

    alter database database_name set location "hdfs路径"

2.1.3 查询语法

  1. show databases;
  2. desc database database_name
  3. desc database extended database_name

2.1.4 删除语法

  1. drop database database_name
  2. drop database database_name cascade

2.2 数据表的管理

2.2.1 创建语法

  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], ...)] #hive中特有的数据表 分区表
[CLUSTERED BY (col_name, col_name, ...) #hive中特有的数据表  分桶表
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]  #分桶表的信息
[ROW FORMAT row_format]  #表字段之间的分隔符
[STORED AS file_format]  #hdfs存储的文件的类型格式 默认是文本格式
[LOCATION hdfs_path]     #单独指定数据表在hdfs上存储的目录,如果没有指定 那么就在表对应的数据库的路径下
  1. hive数据表的分类

    1. 管理表/内部表——————删除表,表数据一并删除

    2. 外部表——————删除表,表数据在HDFS上依然存在

    3. 分区表

      将表数据以分区目录的形式在HDFS上进行存储

      分区表指定分区字段,分区字段不能是表字段,表字段是要在文件中存储的,分区字段是以目录的形式表示的

      多级分区

    4. 分桶表

      表字段数据最终是以文件的形式存放的,表数据以几个文件进行存储,分桶表的事情

      分桶表指定分桶字段,分桶字段一定是表字段,分桶字段结合分桶格式使用hash取值的方式进行文件的分发

      支持抽样取值tablesample

  2. hive数据表底层存储文件的分隔符问题

    row_format DELIMITED说明
    [FIELDS TERMINATED BY char [ESCAPED BY char]]列和列之间的分隔符
    [LINES TERMINATED BY char]行和行之间分隔符 \n
    [COLLECTION ITEMS TERMINATED BY char]集合、struct、数组等等结构元素之间的分隔符
    [MAP KEYS TERMINATED BY char]map集合key value之间的分隔符
    [NULL DEFINED AS char]null值用什么字符表示
  3. hive支持指定HDFS存储目录、一般不建议指定

  4. Hive中还有两种比较特殊的创建数据表的语法

    1. 根据查询语法创建数据表

      create table table_name as select查询语句

    2. 根据另外一个数据表创建一个新的数据表

      create table table_name like other_table_name

      创建的新表只有旧表的结构,没有旧表的数据

      分区信息和分桶信息也会一并复制

2.2.2 修改语法

修改表字段

增加/删除表分区目录信息

2.2.3 查询语法

  1. show tables;
  2. desc table_name;
  3. desc formatted table_name;

2.2.4 删除语法

drop table if not exists table_name;

2.2.5 数据表字段类型

类型
整数类型tinyint
smallint
int/integer
bigint
布尔类型boolean
小数类型float
double
字符串类型string
时间日期有关的类型timestamp
字节类型binary
复杂的数据类型array-数组类型
map-Java中map集合
struct—Java对象(可以存放多个数据,每个数据的类型都可以不一样)

三、Hive中DML语法

Hive中存储的数据是以数据库和数据表的形式进行存储的,因此我们就可以使用DML操作对表数据进行相关的增加、删除、修改等操作。但是因为hive的特殊性,Hive对数据的修改和删除不是特别的支持。

3.1 Hive的DML操作分为两部分

3.1.1 正常的DML操作:对数据增加、删除、修改操作

  1. 增加数据的语法

    1. 普通的insert命令:底层会翻译成为MR程序执行

      1. insert into table_name(表字段) 【partition(分区字段=分区值)】 values(字段对应的值列表),(值列表).......

        Hive中基本不用

      2. insert into table_name(表字段) 【partition(分区字段=分区值)】 select 查询语句

      3. insert overwrite table table_name(表字段) 【partition(分区字段=分区值)】 select 查询语句

        Hive比较常用 根据一个查询语句添加数据 要求 table_name后面跟的表字段的个数、类型、顺序 必须和查询语句的得到结果一致

      4. 多插入语法,从同一个表A查询回来不同范围的数据插入到另外一个表B

        form A

        insert into/overwrite [table] table_name [partitio(分区字段=分区值)] select 查询字段 where筛选条件

        insert into/overwrite [table] table_name [partitio(分区字段=分区值)] select 查询字段 where另外一个筛选条件

    2. 如果向表中增加数据,除了insert语法以外,我们还可以通过一些手法来添加数据

      1. 按照表格的格式要求,将一个符合格式要求的数据文件上传到数据表的所在HDFS目录下

        不建议使用

        【注意事项】 如果不是分区表,数据上传成功,表会自动识别 如果是分区表,可能会出现数据上传成功,但是表不识别(分区目录是我们手动创建的),我们修复分区表 msck repair table table_name

      2. 创建表的时候指定location, location位置可以存在

    3. load装载命令

      也是将文件装载到数据表当中(底层表现就是会把文件移动到数据表所在的目录下),load装载命令相比于手动上传文件而言,load不会出现数据上传无法识别的情况,因此load装载数据会走hive的元数据。

      同时手动上传文件到数据表目录下,因为不走元数据,因此我们执行count()命令统计表中的数据行,结果不准确的,因为count()直接从元数据中获取结果。但是如果使用load装载,同样是将文件上传到hive数据表的存储目录,但是load走元数据。

      load data [local] inpath "路径" [overwrite] into table table_name [partition(分区字段=分区值)]

      local 如果加了local 那么后面路径是linux的路径

      如果没有加local 那么路径是HDFS的路径(如果是HDFS上的文件装载,把文件移动到数据表的目录下,原始文件不见)

      【注意事项】load装载的文件的格式必须和数据表的分割符一致,列也是对应。否则会出现装载失败或者数据异常。

  2. 更新操作

    Hive中创建的分区表、管理表、外部表、分桶表默认不支持更新操作

    更新操作需要hive的一些特殊手段,hive的事务操作

  3. 删除操作

    Hive中创建的这些表默认不支持删除部分数据操作,但是支持删除所有数据的操作。

    如果要删除表中所有数据,必须使用truncate table table_name 命令是DDL命令

3.1.2 import和export操作

  1. 导出操作

    将hive数据表中数据导出到指定的目录下存储

    export table table_name [partition(分区=值)] to "路径"

  2. 导入操作

    将hive导出的数据导入到hive中

    import [external] table table_name [partition(分区=值)] from "hdfs路径-必须是通过export导出的数据"

    如果导入指定分区,分区必须导出目录也存在

四、代码示例

create table demo(hobby array<string>,menu  map<string,double>,students struct<name:string,age:int,sex:string>
)row format delimited
fields terminated by ","
collection items terminated by "_"
map keys terminated by ":"
lines terminated by "\n";
-- 1、根据查询语句创建数据表:创建的数据表字段会根据查询语句的字段自动确定,类型自动推断
use demo;
create table teacher as select teacher_number as tn,teacher_name from teacher1;
select * from teacher;
-- 2、根据其他表创建一张一样的数据表
create table teacher2 like teacher1;
select * from teacher2;
desc formatted teacher2;-- 3、创建一个具有复杂数据类型的数据表 必须指定复杂数据类型的元素的分割符
-- array map struct 三个类型都是有多条数据组成的,需要指定数据之间的分隔符
create table demo(hobby array<string>,menu  map<string,double>,students struct<name:string,age:int,sex:string>
)row format delimited
fields terminated by ","
collection items terminated by "_"
map keys terminated by ":"
lines terminated by "\n";
-- 向数据表增加特殊数据  insert增加问题比较多,不用insert增加了,而是使用文件添加
select * from demo;
select hobby[0],menu["apple"],students.age from demo;-- DML操作语法
-- 1、insert增加单条或者多条数据
create table test(name string,age int
)row format delimited fields terminated by ",";
insert into test values("zs",20),("ww",30);
insert into test select name,age from test1;create table test1(name string,age int
)partitioned by (timestr string)
row format delimited fields terminated by ",";
insert into test1 partition(timestr="2022") values("zs",20),("ww",30);insert overwrite table test1 partition(timestr="2022") select name,age from test;
-- 多插入语法,根据多条增加语句增加数据,要求多条增加语句的查询是从同一张表查询过来
from test 
insert overwrite table test1 partition(timestr="2022") select name,age
insert overwrite table test1 partition(timestr="2023") select name,age;-- 修复hive分区表的分区
msck repair table test1;
show partitions test1;

相关文章:

实训笔记7.28

实训笔记7.28 7.28笔记一、Hive的基本使用1.1 Hive的命令行客户端的使用1.2 Hive的JDBC客户端的使用1.2.1 使用前提1.2.2 启动hiveserver21.2.3 使用方式 1.3 Hive的客户端中也支持操作HDFS和Linux本地文件 二、Hive中DDL语法2.1 数据库的管理2.1.1 创建语法2.1.2 修改语法2.1.…...

C 游游的二进制树

题目描述 游游拿到了一棵树&#xff0c;共有nnn个节点&#xff0c;每个节点都有一个权值&#xff1a;0或者1。这样&#xff0c;每条路径就代表了一个二进制数。 游游想知道&#xff0c;有多少条路径代表的二进制数在[l,r][l,r][l,r]区间范围内&#xff1f; &#xff08;请注意…...

收发存和进销存有什么区别?

一、什么是收发存和进销存 1、收发存 收发存是供应链管理中的关键概念&#xff0c;用于描述企业在供应链中的物流和库存管理过程。 收发存代表了企业在采购、生产和销售过程中的物流活动和库存水平。 收&#xff08;Receiving&#xff09; 企业接收供应商送达的物料或产品…...

小程序 账号的体验版正式版的账号信息及相关配置

siteinfo.js // 正式环境 const releaseConfig {appID: "",apiUrl: "",imgUrl: "" }; // 测试环境&#xff08;包含开发环境和体验环境&#xff09; const developConfig {appID: "",apiUrl: "",imgUrl: "" }…...

AIGC(Artificial Intelligence Generated Content)和 Web3对比,未来发展

一、AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;行业 历史背景 AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;是指利用人工智能技术生成的内容。随着人工智能技术的不断发展&#xff0c;AIGC 行业逐渐兴起。早期的 AIG…...

机器学习之Boosting和AdaBoost

1 Boosting和AdaBoost介绍 1.1 集成学习 集成学习 (Ensemble Learning) 算法的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类器。 集成学习通过建立几个模型来解决单一预测问题。它的工作原理是生成多个分类器/模型&#xff0c;各自独立地学…...

汇编语言预定义寄存器和协处理器

ARM汇编器对ARM的寄存器和协处理器进行了预定义&#xff08;包括APCS对r0&#xff5e;r15寄存器的定义&#xff09;&#xff0c;所有的寄存器和协处理器名都是大小写敏感的。 &#xff08;1&#xff09;预定义寄存器名 下面列出了被ARM汇编器预定义的寄存器名。 r0&#xff…...

【前缀和】974. 和可被 K 整除的子数组

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 974. 和可被 K 整除的子数组 题目:示例:题解: 题目: 示例: 题解: 本题与560.和为K的子数组高度相似 同样的,本题利用了前缀和的定理.当(pre[i]-…...

linux页框回收之shrink_node函数源码剖析

概述 《Linux内存回收入口_nginux的博客-CSDN博客》前文我们概略的描述了几种内存回收入口&#xff0c;我们知道几种回收入口最终都会调用进入shrink_node函数&#xff0c;本文将以Linux 5.9源码来描述shrink_node函数的源码实现。 函数调用流程图 scan_control数据结构 str…...

网络运维基础问题及解答

前言 本篇文章是对于网络运维基础技能的一些常见问题的解答&#xff0c;希望能够为进行期末复习或者对网络运维感兴趣的同学或专业人员提供一定的帮助。 问题及解答 1. 列举 3 种常用字符编码&#xff0c;简述怎样在 str 和 bytes 之间进行编码和解码。 答&#xff1a;常用的…...

【RabbitMQ】之保证数据不丢失方案

目录 一、数据丢失场景二、数据可靠性方案 1、生产者丢失消息解决方案2、MQ 队列丢失消息解决方案3、消费者丢失消息解决方案 一、数据丢失场景 MQ 消息数据完整的链路为&#xff1a;从 Producer 发送消息到 RabbitMQ 服务器中&#xff0c;再由 Broker 服务的 Exchange 根据…...

插入排序算法

插入排序 算法说明与代码实现&#xff1a; 以下是使用Go语言实现的插入排序算法示例代码&#xff1a; package mainimport "fmt"func insertionSort(arr []int) {n : len(arr)for i : 1; i < n; i {key : arr[i]j : i - 1for j > 0 && arr[j] > …...

Linux标准库API

目录 1.字符串函数 2.数据转换函数 3.格式化输入输出函数 4.权限控制函数 5.IO函数 6.进程控制函数 7.文件和目录函数 1.字符串函数 2.数据转换函数 3.格式化输入输出函数 #include<stdarg.h>void test(const char * format , ...){va_list ap;va_start(ap,format…...

腾讯云—自动挂载云盘

腾讯云&#xff0c;稍微麻烦了点。 腾讯云服务器&#xff0c;镜像为opencloudos 8。 ### 1、挂载云盘bash #首先通过以下命令&#xff0c;能够看到新的数据盘&#xff0c;如果不能需要通过腾讯云控制台卸载后&#xff0c;重新挂载&#xff0c;并重启服务器。 fdisk -l#为 /dev…...

为Win12做准备?微软Win11 23H2将集成AI助手:GPT4免费用

微软日前确认今年4季度推出Win11 23H2&#xff0c;这是Win11第二个年度更新。 Win11 23H2具体有哪些功能升级&#xff0c;现在还不好说&#xff0c;但它会集成微软的Copilot&#xff0c;它很容易让人想到多年前的“曲别针”助手&#xff0c;但这次是AI技术加持的&#xff0c;Co…...

Opencv Win10+Qt+Cmake 开发环境搭建

文章目录 一.Opencv安装二.Qt搭建opencv开发环境 一.Opencv安装 官网下载Opencv安装包 双击下载的软件进行解压 3. 系统环境变量添加 二.Qt搭建opencv开发环境 创建一个新的Qt项目(Non-Qt Project) 打开创建好的项目中的CMakeLists.txt&#xff0c;添加如下代码 # openc…...

Matlab实现光伏仿真(附上30个完整仿真源码)

光伏发电电池模型是描述光伏电池在不同条件下产生电能的数学模型。该模型可以用于预测光伏电池的输出功率&#xff0c;并为优化光伏电池系统设计和控制提供基础。本文将介绍如何使用Matlab实现光伏发电电池模型。 文章目录 1、光伏发电电池模型2、使用Matlab实现光伏发电电池模…...

JSON.stringify()与JSON.parse()

JSON.parse() 方法用来解析 JSON 字符串 onst json {"result":true, "count":42}; const obj JSON.parse(json); console.log(typeof(json)) //string console.log(typeof(obj)) //objJSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字…...

neo4j教程-安装部署

neo4j教程-安装部署 Neo4j的关键概念和特点 •Neo4j是一个开源的NoSQL图形存储数据库&#xff0c;可为应用程序提供支持ACID的后端。Neo4j的开发始于2003年&#xff0c;自2007年转变为开源图形数据库模型。程序员使用的是路由器和关系的灵活网络结构&#xff0c;而不是静态表…...

网络面试合集

传输层的数据结构是什么&#xff1f; 就是在问他的协议格式&#xff1a;UDP&TCP 2.1.1三次握手 通信前&#xff0c;要先建立连接&#xff0c;确保双方都是在线&#xff0c;具有数据收发的能力。 2.1.2四次挥手 通信结束后&#xff0c;会有一个断开连接的过程&#xff0…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...