实训笔记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;

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

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

相关文章

日期清洗的sql函数

sql语言是postgressql。 函数只处理了 中国格式 &#xff1a; xxxx年-xx月-xx日 美国格式&#xff1a; mm/dd/yyyy&#xff0c; September 04,1991&#xff0c; September 1991&#xff0c; sept 04&#xff0c; 1991 uunix格式&#xff1a; yyyy/mm/dd&#xff0c; yyyy/mm&am…

python测试开发面试常考题:装饰器

目录 简介 应用 第一类对象 装饰器 描述器descriptor 资料获取方法 简介 Python 装饰器是一个可调用的(函数、方法或类)&#xff0c;它获得一个函数对象 func_in 作为输入&#xff0c;并返回另一函数对象 func_out。它用于扩展函数、方法或类的行为。 装饰器模式通常用…

【学习笔记】[ZJOI2019] 开关

之前没认真学 F W T FWT FWT可惜了&#x1f605; 首先要做过这道题 [AGC034F] RNG and XOR 。 考虑 I F W T IFWT IFWT算法的本质&#x1f914; 之前我们注意到将 k k k的顺序调换并不会影响结果&#xff0c;也就是说只要做一遍 F W T FWT FWT&#xff0c;然后再除以 2 n 2^…

【数据结构】实验十一:图

实验十一 图 一、实验目的与要求 1&#xff09;掌握图的存储表示与操作实现。 2&#xff09;掌握图的连通性及其应用。 二、 实验内容 1.用邻接表存储一个图形结构&#xff0c;并计算每个顶点的度。 2. 采用深度和广度优先搜索算法&#xff0c;遍历上述这张图&#xff0c;…

vue 实现拖拽效果

实现方式&#xff1a;使用自定义指令可以实现多个面板拖拽互不影响 1.自定义指令 js directives: {// 拖拽drag(el) {el.onmousedown function (e) {let x e.pageX - el.offsetLeftlet y e.pageY - el.offsetTopdocument.onmousemove function (e) {el.style.left e.pag…

placeholder样式自定义(uniapp 微信小程序、h5)

一、使用uniapp开发 ①第一种方式&#xff1a;&#xff08;写在行内&#xff09; <input type"text" placeholder"姓名" placeholder-style"font-size:28rpx;color:#999999;" />②第二种方式&#xff1a; &#xff08;给input加上placeho…

《向量数据库指南》:向量数据库Pinecone如何集成数据湖

目录 为什么选择Databricks? 为什么选择Pinecone? 设置Spark集群 环境设置 将数据集加载到分区中 创建将文本转换为嵌入的函数 将UDF应用于数据 更新嵌入 摘要 使用Databricks和Pinecone在规模上创建和索引向量嵌入 建立在Apache Spark之上的Databricks是一个强大的…

【期末课程设计】学生成绩管理系统

因其独特&#xff0c;因其始终如一 文章目录 一、学生成绩管理系统介绍 二、学生成绩管理系统设计思路 三、源代码 1. test.c 2. Student Management System.c 3.Stu_System.c 4.Teacher.c 5.Student Management System.h 前言&#xff1a; 学生成绩管理系统含教师…

什么是Maven,Maven的概述及基本使用

MAVEN 一、Maven简介1.1、Maven概述1.2、Maven仓库1.3项目获取jar包过程 二、Maven使用2.1Maven安装配置2.1.1配置环境变量2.1.2配置本地仓库2.1.3配置阿里云私服 2.2Maven基本使用2.2.1Maven常用指令2.2.2Maven生命周期 总结 一、Maven简介 Apache Maven是一个项目管理和构建…

STM32 I2C OVR 错误

一、问题 STM32 I2C 用作从机时&#xff0c;开启如下中断并启用 callback 回调函数。 每一次复位后&#xff0c;从机都可以正常触发地址匹配中断ADDR&#xff0c;之后在该中断的回调函数中启用接收中断去收取数据时&#xff0c;却无法进入RXNE中断&#xff0c;而是触发了 OVR …

<C语言> 动态内存管理

1.动态内存函数 为什么存在动态内存分配&#xff1f; int main(){int num 10; //向栈空间申请4个字节int arr[10]; //向栈空间申请了40个字节return 0; }上述的开辟空间的方式有两个特点&#xff1a; 空间开辟大小是固定的。数组在申明的时候&#xff0c;必须指定数组的…

自然语言处理NLP介绍——NLP简介

目录 内容先进性说明内容大纲概要云服务器的使用 内容先进性说明 内容大纲概要 云服务器的使用

githack的安装步骤+一次错误体验

一.githack的安装步骤 1.要在Kali Linux上安装GitHack工具&#xff0c;您可以按照以下步骤操作&#xff1a; 打开终端并使用以下命令克隆GitHack存储库&#xff1a; git clone https://github.com/lijiejie/GitHack.git2.进入GitHack目录&#xff1a; cd GitHack3.安装依赖项…

一种分解多种信号模式非线性线性调频的方法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

JVM-Cpu飙升排查及解决

https://blog.csdn.net/m0_37542440/article/details/123679011 1. 问题情况 在服务器上执行某个任务时&#xff0c;系统突然运行缓慢&#xff0c;top 发现cpu飙升&#xff0c;一度接近100%&#xff0c;最终导致服务假死。 2. 问题排查 1. 执行 “top” 命令&#xff1a;查看所…

Elasticsearch

文章目录 分布式搜索引擎elasticsearch介绍elasticsearch作用ELK技术栈elasticsearch和lucene 倒排索引正向索引倒排索引正向和倒排比较 es的一些概念文档和字段索引和映射mysql与elasticsearch elasticsearch安装部署单点es部署kibana安装IK分词器扩展词词典停用词典 索引库操…

Go语言基础语法八万字详解,对小白友好

基本语法——变量var 变量的使用 什么是变量 变量是为存储特定类型的值而提供给内存位置的名称。在go中声明变量有多种语法。 所以变量的本质就是一小块内存&#xff0c;用于存储数据&#xff0c;在程序运行过程中数值可以改变 声明变量 var名称类型是声明单个变量的语法…

PaddleOCR #PP-OCR常见异常扫雷

异常一&#xff1a;ModuleNotFoundError: No module named ‘tools.infer’ 实验案例&#xff1a; PaddleOCR #使用PaddleOCR进行光学字符识别&#xff08;PP-OCR文本检测识别&#xff09; 参考代码&#xff1a; 图片文本检测实验时&#xff0c;运行代码出现异常&#xff1a;M…

自然语言处理从入门到应用——LangChain:模型(Models)-[大型语言模型(LLMs):缓存LLM的调用结果]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 from langchain.llms import OpenAI在内存中缓存 import langchain from langchain.cache import InMemoryCachelangchain.llm_cache InMemoryCache()# To make the caching really obvious, lets use a slower mode…

【我们一起60天准备考研算法面试(大全)-第二十七天 27/60】【真分数】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…