- 博客(836)
- 收藏
- 关注
原创 映射表详解
是一种用于存储不同系统或上下文中实体之间对应关系的表。:不同系统使用不同的唯一标识符(如用户ID、产品编码)。:实体之间存在复杂关联(如用户与用户组的归属)。:确保映射关系100%正确(可通过自动化校验)。通过ETL工具监听源系统变更,实时更新映射表。:支持动态新增映射规则(如新旧编码交替)。带时间的映射:增加时间字段(如。:合并异构数据源时统一标识符。映射表是数据整合和系统交互中的。:通过索引和分区优化查询性能。简单映射:联合主键(如。:对映射关系打标签(如。:定期清理过期映射(如。
2025-05-11 01:34:33
366
原创 桥接表详解
桥接表是解决多对多关系的标准方法,核心设计步骤:创建基础表(如student和course创建桥接表(如),通过外键关联基础表。在桥接表中存储额外关联信息(如成绩、时间等)。用户与用户组的关联商品与多个标签的关联医生与患者的诊疗关系以下是一个简单的桥接表示例,用的场景来说明桥接表的作用。学生(Student)可以选修多门课程(Course)。一门课程(Course)也可以被多个学生选修。这是一个典型的,需要用桥接表()来管理学生和课程的关联关系。
2025-05-11 01:28:11
178
原创 缓慢变化维和周期变化维
追踪商品促销标签(如“双11大促”“618预热”)的变化历史,支持分析不同促销期的转化率差异。通过定期维护(如归档、索引优化)和业务对齐(如淘汰无效周期),可避免维度退化,提升数仓健壮性。的方式变化(如客户地址变更、产品分类调整)。结合SCD Type 2与周期标记,处理既有缓慢变化又有周期性调整的属性。混合场景中可结合代理键、时间范围和周期字段,平衡历史追踪与查询效率。:将低频周期维度合并为“其他”类别(如合并季度销售区域为年度)。:删除不再使用的周期版本(如5年前的价格表)。),每条记录绑定特定周期。
2025-05-11 00:37:36
393
原创 维度退化及其处理方法解析
类似问题可出现在商品类目(过时分类)、时间维度(分钟级粒度未被使用)等场景中,需结合具体业务动态调整。:该维度无法有效区分用户群体,分析时导致“维度分裂”(大量查询结果集中在APP渠道)。:90%的用户注册渠道标记为“APP”(早期主推APP注册,其他渠道流量极少)。:解决单一维度区分度低的问题(如“APP_VIP用户”可能复购率更高)。:渠道分类混乱(如“H5”被拆分为“H5-促销页”“H5-广告页”)。:部分渠道已下线(如“PC端注册”),但字段仍保留旧值。:将渠道属性与其他字段组合,生成衍生维度。
2025-05-11 00:29:51
414
原创 Pandas 内存不足 或 UDF 执行慢
针对 Pandas 内存不足 和 UDF(用户自定义函数)执行慢 的问题,以下是系统性优化方案,结合内存管理、计算加速和代码重构技巧:压缩数据类型:减少数值型数据内存占用。 效果:内存占用减少 50%~70%。稀疏数据存储:对高稀疏度列(如大量0或NaN)使用稀疏矩阵。 2. 分块处理(Chunk Processing) 流式读取大数据文件:避免全量加载到内存。 3. 内存释放 手动释放无用对象: 避免深拷贝:使用 或引用传递减少复制。
2025-05-10 16:02:00
542
原创 Hive JOIN 优化策略详解
某些 JOIN 键的数据量远高于其他键(如用户 ID 为 123 的订单占全表 50%),导致部分 Reducer 负载过重,任务执行时间显著延长。通过合理组合这些技术,可显著提升 Hive 处理大规模 JOIN 的效率。:若两表按相同键分桶且分桶数相同,可直接在 Map 端匹配桶文件,无需 Shuffle。:通过分桶将相同键的数据物理聚集,减少 JOIN 时的数据移动。按 JOIN 键的哈希值将数据分布到固定数量的桶中。高频 JOIN 操作,且 JOIN 键固定。:每个桶内的数据按 JOIN 键排序。
2025-05-10 15:56:12
440
原创 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
391
原创 AST(抽象语法树)与 HBO(基于历史的优化)详解
AST 是 SQL 语句的树形结构表示,由 Hive 解析器生成,反映查询的语法逻辑(如 SELECT、JOIN、WHERE 等操作的嵌套关系)。:在 CBO 基础上,进一步结合历史执行数据(如实际资源消耗)进行动态调整,属于 CBO 的增强版。:HBO 通过收集历史执行数据(如统计信息、执行计划性能)动态优化后续查询,属于。:Hive 优化器通过遍历和修改 AST,重构查询逻辑,生成更高效的计算路径。:基于统计信息估算执行计划成本(如 CPU、I/O、网络开销),选择最优方案。
2025-05-10 15:32:40
523
原创 多层嵌套子查询
结合 Hive 日志或第三方工具(如 Apache Atlas、Tez UI)分析历史任务。:将过滤条件尽可能下推到靠近数据源的子查询中,减少中间结果集。:优化器根据统计信息选择更优的 Join 顺序或聚合策略。在优化多层嵌套子查询的 Hive SQL 时,除了常见的。:Hive 通过统计信息(表大小、列基数)优化执行计划。:小表优先 Join,减少数据 Shuffle 量。:根据历史执行数据,增加 Reducer 并行度。:利用分区键过滤无关分区,减少数据扫描量。:识别未下推的谓词或未裁剪的分区。
2025-05-10 15:27:56
596
原创 在 Flink + Kafka 实时数仓中,如何确保端到端的 Exactly-Once
定期将算子的状态(State)和 Kafka 消费偏移量(Offset)持久化到可靠存储(如 HDFS、S3)。:Flink 的 Kafka Producer 在 Checkpoint 完成时提交事务,确保数据仅写入一次。的协同机制,可以实现从 Kafka 消费到 Kafka 写入的端到端 Exactly-Once。:从 Kafka 读取交易流水,实时计算用户交易频次(1分钟内超过10次触发风控),结果写回 Kafka。:在 Checkpoint 完成时提交事务,确保数据仅写入一次。
2025-05-10 15:04:54
726
原创 Kimball
其维度建模思想至今仍广泛应用于现代数据平台(如Snowflake、BigQuery)和BI工具(如Tableau、Power BI)的设计中。它旨在通过简单、高效的数据结构设计,支持业务用户快速、直观地分析数据。:通过迭代开发,优先实现关键业务场景的数据模型,而非一次性构建庞大的企业级仓库。JOIN 产品维度表 ON 销售事实表.产品ID = 产品维度表.产品ID。:从用户的业务分析场景(如销售分析、库存监控)出发设计数据模型。数据冗余:维度表可能包含重复信息(如地区名称)。产品维度:品类、品牌、SKU。
2025-05-10 13:00:12
267
原创 Flink和Spark的选型
(如Keyed State、Operator State),支持精确一次(Exactly-Once)语义,适合复杂事件处理(CEP)或需维护长会话状态的任务(如用户行为分析)。(Spark Streaming)或连续处理(Structured Streaming),延迟通常在秒级,适合准实时场景或批处理为主的混合负载(如T+1报表、离线ETL)。某电商平台需实时分析用户点击流数据,检测异常行为(如刷单),要求延迟低于500ms,且需维护用户会话状态(如30分钟无活动则关闭会话)。的流处理优先架构,支持。
2025-05-10 12:54:40
382
原创 One Data理论
阿里巴巴的 “OneData”理论 是其数据中台战略的核心方法论之一,旨在解决企业数据分散、标准不统一、重复开发等问题,通过构建统一的数据资产体系,实现数据的标准化、资产化和服务化,最终驱动业务高效创新。“OneData”理论的核心内容和实践方式:不同企业或技术框架中的定义可能存在差异,但通常情况下,ONE ID、ONE Model、ONE Service 确实是其核心组成部分。以下是更清晰的解释:阿里巴巴的“OneData”本质是通过标准化、资产化、服务化重构企业数据体系,使其从“成本中心”转变为“价值中
2025-05-10 10:07:57
254
原创 阿里云的日志服务
SLS通常指的是“Serverless Logging Service” 或者是阿里云的日志服务(Log Service)。在云计算和大数据处理领域中,尤其是在提到阿里云时,SLS往往指的是阿里云的日志服务。总之,阿里云日志服务是一个强大的工具,适用于需要处理和分析大规模日志数据的企业和个人开发者。通过简化日志管理流程,它有助于提高运维效率、优化性能监控,并支持基于日志数据的商业智能决策。是一个完全托管的日志大数据平台,提供从日志采集、消费到查询分析、可视化、告警以及投递等一站式服务。
2025-01-04 08:35:29
595
原创 Linux排查cpu运行负载过高
如果你知道某些特定的用户或命令可能有问题,可以过滤这些。这个命令将列出 CPU 使用率最高的前10个进程。列,找出占用 CPU 最多的进程。) 等不同类型的 CPU 使用率。操作系统内核使用的 CPU 时间。先输入top再输入1,查看。应用程序使用的 CPU 时间。每一行显示了用户空间 (
2024-12-15 13:16:33
866
原创 supervisor使用详解
Supervisor 是一个用 Python 编写的客户端/服务器系统,它允许用户在类 UNIX 操作系统(如 Linux)上监控和控制进程。Supervisor 并不是一个分布式调度框架,而是一个进程管理工具,它可以用来启动、停止和重启程序,并且可以自动重启崩溃的程序,确保它们保持运行状态。管理多个子进程按照配置文件简单的 Web 界面用于查看所有受管进程。
2024-12-14 22:14:23
636
原创 .idea
idea/文件夹下的文件和目录主要用于存储 JetBrains IDE(如 PyCharm、IntelliJ IDEA 等)的项目配置。
2024-12-12 10:31:04
672
原创 __pycache__
是 Python 解释器自动生成的一个目录,用于存储编译后的 Python字节码文件(.pyc 文件)。这些字节码文件是 Python 源代码(.py 文件)经过编译后生成的中间表示形式。使用.pyc文件的主要目的是为了提高程序的。
2024-12-12 09:17:41
438
原创 Flink CDC
Flink CDC(变更数据捕获)是一种技术,它允许实时地捕获和处理数据库中的变化。通过 Flink CDC,可以从支持的数据库中读取更改记录(如插入、更新、删除操作),并将这些更改流式传输到其他系统或进行实时分析。这项技术对于构建实时数据管道、实现数据同步以及维护多个数据源之间的一致性非常有用。
2024-12-10 10:15:01
740
原创 Flink SQL作业快速入门
这段代码是使用Apache Flink SQL来处理来自阿里云日志服务(SLS)的GitHub事件数据。它创建了一个临时表gh_event,该表连接到SLS以读取GitHub事件流,并设置了一些Flink作业的配置参数。最后,它执行了一个查询,用于计算当天获得新星标(star)最多的前10个GitHub仓库。
2024-12-09 16:49:03
587
原创 Python中的封装(Encapsulation)思想
封装的核心思想是将对象的数据(属性)和行为(方法)打包在一起,并限制外界对它们的直接访问。是 Python 中的一个内置装饰器,它允许将类的方法定义为属性,从而可以像访问类的属性一样访问这些方法,而不需要使用括号调用它们。:封装和多态相辅相成,封装允许将实现隐藏,而多态允许对象在运行时决定具体调用的实现,使得代码的扩展性更强。:虽然双下划线的属性和方法是“私有”的,但实际上 Python 只是对它们的名称进行了重整。:封装可以结合继承一起使用,通过子类继承父类的公有方法和受保护的属性,封装性依然得以保持。
2024-12-04 13:59:57
684
原创 ProcessPoolExecutor怎么使用?
虽然模块提供了更多灵活的进程控制功能,但简化了多进程并发的实现,特别适合处理大量 CPU 密集型任务。它的使用十分广泛,尤其在需要同时管理多个任务结果时,Future对象极大地降低了代码的复杂性。
2024-12-04 13:44:55
444
原创 multiprocessing模块怎么使用?
Python 的模块为我们提供了丰富的工具来处理多进程编程中的各种需求。从基础的Process类,到高级的进程间通信、同步机制,每种工具都有其适用的场景。Process:创建和管理独立进程。Pool:通过进程池并发执行多个任务。Queue和Pipe:实现进程间的安全通信。Lock和Semaphore:用于进程间的同步和共享资源控制。ValueArray和Manager:在进程间共享数据。
2024-12-04 11:36:38
695
原创 线程池与进程池的区别是什么?
管理多个进程,适合CPU 密集型任务,不受 GIL 限制。:管理多个线程,适合I/O 密集型任务,受 GIL 限制。
2024-12-04 11:10:14
459
原创 python生成器函数
对于非常大的文件,可以采用分批处理的方法,即每次处理一部分数据,这样可以在保持较低内存占用的同时完成对整个文件的处理。如果操作可以直接在线性遍历中完成(例如过滤、映射转换),可以在遍历的同时直接应用这些操作,而不需要额外的数据结构。如果文件不是特别大,以至于整个内容可以安全地存储在内存中,可以将所有行收集到一个列表里,然后对这个列表进行操作。生成器可以作为数据管道的一部分,每个生成器负责处理数据的一个步骤,并将结果传递给下一个生成器。当需要处理非常大的数据集时,使用列表或其他容器可能会占用大量的内存。
2024-12-04 09:54:21
266
原创 get_db
在get_db函数中使用 yield关键字,而不是直接返回 (return数据库会话对象,是为了实现更复杂的行为,即延迟执行和资源管理。以下是为什么要使用yield。
2024-12-04 09:45:56
469
原创 @staticmethod、@classmethod
在使用falsk-restful这个框架进行模型部署调用时,发现模型推理时间很快,但是完整的一次请求过程非常耗时。在debug的过程中发现,每次请求调用api接口时,模型的推理类都会被实例化,推理类在构造的时候,会在初始化中加载模型,加载模型的过程是耗时较长的。通过@classmethod方法初始化模型的加载,相当于创建了一个全局变量,在后续的请求调用中,不会一直重复加载。当方法需要访问或修改类属性,或者需要通过类来创建实例时,适合使用类方法。当函数与类相关,但其操作不依赖于类状态时,适合使用静态方法。
2024-12-03 23:22:06
322
原创 Python中的实例方法、静态方法和类方法三者区别?
不用@classmethod和@staticmethod修饰的方法为实例方法。在类中定义的方法默认都是实例方法。实例方法最大的特点是它至少要包含一个self参数,用于绑定调用此方法的实例对象,实例方法通常可以用类对象直接调用。采用修饰的方法为类方法。类方法和实例方法相似,它至少也要包含一个参数,只不过类方法中通常将其命名为cls,Python会自动将类本身绑定给cls参数。我们在调用类方法时,无需显式为cls参数传参。
2024-12-03 22:57:51
330
原创 Python装饰器
装饰器是Python中非常有用的功能,它们允许我们以。,该装饰器将执行现有函数的功能和添加的额外功能。例1:装饰器用于计算并打印被装饰函数的执行时间。例2:用于在执行被装饰的函数前记录警告日志。,它可以让已有的函数不做任何改动的情况下。上,而无需修改其内部代码。装饰器本质上还是一个函数。将现有函数传递给装饰器。
2024-12-03 22:54:51
284
原创 深拷贝与浅拷贝
注:浅拷贝和深拷贝的不同仅仅是对组合对象来说,所谓的组合对象就是包含了其他对象的对象,如列表,类实例等等。浅拷贝是指创建一个新的对象,其内容是原对象中元素的引用(新对象与原对象共享内存中的子对象)。常见的浅拷贝有:切片操作、工厂函数、对象的copy()方法,copy模块中的copy函数。从上面的例子中可以看出,a浅拷贝得到b,a和b指向内存中不同的list对象,但是他们的。深拷贝是指创建一个新的对象,然后递归的拷贝原对象所包含的子对象。深拷贝出来的对象与原对象没有任何关联。
2024-12-03 22:33:33
297
原创 Python中常用的标准库以及功能
Python 提供了丰富的标准库,这些库为我们提供了常用的工具和功能,涵盖了从操作系统交互、文件处理、数据序列化、网络通信到多线程编程等方方面面。这些标准库大大简化了我们的工作,使得开发高效、稳定、易于维护的应用程序变得更加容易。在实际项目中,熟练掌握和合理运用这些标准库,可以显著提高我们的开发效率和代码质量。
2024-12-03 18:34:18
799
原创 python数据结构
Python提供了一系列内置的数据结构,这些数据结构非常强大和灵活,可以用来处理各种不同类型的数据。这些数据结构包括列表、元组、字典、集合,以及通过标准库可用的更多高级数据结构如队列和堆。
2024-12-03 17:28:32
256
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人