【大数据】Hive SQL语言(学习笔记)

news2024/11/28 18:56:45

一、DDL数据定义语言

1、建库

1)数据库结构

默认的数据库叫做default,存储于HDFS的:/user/hive/warehouse

用户自己创建的数据库存储位置:/user/hive/warehouse/database_name.db

2)创建数据库

create (database|schema) [if not exists] database_name
[comment database_comment]
[location hdfs_path]
[with dbproperties (property_name=property_value, ...)];
  • comment:数据库的注释说明语句
  • location:指定数据库在HDFS存储位置,默认/user/hive/warehouse/dbname.db
  • with dbproperties:用于指定一些数据库的属性配置。

3)删除数据库

drop (database|schema) [if exists] database_name [restrict|cascade];

默认行为是RESTRICT,这意味着仅在数据库为空时才删除它。

若要删除带有表的数据库(不为空的数据库),可以使用CASCADE

2、建表

1)建表语法树

create table  [if not exists] [db_name.]table_name
(col_name data_type [comment col_comment], ... )
[comment table_comment]
[row format delimited …];
-- 创建数据库并切换使用
create database if not exists itheima;
use itheima;
-- ddl create table
create table t_archer(
    id int comment "ID",
    name string,
    hp_max int,
    mp_max int,
    attack_max int,
    defense_max int,
    attack_range string,
    role_main string,
    role_assist string
)
row format delimited
fields terminated by "\t";

2)指定分隔符

ROW FORMAT DELIMITED:用于指定字段之间等相关的分隔符才能正确的读取解析数据。

建表时如果没有row format语法指定分隔符,则采用默认分隔符(‘\001’)。

3)Hive注释信息中文乱码解决

-- 注意 下面sql语句是需要在MySQL中执行  修改Hive存储的元数据信息(metadata)
use hive3;
show tables;

alter table hive3.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table hive3.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table hive3.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table hive3.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table hive3.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

3、show语法

Show相关的语句可以帮助用户查询相关信息

-- 1、显示所有数据库 SCHEMAS和DATABASES的用法 功能一样
show databases;
show schemas;

-- 2、显示当前数据库所有表
show tables;
SHOW TABLES [IN database_name]; --指定某个数据库

-- 3、查询显示一张表的元数据信息
desc formatted t_team_ace_player;

二、DML数据操纵语言

1、Load 加载

在Hive中建表成功之后,就会在HDFS上创建一个与之对应的文件夹,文件夹名是表名

文件夹父路径:/user/hive/warehouse/xxx.db

文件夹父路径是由参数hive.metastore.warehouse.dir控制

Load语法:

load data [local] inpath 'filepath' [overwrite] into table tablename;
  • filepath:表示待移动数据的路径。
  • 指定local:将在本地文件系统(Hiveserver2服务所在机器)中查找文件路径。
  • 没有指定local:直接使用这个URI。

2、Insert 插入

插入数据会触发MapReduce,慢死算了…😅

insert + select:将后面查询返回的结果作为内容插入到指定表中,需要保证查询结果列的数目和需要插入数据表格的列数目一致。

insert into table student_from_insert select num,name from student;

三、DQL数据查询语言

就是正常的sql语言 😅

四、Hive 函数

1、函数分类

UDF:普通函数,一进一出

UDAF:聚合函数,多进一出

UDTF:表生成函数,一进多出

2、内置函数

1)字符串函数

-- Hive 常用的内置函数
show functions;
describe function extended count;


-- String Functions 字符串函数
select length("itcast");
select reverse("itcast");

select concat("angela","baby");
-- 带分隔符字符串连接函数:concat_ws(separator, [string | array(string)]+)
select concat_ws('.', 'www', array('itcast', 'cn'));

-- 字符串截取函数:substr(str, pos[, len]) 或者  substring(str, pos[, len])
select substr("angelababy",-2); --pos是从1开始的索引,如果为负数则倒着数
select substr("angelababy",2,2);

-- 分割字符串函数: split(str, regex)
-- split针对字符串数据进行切割 返回是数组array 可以通过数组的下标取内部的元素 注意下标从0开始的
select split('apache hive', ' ');
select split('apache hive', ' ')[0];
select split('apache hive', ' ')[1];

2)日期函数

-- Date Functions 日期函数
-- 获取当前日期: current_date
select current_date();
-- 获取当前UNIX时间戳函数: unix_timestamp
select unix_timestamp();
-- 日期转UNIX时间戳函数: unix_timestamp
select unix_timestamp("2011-12-07 13:01:03");
-- 指定格式日期转UNIX时间戳函数: unix_timestamp
select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss');
-- UNIX时间戳转日期函数: from_unixtime
select from_unixtime(1618238391);
select from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');
-- 日期比较函数: datediff  日期格式要求'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'
select datediff('2012-12-08','2012-05-09');
-- 日期增加函数: date_add
select date_add('2012-02-28',10);
-- 日期减少函数: date_sub
select date_sub('2012-01-1',10);

3)数学函数

-- Mathematical Functions 数学函数
-- 取整函数: round  返回double类型的整数值部分 (遵循四舍五入)
select round(3.1415926);
-- 指定精度取整函数: round(double a, int d) 返回指定精度d的double类型
select round(3.1415926,4);
-- 取随机数函数: rand 每次执行都不一样 返回一个0到1范围内的随机数
select rand();
-- 指定种子取随机数函数: rand(int seed) 得到一个稳定的随机数序列
select rand(3);

4)条件函数

-- Conditional Functions 条件函数
-- 使用之前课程创建好的student表数据
select * from student limit 3;

-- if条件判断: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
select if(1=2,100,200);
select if(sex ='男','M','W') from student limit 3;

-- 空值转换函数: nvl(T value, T default_value)
select nvl("allen","itcast");
select nvl(null,"itcast");

-- 条件转换函数: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end;
select case sex when '男' then 'male' else 'female' end from student limit 3;

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

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

相关文章

c#设计模式-行为型模式 之 备忘录模式

🚀简介 备忘录模式(Memento Pattern)是一种行为型设计模式,它保存一个对象的某个状态,以便在适当的时候恢复对象。所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象…

Android 14 正式发布,已经在 AOSP 中上线

本心、输入输出、结果 文章目录 Android 14 正式发布,已经在 AOSP 中上线前言总结主要更新内容机型支持优化性能的数据体现字体放大、多媒体支持加强Android 14 增加了对 10 位高动态范围 (HDR) 图像的支持提供了新的图形和尺寸管理用户体验 与隐私安全弘扬爱国精神Android 14…

Vue3 + Nodejs 实战 ,文件上传项目--实现拖拽上传

目录 1.拖拽上传的剖析 input的file默认拖动 让其他的盒子成为拖拽对象 2.处理文件的上传 处理数据 上传文件的函数 兼顾点击事件 渲染已处理过的文件 测试效果 3.总结 博客主页:専心_前端,javascript,mysql-CSDN博客 系列专栏:vue3nodejs 实战-…

【JVM】JVM的内存区域划分

JVM的内存区域划分 堆Java虚拟机栈程序计数器方法区运行时常量池 堆 程序中创建的所有对象都保存在堆中 Java虚拟机栈 Java虚拟机栈的生命周期和线程相同,描述的是Java方法执行的内存模型,每个方法在执行的时候都会同时创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法…

C语言 —— 结构体

生活中有许多复杂对象是无法用基本数据类型来描述的, 于是为了描述复杂对象, C语言就会使用到结构体. 1. 结构体的声明与定义 1.1 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明与定义 struct tag {…

vue3后台管理框架之基础配置

配置vite.config.js import { defineConfig } from viteimport vue from @vitejs/plugin-vueexport default defineConfig(({ command, mode }) => {//const env = loadEnv(mode, process.cwd(), ) //获取环境变量return {// 打包devbase: ./,// 开发环境server: {port: 50…

Spring framework Day11:策略模式中注入所有实现类

前言 什么是策略模式? 策略模式(Strategy Pattern)是一种面向对象设计模式,它定义了算法族(一组相似的算法),并且将每个算法都封装起来,使得它们可以互相替换。策略模式让算法的变…

LeetCode【17】电话号码的字母组合

题目: 思路: 参考:https://blog.csdn.net/weixin_46429290/article/details/121888154 和上一个题《子集》的思路一样,先画出树结构,看树的深度(遍历层级),树的宽度(横向…

压力山大题

找不到工作的面试者总结 提示:写文章的时候,我还在找工作!!! 文章目录 找不到工作的面试者总结前言一、JAVA面死题1. OOP是什么2. 重载与重写的区别3. java基本类型4. String、StringBuffer、StringBuilder的区别 二、…

2022最新版-李宏毅机器学习深度学习课程-P23 为什么用了验证集结果还是过拟合

用了验证集还有可能会过拟合 这个片段可以从理论上证明这一点 以上整个挑选模型的过程也可以想象为一种训练。 把三个模型导出的最小损失公式看成一个集合,现在要做的就是在这个集合中找到某个h(此处可以视为训练),使得在验证集…

边写代码边学习之Pycaret

PyCaret 简介 PyCaret 是一个用于简化 Python 机器学习工作流程的开源库。它提供了一个高级、低代码的接口,用于自动化机器学习流程的各个方面,使数据科学家和分析师更容易构建和部署机器学习模型。PyCaret 的一些关键特点和用途包括: 1. 自…

第六章 查找

第六章 查找 基本概念静态查找表顺序表上的查找有序表上的查找索引顺序表上的查找 二叉排序树散列表常见散列法散列表的实现 小试牛刀 基本概念 查找表是由同一类型的数据元素构成的集合,它是一种以查找为“核心”,同时包括其他运算的非常灵活的数据结构…

Android Studio SDK manager加载packages不全

打开Android Studio里的SDK manager,发现除了已安装的,其他的都不显示。 解决方法: 设置代理: 方便复制> http://mirrors.neusoft.edu.cn/ 重启Android Studio

小主机折腾记17

8月9月10月基本在出差,流水账如下 1.由于出差,租了个公寓,所以买了个r2s,卖家已经安装部署好openwrt,风扇以及无线网卡 着重研究了风扇的脚本以及无线网卡的设置 风扇可以完美设置,但是无线网卡效果差强人意…

k8s-11 网络策略

添加网络策略 限制pod流量 控制的对象是具有appmyapp-v1标签的pod 此时访问svc是不通的 给测试pod添加指定标签后,可以访问 重启一下 限制namespace流量 给namespace添加指定标签 同时限制namespace和pod 给test命令空间中的pod添加指定标签后才能访问 限制集群…

k8s-13 存储之secret

Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活 。 Pod 可以用两种方式使用 secret:作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里 当 kubelet 为 pod 拉…

山西电力市场日前价格预测【2023-10-16】

日前价格预测 预测说明: 如上图所示,预测明日(2023-10-16)山西电力市场全天平均日前电价为356.38元/MWh。其中,最高日前电价为502.82元/MWh,预计出现在18: 30。最低日前电价为224.63元/MWh,预计…

PTQ与QAT

对称量化与非对称量化 量化分为对称量化与非对称量化。 非对称量化含有S和Z,对称量化Z为0,计算公式中只需S,为非饱和量化。 动态范围的确认 动态范围的确认Max(默认的是对称量化,即不用Z),…

linux 内核中的pid和前缀树

前言: 写这个文章的初衷是因为今天手写了一个字典树,然后写字典树以后忽然想到了之前看的技术文章,linux kernel 之前的pid 申请方式已经从 bitmap 变成了 基数树,所以打算写文章再回顾一下这种数据结构算法 一、内核中pid的申请…

排序算法-基数排序法(RadixSort)

排序算法-基数排序法(RadixSort) 1、说明 基数排序法与我们之前讨论的排序法不太一样,并不需要进行元素之间的比较操作,而是属于一种分配模式排序方式。 基数排序法比较的方向可分为最高位优先(Most Significant Di…