- 博客(536)
- 收藏
- 关注
原创 根据什么依据建立事实表和维度表?
其核心思想是将数据分为“事实”(业务过程发生的可度量事件)和“维度”(描述事实的背景上下文)。首先深入理解业务,然后确定最细的粒度,维度自然围绕粒度展开,事实则是该粒度上可度量的结果。· 外键集合:由多个连接到维度表的外键组成,这些外键共同构成事实表的主键(在事务事实表中),称为代理键。· 可选的退化维度:一些简单的、没有其他属性的描述性信息,如订单号、发票号,可以直接放在事实表中。· 原则:选择最原子级的、不可再分的数据粒度。事实表记录了业务过程发生的可度量的数值,通常是数字型的、可加的数据。
2025-11-19 12:22:17
815
原创 索引扫描和全表扫描各自的优缺点
数据库的查询优化器非常智能,它会根据统计信息(如表的行数、数据分布、索引的选择性等)来估算每种执行计划的成本(Cost),并选择它认为成本最低的那个。总之,索引扫描和全表扫描没有绝对的好坏,只有是否适合当前的查询场景。适用场景 查询返回少量数据、高选择性条件、需要排序 查询返回大量数据(>15-30%)、低选择性条件。我们来详细解析一下索引扫描和全表扫描各自的优缺点。I/O类型 随机I/O为主(回表时),但读取索引本身是顺序I/O 顺序I/O。· 高选择性 + 索引存在 → 通常选择索引扫描。
2025-11-19 12:08:51
383
原创 Hive中什么情况建立分区表,什么情况下建立分桶表
特性分区表分桶表核心目的快速过滤,避免全表扫描高效连接、聚合、抽样数据组织方式按目录存储(每个分区一个目录)按文件存储(每个桶一个文件)优化场景WHERE条件过滤JOINGROUP BY粒度粗(目录级)细(文件级)选择依据通常是离散的、常用的维度通常是需要连接或聚合的度量/键结合使用:分区 + 分桶在实际生产中,经常会结合使用两者,以达到最优性能。一个超大型的网站事件日志表...PARTITIONED BY (dt STRING) -- 一级分区:按天,用于快速时间范围过滤。
2025-11-14 13:11:23
458
原创 count(*) 和 count(1)和count(列名)区别?
(1)如果列为主键,count(列名)效率优于count(1);如果列不为主键,count(1)效率优于count(列名);)count(1)都不会去过滤空值,但count(列名)就有区别了,因为count(列名)会去过滤空值。如果表有多列,且不存在主键,则count(1)效率优于count((2)如果表中存在主键,count(主键列名)效率最优;(3)如果表中只有一列,则count()之间没有区别,因为count(count(1)和count(
2025-11-13 11:21:41
242
原创 大数据如何对数据去重?
方案适用场景优点缺点distinct()整行完全重复简单直观性能最差,Shuffle开销大按指定字段去重灵活,可指定字段和保留策略需要Shuffle,数据量大时慢groupBy聚合去重同时需聚合功能强大,一箭双雕需要Shuffle,逻辑可能复杂布隆过滤器超大规模数据预处理内存占用小,查询极快有误判率,是概率性去重分桶表频繁按某字段去重避免Shuffle,性能极高需要预先规划并创建表数据湖格式增量、更新式去重支持ACID,高效Upsert架构相对复杂选择建议:首选。
2025-11-13 11:15:21
421
原创 何时使用存储过程及优缺点分析
场景推荐使用存储过程复杂事务(如金融交易)强烈推荐批量数据处理/ETL强烈推荐高性能要求(预编译,减少网络交互)推荐权限和安全控制推荐为多个应用提供统一数据API可以考虑简单的CRUD操作不推荐,用ORM或简单SQL更好快速迭代的业务逻辑不推荐,放在应用层更灵活现代最佳实践是:将存储过程视为数据库提供的一种“能力”,而不是存放业务逻辑的主要场所。用它来处理数据密集、性能敏感、事务关键型的任务,而将核心的、易变的业务规则留在应用程序中。
2025-11-13 10:33:51
307
原创 在左连接里面,如果使用and筛选和用where筛选,区别是什么?
在ON子句中使用AND:这个条件是在连接时使用的。它会影响右表哪些记录可以匹配到左表,但不会影响左表主记录的返回。如果右表没有匹配的记录,左表的记录仍然会返回,只是右表部分为NULL。在WHERE子句中使用:这个条件是在连接完成后的结果集上使用的。它会过滤最终的结果集。如果WHERE条件过滤掉了某条左表记录(例如,因为右表的某个字段为NULL),那么这条左表记录将不会出现在最终结果中。特性(用于左连接)WHERE ...作用阶段在连接过程中在连接完成后对左表的影响不影响左表主记录的返回。
2025-11-13 10:07:04
262
原创 Oracle LISTAGG函数详解
特性描述功能将多行数据合并成一个字符串。类型聚合函数,也可作为分析函数使用。核心语法LISTAGG(列, [分隔符]) WITHIN GROUP (ORDER BY 排序列)主要用途制作逗号分隔列表、生成报表、数据拼接。常见问题结果字符串超长(ORA-01489)。解决方案使用(12c R2+)或在应用层处理。去重在 Oracle 19c+ 中可直接使用。LISTAGG是一个非常实用的函数,特别适合在制作报表、数据导出或需要将关系型数据扁平化为字符串的场景中使用。希望这个讲解对你有帮助!
2025-11-13 09:52:16
315
原创 大数据开发与Java后端开发对比
Java后端开发大数据开发适合人群喜欢钻研业务逻辑,对系统架构、高并发、高性能服务设计感兴趣,追求技术的深度和稳定性。对海量数据处理、分布式系统原理感兴趣,喜欢从数据中挖掘价值,不排斥与SQL、脚本、各种框架打交道。职业特点市场需求量大,岗位多,技术体系相对稳定,成熟。技术迭代快,新兴框架多,门槛相对较高,薪资也普遍较高。入门门槛相对较低,路径清晰(Java基础 -> Spring -> 微服务 -> 项目)。相对较高,需要学习的组件多,对计算机基础(如Linux、网络、分布式理论)要求更高。
2025-11-07 11:21:40
549
原创 COUNT() OVER()总结
保留明细:不像GROUP BY那样折叠数据灵活分组:通过实现多维度分析支持排序:通过ORDER BY实现累计计算窗口控制:可以定义更复杂的计算范围(如最近N行)这使得它成为数据分析、报表制作和复杂业务逻辑实现的利器。
2025-11-06 09:06:16
670
原创 count()和sum()区别
特性COUNT()SUM()计算目标计数- 统计有多少个(行或项)求和- 计算数值的总和处理对象任何类型的列,或使用只能是数值类型的列(如 INT, BIGINT, FLOAT, DOUBLE等)对NULL值的处理忽略 NULLCOUNT(*)不忽略 NULL完全忽略 NULL 值返回值一个整数(BIGINT)与输入列相同或更宽的数字类型当你需要知道“有多少个?时,用 COUNT()。用COUNT(*)数总行数。用数该列非NULL值的个数。当你需要知道“总数是多少?
2025-11-05 18:04:25
342
原创 SQL中WITH AS列名定义方法详解
这是最常用、最简单的方法。你直接在 CTE 的子查询SELECT语句中,通过列别名的方式来定义列名。SELECT...假设我们有一个employees表,包含first_namelast_namesalary。SELECTfirst_name AS 名字,last_name AS 姓氏,salary AS 月薪,salary * 12 AS 年薪 -- 在这里通过 AS 定义了列名SELECT 名字, 年薪ORDER BY 年薪 DESC;CTE 的名称是。CTE 的列名分别是。
2025-11-05 17:43:28
354
原创 ALTER TABLE t_detail RECOVER PARTITIONS; REFRESH t_detail; 上面什么意思?
命令主要适用场景操作对象目的Hive/ 兼容Hive的Spark将文件系统中实际存在的分区,注册到Hive元数据库。Spark SQLSpark的元数据缓存清除Spark缓存的表元数据,强制其从元数据库重新加载。通常的配合使用流程:第一步:通过非标准Hive的方式(如手动HDFS操作、Spark直接写入)向表t_detail添加了新的分区数据。第二步:在Hive或Spark中执行。这确保了Hive Metastore中有了这些新分区的记录。第三步:在Spark会话中执行。
2025-11-03 11:40:27
359
原创 msck repair table 这个指令是干什么的?(Hive表分区修复命令)
在 Hive 中,为了提升查询性能,我们经常将表进行分区。分区通常根据日期、地区等维度进行划分。data.filedata.filedata.file在这里,dt是分区字段。表的每个分区都对应文件系统上的一个目录。特性描述命令全称核心功能修复表元数据,将文件系统上新增的分区自动注册到 Hive Metastore。典型场景通过 Hive 之外的手段(如手动上传、Spark作业、Flume等)向分区表添加了数据后,使 Hive 能够查询到这些新数据。替代命令(手动添加单个分区)
2025-11-03 09:10:16
963
原创 Hive SQL与传统SQL对比分析
传统 SQL 数据库 (如 MySQL)Hive角色快餐店大型中央厨房工作快速为单个顾客提供一份汉堡(处理单个订单)为全市所有门店准备一整天的食材(处理全天批量数据)特点快标准化交互式慢批量分析式操作来了一个订单,马上做一份(INSERT),顾客要改订单,马上改(UPDATE)每天早上一次性接收所有农场的食材(LOAD DATA),然后开始批量生产半成品(ETL)结论Hive SQL 不是传统 SQL 的替代品,而是在不同场景下解决不同问题的另一种工具。随着技术的发展,出现了像。
2025-11-01 16:28:07
467
原创 Linux中crontab指令详解
crontab(代表 “cron table”)是一个用于安装、卸载、列出和编辑cron job的命令。而cron是 Linux 系统中最常用的任务调度程序,它可以在指定的时间、日期或间隔自动地执行预定的命令或脚本(这些任务就称为 cron job)。简单来说,crontab就是用来设置和管理定时任务的工具。命令/操作功能描述crontab -e编辑当前用户的定时任务列表crontab -l查看当前用户的定时任务列表crontab -r删除当前用户的所有定时任务任务条目的基本格式。
2025-11-01 16:27:49
680
原创 hive中小文件处理方法
通常指大小远小于 HDFS 块大小(默认 128MB 或 256MB)的文件。例如,一个只有几MB甚至几KB的文件。场景推荐方法设计阶段使用 ORC/Parquet 格式;合理设计分区和分桶策略。数据写入时在INSERT语句中使用控制 Reduce 数量;在 Spark 中使用coalesce。对已有 ORC 表治理首选,高效且资源消耗小。对其他格式表治理使用查询。冷数据归档考虑使用创建 HAR 文件。自动化治理编写定期脚本(如使用 Hive SQL 或 Spark),在夜间自动合并指定表或分区。
2025-11-01 16:27:31
945
原创 hive中小文件产生的原因和解决办法总结
原因类别具体场景结果数据写入频繁执行INSERT语句每次写入都产生新的文件数据源LOAD DATA导入现有小文件原样复制小文件问题分区动态分区且分区键基数高产生分区数 * Reduce Task 数个小文件计算引擎Reduce Task 数量设置过多产生大量小输出文件表设计分桶数设置过多产生大量小的桶文件小文件的影响元数据压力:HDFS NameNode 需要维护所有文件的元数据信息,大量小文件会耗尽 NameNode 的内存。查询性能低下。
2025-11-01 16:26:36
676
原创 大数据中怎么提取数据,数据抽取方式
数据抽取是指从各种异构数据源中收集、获取数据,并将其导入到数据仓库、数据湖或大数据平台(如Hadoop、Spark集群)中的过程。其目的是为后续的数据清洗、转换、集成、分析和应用做准备。抽取方式核心思想优点缺点适用场景全量抽取每次抽全部简单,一致性好效率低,资源浪费数据量小,初始化加载增量抽取只抽变化量效率高,节省资源逻辑复杂,需识别变化大数据环境下的主流方式实时流抽取持续抽变化延迟极低,实时性强技术栈复杂,运维成本高实时监控、风控、推荐在实际的大数据项目中,通常会混合使用。
2025-11-01 16:26:15
726
原创 hive中的数据插入流程是怎么样的
特性LOAD DATA本质文件移动/复制分布式计算作业小型计算作业速度非常快慢(取决于计算复杂度)非常慢(相对量级)数据转换无有,可通过 SELECT 实现无产生小文件不会(除非加载很多小文件)可能(取决于 Reduce 数量)极易产生主要用途初始数据加载ETL 数据处理管道测试、初始化少量数据大数据量加载首选LOAD DATA(如果数据已准备好)或(如果需要转换)。绝对避免在生产环境中使用循环语句频繁调用。使用时,注意调整 Reduce 任务数量,以避免产生过多小文件。可以通过。
2025-11-01 16:25:51
699
原创 Hive高效数据更新方法总结
方法适用场景优点缺点推荐度批量更新全表或分区性能最优,Hive原生支持需要重写整个数据集⭐⭐⭐⭐⭐首选MERGE INTO需要符合ACID的精确行级更新语法灵活,支持行级更新删除配置复杂,性能有开销,需Hive 2.2+⭐⭐⭐次选增量表+视图频繁零散更新,查询可接受延迟写入快,架构灵活查询慢,逻辑复杂,非实时⭐⭐特定场景给你的最终建议:设计表时优先使用分区:这是实施高效更新策略的基础。绝大多数更新场景都可以通过“重写分区”来解决。首选。
2025-11-01 16:25:26
757
原创 hive的sql语句是怎么运行的
步骤组件职责1. 提交接收用户查询2-5. 编译与优化编译器 + 元存储解析SQL、验证元数据、生成并优化逻辑/物理计划6. 执行执行引擎 + YARN分布式执行任务(MapReduce/Tez/Spark)7. 取结果Driver获取结果并返回给UIHive 本身不存储和处理数据:数据存储在 HDFS 上,计算由 MapReduce/Tez/Spark 完成。Hive 只是一个“翻译官”和“调度员”。元数据是核心这样的语句并不在 HDFS 上创建数据,只是在Metastore。
2025-11-01 16:25:04
526
原创 Impala compute incremental stats 增量统计信息计算 这个指令什么作用?
这是这个命令最关键的特性,特别是对于大型分区表。非增量方式:对于普通表(非分区表)或使用(非增量)命令,Impala 会重新扫描整个表的所有数据来收集统计信息。对于一张巨大的表,这非常耗时和资源。增量方式:对于分区表,会:维护每个分区的统计信息。当你只添加了新的分区或更新了某些分区的数据时,你只需要对新增加或更改的分区进行计算。Impala 只会扫描那些新增或发生变化的分区,而不会去触碰那些没有变化的分区。这大大减少了计算统计信息所需的时间和资源。
2025-10-30 12:05:02
814
原创 Impala INVALIDATE METADATA命令和REFRESH区别和应用场景?
是“表结构”级别的刷新。它关心的是表的蓝图是否改变了。REFRESH:是“数据文件”级别的刷新。它关心的是表这个房子里的物品是否改变了,但房子结构没变。首选REFRESH:在满足条件的情况下,总是优先使用REFRESH,因为它更轻量、更快速,且是同步的,行为可预测。慎用无表名的(不带表名)会刷新整个集群所有表的元数据,在元数据很多的集群上开销巨大,应避免在生产环境中使用。分区表与非分区表对于分区表REFRESH能高效处理已有分区内的数据变更。对于非分区表,数据文件的任何增删都建议使用。
2025-10-29 09:34:13
507
原创 Impala中INVALIDATE METADATA命令详解
首先,要理解,必须先明白什么是“元数据”。在 Impala 中,元数据表结构:表名、列名、列数据类型、分区信息等。物理文件信息:表数据在 HDFS 或对象存储(如 S3)上的具体位置、文件格式(Parquet, ORC, Text 等)。表统计信息:行数、文件大小、列的最大最小值等(用于查询优化)。Impala 使用一个名为的组件来集中管理和缓存这些元数据。所有 Impala 节点(Executor)都从 Catalog Service 获取元数据的缓存副本,以高效地执行查询。
2025-10-29 09:12:30
689
原创 Impala中LEFT和RIGHT函数用法详解
函数描述等价于从字符串开头截取从字符串末尾截取这两个是 Impala 中进行字符串操作时最基础且最常用的函数之一。
2025-10-29 09:08:31
390
原创 Impala中REFRESH和COMPUTE STATS的作用
简单来说,这两条命令共同确保了 Impala 查询优化器能够基于最新、最准确的元数据来生成最高效的查询计划。REFRESH:解决“数据是否最新?的问题。它更新的是表的元数据(表结构、分区列表等),告诉 Impala 底层数据已经发生了变化。:解决“数据是什么样的?的问题。它收集的是表的统计信息(行数、数据分布等),为查询优化器提供决策依据。特性REFRESH目标同步元数据收集统计信息解决的问题数据更新后,Impala 感知不到查询优化器因信息不足而生成低效计划影响的层面表的结构(分区、文件)
2025-10-27 19:39:35
599
原创 集群时间同步方案详解
方案精度优点缺点适用场景公共NTP毫秒级简单,免费精度低,不安全,不可靠个人、小型非关键应用自建NTP亚毫秒级精度高,安全,可控需要自行部署维护企业标准方案,数据中心,私有云PTP微秒/纳秒级精度极高需要专用硬件,成本高,复杂金融、电信、工业控制NTS同NTP安全加密需要服务器和客户端支持对安全要求高的公网NTP同步K8s节点同步同宿主机云原生最佳实践依赖宿主机配置所有Kubernetes集群。
2025-10-26 15:49:10
789
原创 spark-submit总结
是你从“编写代码”到“生产运行”的桥梁。在银行项目中,熟练使用及其各种参数进行资源调优配置管理和依赖处理,是保证Spark应用稳定、高效运行的关键技能。建议你将常用的提交命令写成一个Shell脚本,方便重复执行和版本管理。
2025-10-26 05:05:52
775
原创 【SQL练习】员工薪资占比与部门排名查询
有一个员工薪资表,包括员工姓名、所属部门、薪资 3列,求以下指标:1、求出每个员工占所在部门整体薪资的占比;2、求出每个部门Top3 工资排名的员工;写出Oracle SQL。
2025-10-24 12:23:31
127
原创 大数据中,Parquet,Avro,ORC这三种存储格式有什么区别?
性能优先选Parquet:现代数据架构的首选,平衡了性能、功能和生态支持兼容性选Avro:Schema演进需求强烈的场景,数据交换和流处理Hive生态选ORC:以Hive为中心的数据仓库,需要ACID事务原始层:Avro(Schema灵活)明细层:Parquet(分析友好)汇总层:ORC(存储高效)
2025-10-24 12:04:57
896
原创 拉链表实现方式详解
拉链表是一种数据库表设计模式,它通过在记录中增加两个字段(start_date和end_date)来记录一条数据在其生命周期中不同时间段的状态。start_date:表示该条记录生命周期的开始日期。end_date:表示该条记录生命周期的结束日期。通常,如果这条记录是当前的最新状态,我们会给它一个极大的值(如9999-12-31)或NULL,表示“至今有效”。核心价值:它既能记录历史(某个时间点数据的状态是怎样的),又能节省存储空间(相比于每天一份全量快照,它只保存状态变化的版本)。优点:节省存储。
2025-10-23 21:29:33
838
原创 Linux su与sudo作用与区别详解
su:用于切换用户。默认切换到 root 用户,需要输入目标用户的密码。sudo:用于以其他用户(默认是 root)的身份执行一条命令。需要输入当前用户自己的密码(前提是该用户已被授权)。如果你只是需要临时执行一条管理命令,永远首选sudo。它是更安全、更符合现代管理理念的工具。如果你确实需要在一个会话中连续执行大量需要 root 权限的操作,并且你的系统允许,那么可以使用su -或sudo -i(后者是通过sudo启动一个 root shell)。简单来说:sudo。
2025-10-23 16:33:16
534
原创 Impala中CASE WHEN用法详解
CASE WHEN场景推荐形式示例简单值匹配简单CASE复杂条件判断搜索CASE条件聚合在聚合函数中使用搜索CASE数据清洗/转换搜索CASE熟练掌握CASE WHEN能极大地增强你进行数据转换、清洗和业务逻辑计算的能力。
2025-10-23 08:32:24
340
原创 Hadoop数据倾斜处理策略详解
默认的HashPartitioner会将同一个Key的数据分到同一个Reducer。如果某个Key数据量巨大,自定义分区可以将其随机分散到多个Reducer上。场景:某个特定热点Key(如某个大V的用户ID)数据量巨大,且不能被过滤。方案修改Key:为热点Key增加随机前缀(盐化),如将key变成key_1key_2, …key_n。自定义分区器:根据新的随机Key(或原Key)进行分区,确保处理同一个原Key的不同随机Key的数据能被分到不同的Reducer。
2025-10-22 22:05:31
278
原创 【SQL练习】一个简单SQL面试题
有一个员工入职的日志表,包括员工id、入职日期 2列,求出每年入职人数、历史截止每年的入职人数,用Oracle SQL写出来根据您的需求,可以使用Oracle SQL的窗口函数来实现。
2025-10-22 18:03:56
151
原创 Spark RDD依赖类型解析
窄依赖:像“工厂流水线”,数据在原地被加工,高效且独立。宽依赖:像“物流中转站”,需要把全国(所有分区)的货物(数据)根据目的地(Key)重新分拣和运输,耗时耗力。理解这两种依赖关系,是理解 Spark 内部执行机制和进行有效性能调优的基石。当你看到一个 Spark 作业的 DAG 可视化图时,其中被宽依赖分隔开的一个个框,就是不同的 Stage。
2025-10-22 07:11:21
590
原创 大数据-项目会有哪些复杂的查询?复杂查询的定位和解决方案?
我们项目中最复杂的查询主要是多维度动态组合的群体圈选和大规模群体的画像分析。对于这类查询,我们不会等它慢了再去优化,而是在架构设计上就采用‘预计算’的思路。首先,在DWS层构建面向分析的用户宽表,将复杂的关联和聚合提前完成。然后,将宽表数据同步到这类OLAP引擎中,利用其列式存储和索引能力,将复杂的即席查询速度从分钟级提升到秒级。“当然,我们也会配合使用EXPLAIN分析执行计划、优化SQL写法、调整Spark参数等手段作为辅助方案。
2025-10-21 19:37:47
624
原创 SQL中WHERE与ON的区别详解
根本区别ON是“连接器”,负责匹配。WHERE是“过滤器”,负责筛选。关键影响在外连接)中,ON和WHERE的放置会导致完全不同的结果。如果你想在保留主表(如左表)所有记录的同时,对从表(如右表)的连接行为进行限制,请将条件放在ON中。如果你希望对最终连接好的整个结果集进行过滤,请将条件放在WHERE中。最佳实践连接条件永远放在ON子句中。普通的行级过滤条件放在WHERE子句中。这样写逻辑清晰,易于理解和维护,也能避免在外连接中产生意想不到的结果。
2025-10-21 11:00:42
267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅