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

HiveSQL SparkSQL中常用知识点记录

目录

0. 相关文章链接

1. hive中多表full join主键重复问题

2. Hive中选出最新一个分区中新增和变化的数据

3. Hive中使用sort_array函数解决collet_list列表排序混乱问题

4. SQL中对小数位数很多的数值转换成文本的时候不使用科学计数法

5. HiveSQL & SparkSQL中炸裂函数的使用(列转行)

6. HiveSQL & SparkSQL中对时间的转换


0. 相关文章链接

  开发随笔文章汇总  

1. hive中多表full join主键重复问题

hive中多表full join主键重复问题

2. Hive中选出最新一个分区中新增和变化的数据

Hive中选出最新一个分区中新增和变化的数据

3. Hive中使用sort_array函数解决collet_list列表排序混乱问题

Hive中使用sort_array函数解决collet_list列表排序混乱问题

4. SQL中对小数位数很多的数值转换成文本的时候不使用科学计数法

        我们在SQL中,会碰到使用collect_list和concat_ws将该列的数值统计成一个字段的情况,这时候我们会发现当小数位数太多的时候,有些转换成文本的时候,就会使用科学计数了。如下SQL和图片所示:

select concat_ws('_', collect_list(num))
from (SELECT cast(0.000001 as double) as numunion allSELECT cast(0.000009 as double) as num
)
;

        这时如果在应用上需要这个数值进行统计的话,会发现数据错误,所以我们此时,就需要使用特定的方法,将统计出来的文本数据也展示成正常的数据显示(这样在应用上进行切分并获取对应的数据时就能获取到正确的数据);获取方式如下SQL和图片所示:

select concat_ws('_', collect_list(cast(num as DECIMAL(20, 6))))
from (SELECT cast(0.000001 as double) as numunion allSELECT cast(0.000009 as double) as num
)
;

核心点:使用cast和decimal保存对应的固有位数,但是要注意decimal中当位数不足时会在后面补0,所以需要注意数值需要的保留位数和固有位数。

5. HiveSQL & SparkSQL中炸裂函数的使用(列转行)

原始数据如下:

select user_id,supply_suppress_score,dt 
FROM yishou_data.dwt_user_preference_score_180day_sp_dt 
where dt = 20230714 and user_id = '25887';

炸裂的语法和展示的数据如下(会新增一列:temp_field):

SELECTuser_id, supply_suppress_score, dt, temp_field
FROM yishou_data.dwt_user_preference_score_180day_sp_dt
lateral view outer explode (split(supply_suppress_score, ',')) as temp_field
where dt = 20230714 and user_id = '25887'
;

6. HiveSQL & SparkSQL中对时间的转换

  • 函数一:日期时间转日期函数【 to_date() 】
-- to_date(string timestamp) 返回日期时间字段中的日期部分
-- 返回类型:string
-- 其中的cast(xxx as TIMESTAMP)是将对应的秒值转换成TIMESTAMP的毫秒值,会乘以1000select to_date('2023-06-26 10:03:01') 
-- 输出结果:2023-06-26select to_date(CAST(1687708800 as TIMESTAMP))
-- 输出结果:2023-06-26
  • 函数二:获取当前日期和时间
-- current_date() 返回当前时间日期
-- 返回类型:date
select current_date()
-- 2023-07-24-- 通过unix_timestamp和from_unixtime 可以获取当前的时间
select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')
-- 2023-07-24 16:46:08
  • 函数三:查询当前系统时间(毫秒数 和 秒数) 
-- current_timestamp() 返回当前时间戳
-- 返回类型:timestamp
select current_timestamp() 
-- 1690170111525-- 时间戳【秒数】
select unix_timestamp()
-- 1690188440
  • 函数四:日期增加函数 【 date_add() 】
-- date_add(string startdate, int days) 返回开始日期startdate增加days天后的日期
-- 返回类型:stringselect date_add('2023-07-24', 1)
-- 2023-07-25select date_add('2023-07-24', -1)
-- 2023-07-23
  • 函数五:日期减少函数:date_sub()
-- date_sub (string startdate, int days) 返回开始日期startdate减少days天后的日期
-- 返回类型:stringselect date_sub('2023-07-24', 1) 
-- 2023-07-23select date_sub('2023-07-24', -1) 
-- 2023-07-25
  • 函数六:日期比较函数:datediff()
-- datediff(string enddate, string startdate) 返回结束日期减去开始日期的天数
-- 返回类型:intselect datediff('2023-07-23','2023-07-21')
-- 2select datediff('2023-07-23','2023-07-25')
-- -2
  • 函数七:日期格式化,按照格式返回字符串:date_format()
-- date_format(date/timestamp/string, string fmt) 按指定格式返回date
-- 返回类型: stringselect date_format('2023-07-23 10:00:00','yyyy-MM-dd') 
--2023-07-23select date_format('2023-07-23 10:00:00','yyyyMMdd') 
--20230723select date_format('2023-07-23 10:00:00','yyyy-MM') 
-- 2023-07select date_format('2023-07-23 10:00:00','yyyy') 
--2023
  • 函数八:日期转换成年、月、日、小时、分钟、秒函数【如果传入字符串需要是日期对应的格式,例:yyyy-MM-dd HH:mm:ss】
-- 日期转年函数:year()
-- year(string/date) 返回时间字符串的年份部分
-- 返回类型:int
select year('2023-07-23 10:00:00') 
-- 2023-- 日期转月份函数:month()
-- month(string/date) 返回时间字符串的月份
-- 返回类型:int
select month('2023-07-23 10:00:00') 
--7-- 日期转天函数:day() /dayofmonth(date)
-- day(string/date) 返回时间字符串的天
-- 返回类型:int
select day('2023-07-23 10:00:00') 
--23
select day('2023-07-23') 
--23
select dayofmonth('2023-07-23 10:00:00') 
--23-- 日期转小时函数:hour()
-- hour(string/date) 返回时间字符串的小时数字
-- 返回类型:int
select hour('2023-07-23 10:00:00') 
--10-- 日期转分钟函数:minute()
-- minute(string/date) 返回时间字符串的分钟数字
-- 返回类型:int
select minute('2023-07-23 10:00:00') 
--0-- 日期转秒函数:second()
-- second(string/date) 返回时间字符串的分钟数字
-- 返回类型:int
select second('2023-07-23 10:00:00') 
--0
  • 函数九:月份差:months_between()
-- months_between(date1, date2) 返回date1与date2之间相差的月份,如date1>date2,则返回正,否则为负
-- 返回类型:doubleselect months_between('2023-07-23','2023-08-25') 
--  -1.06451613select months_between('2023-07-23','2023-06-25') 
--  0.93548387select months_between('2023-07-23','2023-07-23') 
--0
  • 函数十:增加月份:add_months()
-- add_months(string start_date, int num_months) 返回当前时间下再增加num_months个月的日期
-- 返回类型:stringselect add_months('2023-07-23',2) 
-- 2023-09-23select add_months('2023-07-23',-2) 
-- 2023-05-23
  • 函数十一:查询时间字符串位于一年中的第几个周内:weekofyear()
-- weekofyear(string/date) 返回时间字符串位于一年中的第几个周内
-- 返回类型:intselect weekofyear('2023-07-23 12:00:00') 
-- 29
  • 函数十二:返回月末: last_day()
-- last_day(string date) 返回这个月的最后一天的日期,忽略时分秒部分(HH:mm:ss)
-- 返回类型:stringselect last_day(current_date()) 
-- 2023-07-31select last_day('2023-07-23') 
-- 2023-07-31select last_day('2023-07-23 12:00:00') 
-- 2023-07-31
  • 函数十三:返回时间的最开始年份或月份 :trunc()
-- trunc(string date, string format) 返回时间的最开始年份或月份
-- 返回类型:stringselect trunc(current_date(),'YY') 
-- 2023-01-01select trunc('2023-07-23','YY') 
-- 2023-01-01select trunc(current_date(),'MM') 
-- 2023-07-01select trunc('2023-07-23','MM') 
-- 2023-07-01
  • 函数十四:返回当月第1天
-- 方案一:使用trunc方法获取最开始的月份
select trunc(current_timestamp(),'MM')
-- 2023-07-01--方案二:先使用dayofmonth获取当前时间在当月的天数,然后再使用date_sub使用当前日期减去当月天数减一
select date_sub(current_date,dayofmonth(current_date)-1)
-- 2023-07-01
  • 函数十五:返回下个月/上个月第1天
-- 先使用add_months函数加/减一个月,再通过trunc获取这个月的第一天
select trunc(add_months(current_timestamp(),1),'MM')
  • 函数十六:返回下个月/上个月最后1天
-- 先使用add_months函数加/减一个月,再通过trunc获取这个月的第一天,作为第一个参数
-- 先使用add_months函数加/减一个月,再通过last_day获取这个月的最后一天,最后通过dayofmonth获取到这个月有多少天,作为第二个参数
-- 使用date_add函数,将上述第一个参数正常填入,第二个参数减一填入
select date_add(trunc(add_months(current_timestamp(),1),'MM') , dayofmonth(last_day(add_months(current_timestamp(),1))) - 1
);
-- 2023-08-31
  • 函数十七:下周几的具体日期: next_day()
-- next_day(string date, string week) 返回当前时间的下一个星期X所对应的日期
-- 返回类型:string
-- 注意:通过next_day和date_sub,还可以用来求取本周几-- 下周一
select next_day(to_date(CURRENT_TIMESTAMP),'MO') 
-- 2023-07-31select next_day(CURRENT_DATE,'MO') 
-- 2023-07-31
  • 函数十八:UNIX时间戳转日期函数:from_unixtime()
-- from_unixtime(bigint unixtime[, string format]) 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式
-- 返回类型:stringselect from_unixtime(1323308143,'yyyy-MM-dd') 
--2011-12-08
  • 函数十九:日期转UNIX时间戳函数: unix_timestamp()
-- unix_timestamp(string date) 转换格式为“yyyy-MM-dd HH:mm:ss“的日期到UNIX时间戳。如果转化失败,则返回0
-- 返回类型: bigintselect unix_timestamp('2019-03-07 13:01:03') 
--1551934863-- unix_timestamp(string date, string pattern) 转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0
-- 返回类型: bigintselect unix_timestamp('2009-03-20', 'yyyy-MM-dd') 
--1553011200

未完待续......


注:其他相关文章链接由此进 ->  开发随笔文章汇总 


相关文章:

HiveSQL SparkSQL中常用知识点记录

目录 0. 相关文章链接 1. hive中多表full join主键重复问题 2. Hive中选出最新一个分区中新增和变化的数据 3. Hive中使用sort_array函数解决collet_list列表排序混乱问题 4. SQL中对小数位数很多的数值转换成文本的时候不使用科学计数法 5. HiveSQL & SparkSQL中炸裂…...

mac不识别移动硬盘导致无法拷贝资源

背景 硬盘插入到Mac电脑上之后,mac不识别移动硬盘导致无法拷贝资源。 移动硬盘在Mac上无法被识别的原因可能有很多,多数情况下,是硬盘的格式与Mac电脑不兼容。 文件系统格式不兼容 macOS使用的文件系统是HFS或APFS,如果移动硬盘是…...

Opencv的Mat内容学习

来源&#xff1a;Opencv的Mat内容小记 - 知乎 (zhihu.com) 1.Mat是一种图像容器&#xff0c;是二维向量。 灰度图的Mat一般存放<uchar>类型 RGB彩色图像一般存放<Vec3b>类型。 (1)单通道灰度图数据存放样式&#xff1a; (2)RGB三通道彩色图存放形式不同&#x…...

MySQL~数据库的设计

二、数据库的设计 1、多表之间的关系 1.1 三种分类 一对一&#xff1a; 分析&#xff1a;一个人只有一个身份证&#xff0c;一个身份证只能对应一个人 如&#xff1a;人和身份证 一对多&#xff1a; 如&#xff1a;部门和员工 分析&#xff1a;一个部门有多个员工&#xff…...

开源了!最强原创图解八股文面试网来袭

强烈推荐 Github上业内新晋的一匹黑马—Java图解八股文面试网—Java2Top.cn&#xff0c;图解 Java 大厂面试题&#xff0c;深入全面&#xff0c;真的强烈推荐~ 这是一个二本逆袭阿里的大佬根据自己秋招上岸所看过的相关专栏&#xff0c;面经&#xff0c;课程&#xff0c;结合自…...

微信小程序开发6

一、分包-基础概念 1.1、什么是分包 分包指的是把一个完整的小程序项目&#xff0c;按照需求划分为不同的子包&#xff0c;在构建时打包成不同的分包&#xff0c;用户在使用时按需进行加载。 1.2、分包的好处 对小程序进行分包的好处主要有以下两点&#xff1a; 可以优化小程序…...

JS 根据身份证号获取年龄、性别、出生日期

先说一代身份证和二代身份证的区别: 1.编号位数不同&#xff0c;第一代身份证为15位号码&#xff0c;第二代证是18位号码 2.编码规则不同&#xff0c;第一代身份证在前6位号码后没有完整出生年份&#xff0c;而二代的有完整的出生年份&#xff0c;一代身份证将年份前二位省略…...

Python+Mongo+LSTM(GTP生成)

下面是一个简单的示例来展示如何使用Python和MongoDB来生成LSTM预测算法。 首先&#xff0c;我们需要安装pymongo和tensorflow库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install pymongo tensorflow接下来&#xff0c;我们连接到MongoDB数据库并获取需要进行预…...

关于idea如何成功运行web项目

导入项目 如图 依次选择 file - new - Project from Existing Sources 选择存放的项目目录地址 如图 导入完成 点击ok 如图 依次选择 Create project from existing sources 点击next如图 &#xff0c;此处默认即可 点击 next如图 点击next有该提示 是因为之前导入过…...

python读取json文件

import json# 文件路径(同目录文件名即可,不同目录需要绝对路径) path 1.json# 读取JSON文件 with open(path, r, encodingutf-8) as file:data json.load(file)#data为字典 print(data) print(type(data))...

迁移学习、微调、计算机视觉理论(第十一次组会ppt)

@TOC 数据增广 迁移学习 微调 目标检测和边界框 区域卷积神经网络R—CNN...

特殊矩阵的压缩存储

1 数组的存储结构 1.1 一维数组 各数组元素大小相同&#xff0c;且物理上连续存放。第i个元素的地址位置是&#xff1a;a[i] LOC i*sizeof(ElemType) (LOC为起始地址) 1.2 二维数组 对于多维数组有行优先、列优先的存储方法 行优先&#xff1a;先行后列&#xff0c;先存储…...

【网络原理】 (1) (应用层 传输层 UDP协议 TCP协议 TCP协议段格式 TCP内部工作机制 确认应答 超时重传 连接管理)

文章目录 应用层传输层UDP协议TCP协议TCP协议段格式TCP内部工作机制确认应答超时重传 网络原理部分我们主要学习TCP/IP协议栈这里的关键协议(TCP 和 IP),按照四层分别介绍.(物理层,我们不涉及). 应用层 我们需要学会自定义一个应用层协议. 自定义协议的原因? 当前的软件(应用…...

【SQL语句】

目录 一、SQL语句类型 1.DDL 2.DML 3.DLL 4.DQL 二、数据库操作 1.查看 2.创建 2.1 默认字符集 2.2 指定字符集 3.进入 4.删除 5.更改 5.1 库名称 5.2 字符集 三、数据表操作 1.数据类型 1.1 数值类型&#xff08;常见&#xff0c;下同&#xff09; 1.1.1 T…...

自动驾驶和机器人学习和总结专栏汇总

汇总如下&#xff1a; 一. 器件选型心得&#xff08;系统设计&#xff09;--1_goldqiu的博客-CSDN博客 一. 器件选型心得&#xff08;系统设计&#xff09;--2_goldqiu的博客-CSDN博客 二. 多传感器时间同步方案&#xff08;时序闭环&#xff09;--1 三. 多传感器标定方案&…...

【C++初阶】C++基础(下)——引用、内联函数、auto关键字、基于范围的for循环、指针空值nullptr

目录 1. 引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 1.5 传值、传引用效率比较 1.6 引用和指针的区别 2. 内联函数 2.1 概念 2.2 特性 3.auto关键字&#xff08;C11&#xff09; 3.1 类型别名思考 3.2 auto简介 3.3 auto的使用细则 3.4 auto不能推…...

OSI 7层模型 TCPIP四层模型

》Ref&#xff1a; 1. 这个写的嘎嘎好&#xff0c;解释了为啥4层7层5层&#xff0c;还有数据包封装的问题:数据包在网络中的传输过程详解_数据包传输_张孟浩_jay的博客-CSDN博客 2. HTTP协议 与 TCP协议 的区别&#xff0c;作为web程序员必须要懂 - 知乎 (zhihu.com) 3. 数据…...

iOS-持久化

目的 1.快速展示&#xff0c;提升体验 已经加载过的数据&#xff0c;用户下次查看时&#xff0c;不需要再次从网络&#xff08;磁盘&#xff09;加载&#xff0c;直接展示给用户 2.节省用户流量&#xff08;节省服务器资源&#xff09; 对于较大的资源数据进行缓存&#xf…...

PC音频框架学习

1.整体链路 下行播放&#xff1a; App下发音源→CPU Audio Engine 信号处理→DSP数字信号处理→Codec DAC→PA→SPK 上行录音&#xff1a; MIC拾音→集成运放→Codec ADC→DSP数字信号处理→CPU Audio Engine 信号处理→App 2.硬件 CPU PCH DSP(可选) Codec PA SPKbox MIC…...

机器学习:提取问题答案

模型BERT 任务&#xff1a;提取问题和答案 问题的起始位置和结束位置。 数据集 数据集 DRCDODSQA 先分词&#xff0c;然后tokenize 文章长度是不同的&#xff0c;bert的token的长度有限制&#xff0c;一般是512&#xff0c; self-attention的计算量是 O ( n 2 ) O(n^2) O(n…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...