
HiveSQL
文章平均质量分 61
数据治理
静听山水
Just do it
展开
-
Hive JOIN 优化策略详解
某些 JOIN 键的数据量远高于其他键(如用户 ID 为 123 的订单占全表 50%),导致部分 Reducer 负载过重,任务执行时间显著延长。通过合理组合这些技术,可显著提升 Hive 处理大规模 JOIN 的效率。:若两表按相同键分桶且分桶数相同,可直接在 Map 端匹配桶文件,无需 Shuffle。:通过分桶将相同键的数据物理聚集,减少 JOIN 时的数据移动。按 JOIN 键的哈希值将数据分布到固定数量的桶中。高频 JOIN 操作,且 JOIN 键固定。:每个桶内的数据按 JOIN 键排序。原创 2025-05-10 15:56:12 · 861 阅读 · 0 评论 -
Hive表JOIN性能问
在处理100TB+的Hive表JOIN性能问题时,需采用分层优化策略,结合数据分布特征、存储格式和计算引擎特性。:统计JOIN键的分布频率,定位数据量异常的Key(如某用户订单量占总量50%)。:对两表按JOIN Key分桶,相同Key的数据落入同一桶,避免Shuffle。:利用Bucket Join或SMB Join消除Shuffle。:对倾斜Key添加随机后缀,分散到多个Reducer处理。:自动将小表分发到所有Mapper,避免Reduce阶段。:两表分桶且桶内数据按JOIN Key排序。原创 2025-05-10 15:46:49 · 568 阅读 · 0 评论 -
AST(抽象语法树)与 HBO(基于历史的优化)详解
AST 是 SQL 语句的树形结构表示,由 Hive 解析器生成,反映查询的语法逻辑(如 SELECT、JOIN、WHERE 等操作的嵌套关系)。:在 CBO 基础上,进一步结合历史执行数据(如实际资源消耗)进行动态调整,属于 CBO 的增强版。:HBO 通过收集历史执行数据(如统计信息、执行计划性能)动态优化后续查询,属于。:Hive 优化器通过遍历和修改 AST,重构查询逻辑,生成更高效的计算路径。:基于统计信息估算执行计划成本(如 CPU、I/O、网络开销),选择最优方案。原创 2025-05-10 15:32:40 · 844 阅读 · 0 评论 -
多层嵌套子查询
结合 Hive 日志或第三方工具(如 Apache Atlas、Tez UI)分析历史任务。:将过滤条件尽可能下推到靠近数据源的子查询中,减少中间结果集。:优化器根据统计信息选择更优的 Join 顺序或聚合策略。在优化多层嵌套子查询的 Hive SQL 时,除了常见的。:Hive 通过统计信息(表大小、列基数)优化执行计划。:小表优先 Join,减少数据 Shuffle 量。:根据历史执行数据,增加 Reducer 并行度。:利用分区键过滤无关分区,减少数据扫描量。:识别未下推的谓词或未裁剪的分区。原创 2025-05-10 15:27:56 · 931 阅读 · 0 评论 -
Hive SQL 查询函数手册
Hive SQL 查询函数手册 | Hive SQL 教程 - 盖若转载 2024-11-07 16:54:28 · 65 阅读 · 0 评论 -
Hive:UDTF 函数
在 Apache Hive 中,UDTF(User-Defined Table Generating Functions)是一种特殊的用户定义函数。提供了多种内置的 UDTF 函数,用于处理复杂的字符串和数据结构,以及用户可以编写自定义的 UDTF。explodejson_tupleinline多个值堆叠成多行。原创 2024-11-07 16:16:05 · 752 阅读 · 0 评论 -
Hive综合应用示例
11、hive综合应用示例:json解析、窗口函数应用(连续登录、级联累加、topN)、拉链表应用_hive综合应用示例:json解析、窗口函数应用(连续登录、级联累加、topn)、拉链表应-优快云博客转载 2024-11-07 15:04:43 · 88 阅读 · 0 评论 -
hive的使用示例详解-事务表、视图、物化视图、DDL(数据库、表以及分区)管理详细操作
4、hive的使用示例详解-事务表、视图、物化视图、DDL(数据库、表以及分区)管理详细操作-优快云博客本文详细介绍了Hive中的事务表、视图和物化视图的概念、使用示例及DDL操作。事务表提供了ACID语义,适用于流式数据和缓慢变化维星型模式数据仓库。视图是逻辑存在的表,物化视图是预先计算并存储数据的表,用于查询加速。此外,还涵盖了数据库和表的DDL操作,以及如何管理和查询分区。本文介绍了hive的事务表、视图、物化视图的概念以及使用示例,同时介绍了数据库、表以及分区DDL的详细操作。转载 2024-11-07 14:58:10 · 292 阅读 · 0 评论 -
Hive:explode 和 lateral view
explode函数:用于将数组或映射中的每个元素拆分成独立的行。关键字:用于将 UDTF 的结果与原始表中的每一行进行关联。关键字:用于确保即使 UDTF 没有生成任何行,原始表中的行也会保留在结果集中,只是 UDTF 生成的列会包含 NULL 值。原创 2024-11-07 14:12:17 · 738 阅读 · 0 评论 -
Hive 的数据类型
一组键值对,键必须是唯一的。函数来创建映射和结构体。多个字段组成的数据类型。假设我们有一个用户表。原创 2024-11-07 10:41:29 · 1273 阅读 · 0 评论 -
Hive 的数据存储单元结构
按照数据的粒度顺序,数据存储单元数据被组织为:数据库 Databases数据表 Tables分区 Partitions桶或簇。原创 2024-11-07 10:29:33 · 653 阅读 · 0 评论 -
with函数
例如后面这段,可作为参考。前面的表可以被后面使用。原创 2021-04-07 00:17:13 · 2092 阅读 · 0 评论 -
SQL 移动窗口之preceding and following
最近发现两个特别实用的Hive函数。preceding:向前 following:向后,这两个窗口函数可以实现滑窗求和(指定rows范围)或者指定范围内数据求和(指定range范围)原创 2021-04-18 11:48:23 · 4894 阅读 · 2 评论 -
with子句
上述例子的问题很简单,完全可以用where子句完成,举这个例子只是为了展示一下with子句的用法。有一张学生表student,包括学生id,姓名,年龄,班级,分数字段。当数据来自很多张不同的表格时,原创 2020-10-02 20:21:40 · 351 阅读 · 0 评论 -
字符串函数
【代码】字符串函数。原创 2020-10-02 20:01:07 · 351 阅读 · 0 评论 -
Hive sql 专用窗口函数
自己试着在mysql里做了一遍。数据准备:表salary。原创 2020-10-16 10:21:39 · 801 阅读 · 0 评论 -
生成总行数的数据
一般的,如果我们想统计频数,可以用select count(*) from table。原创 2020-10-16 10:24:45 · 156 阅读 · 0 评论 -
Hive:数学函数
接口格式:double pow(double,double) decimal pow(decimal,decimal)格式:double log(double,double) decimal log(decimal,decimal)格式:double rand(bigint) decimal rand(decimal)格式:double sign(double) decimal sign(decimal)格式:double exp(double) decimal exp(decimal)原创 2020-12-29 23:59:35 · 949 阅读 · 0 评论 -
Hive:字符串函数
函数名称:concat用途:连接字符串格式:string concat(string,string)原创 2020-12-29 23:58:13 · 2273 阅读 · 0 评论 -
grouping sets的用法
(dt),(dt, lead_pro_name),(dt, lead_city_name),这里加了三种情况,分别表示的是每天全国维度,每天省份维度,每天城市维度,如果再加(dt, lead_pro_name,lead_city_name),这个就是和(dt, lead_city_name)一样的情况了,会造成重复,所以写的时候先考虑清楚,是需要将哪几种维度的放在一起。同时产生全国, 省份,城市,区县维度的数据,注意grouping sets里的()为全国维度的数据。原创 2021-02-14 09:51:34 · 11979 阅读 · 0 评论 -
grouping sets、grouping__id、cube、rollup等使用方法
是CUBE的子集,可以实现这样的过程:总的UV->月的UV->月天的UV,没有重复,但是注意grouping__id缺少了2;不同维度都可以统计到,但是到天的维度有两次出现,如果只想保留天的维度的一种明情况,可以在最外面过滤到;数据源:wjda_dev.cookie_cookie5。总的UV->月的UV->天的UV->月天的UV。月天的UV->月的UV->天的UV。月的UV->天的UV->月天的UV。原创 2021-02-28 00:00:11 · 263 阅读 · 0 评论 -
Hive:取每个用户前两次购买日期
【代码】Hive:取每个用户前两次购买日期。原创 2021-03-23 21:05:47 · 184 阅读 · 0 评论 -
substr,instr函数用法
注意参数的顺序,一般第一个参数是列名,第二个参数是具体的某些字符等,判断返回1或者0,返回1时表示后一个参数包含在前一个参数里面。常用于对字符串的处理,主要是判断。第一段返回1,第二段返回0。,比如处理时间格式、文本等。常用于对字符串的处理--原创 2021-05-09 12:34:47 · 1623 阅读 · 2 评论 -
sql分组求和、求平均
原创 2021-05-15 14:26:36 · 11343 阅读 · 0 评论 -
sql的null对求和的影响
综上可见,在单个表有null值时,null对求和没有产生影响;分组没有消失,且id为5的分组求和结果仍为null。结论:总体来说,有null值时对数据求和一般无影响。表2:id_value_test。表1:id_test。原创 2021-07-11 09:25:08 · 1842 阅读 · 0 评论 -
Hive一些sql函数
select cast(date_format('$[YYYY-MM-DD - 1D]', 'u') as int)判断当前时间是几点:select substr(from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss'),12,2)多个文件名同列名去重:select count( distinct case when t1.user_id is not null.原创 2021-09-03 01:08:46 · 992 阅读 · 0 评论 -
数据库建表
decimal(18,4)中的“18”指的是整数部分加小数部分的总长度,也即插入的数字整数部分不能超过“18-4”即14位,否则不能成功插入,会报超出范围的错误。“4”表示小数部分的位数,如果插入的值未指定小数部分或者小数部分不足两位则会自动补到4位小数,若插入的值小数部分超过了4位则会发生截断,截取前4位小数。原创 2021-09-07 14:56:19 · 150 阅读 · 0 评论 -
Hive解析json(get_json_object)
get_json_object(string json_string, string path)说明: 第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;如果输入的json字符串无效,那么返回NULL。每次只能返回一个数据项。举例: data 为 test表中的字段,数据结构如下: data ={ "store":...【Hive】解析json(get_json_object)_喜东东的博客-优快云博客。转载 2021-09-12 10:56:29 · 650 阅读 · 0 评论 -
Hive_Hive 排序及优化 order by , sort by, distribute by, cluster by
Hive 提供了多重排序语句,我们这里对这几种排序方法做一解析,并进行测试编排如下: 试验场景 Hive 中的 ORDER BY 与其不足 Hive 中的 SORT BY,DISTRIBUTE BY Hive 中的CLUSTER BY 与其不足 完成相同功能的Job 执行时长对比实验场景:我们创建了一个按天分区的分区...区别:内部表数据由Hive自身管理,外部表数据由HDFS管理;一、Hive的和RDMBS的区别:二、Hive中数据倾斜问题: 1、数据倾斜的原因:(1)、key分布不均匀。转载 2021-09-16 23:52:49 · 273 阅读 · 0 评论 -
sql中用explode函数扩充数据
本文主要介绍数据扩充的思路,比如我们在实际分析中给数据表添加字段:近7天销量,常规思路即sum([sale_cnt]) over(partition by [sku_id] order by [ord_date] asc rows 6 preceding)。--- 解决办法:以sku维表作为主表,根据销售考核周期给每个sku定相同的最小出现日期和最大出现日期,比如:min_date统一等于。--- 解决办法:以销售事实表作为主表,求出每个sku出现的最大日期,并在最大日期的基础上+6d,然后再进行扩充;原创 2021-12-12 16:00:27 · 7655 阅读 · 0 评论 -
Hive中使用Map类型
字段说明:stu_id,class_id都是唯一不重复的,class_score字段的内容是maping类型,如{"语文":"80","数学":"90","英语":"95"},现需取出第1个班语文成绩前10名学生及各自的语文成绩。最近遇到的一个问题,例如:有一张表A,表头是stu_id,class_id,class_score。原创 2022-05-27 21:10:35 · 690 阅读 · 0 评论 -
explode
lateral view explode(array):将某列字段切分成多列,其他字段均不变。这在需要同时获取元素及其在数组或映射中位置的情况下非常有用。lateral view posexplode(array):和上面一样行转列,但是增加了顺序。explode(array):将一行数组转成多列,只支持单个字段的行转列。不仅能够将数组或映射中的每个元素拆分成独立的行,还能为每个生成的行添加一个。是 Apache Hive 中的一个内置函数,它扩展了。如果只对一个字段转换,那么其他字段不变。转载 2022-08-10 00:38:09 · 546 阅读 · 0 评论