数据湖(三):Hudi 概念术语

数据湖基本概念--什么是数据湖,数据湖又能干什么?为什么是Hudi 数据湖概念首次于2010年被James Dixon在其博客帖子(Pentaho, Hadoop, and Data Lakes | James Dixon's Blog)中提及 : 数据湖的权威定义(来自维基百科):数据湖(Data Lake)是一个以原始格式存储数据的存储库或系统,它按原样存储数据,而无需事先对数据进行结构化处理。一个数据湖可以存储结构化数据(如关系型数据库中的表),半结构化数据(如CSV、日志、XML、JSON),非结构化数据(如电子邮件、文档、PDF)和... 阅读详情

​Hudi 概念术语

一、Timeline

Hudi 数据湖可以维护很多张表,与 Hive 类似,数据存储在 HDFS 不同的目录结构中。Hudi 维护了表在不同时刻执行的所有操作的 Timeline,这有助于提供表的瞬时视图。

Timeline 是 HUDI 用来管理提交(commit)的抽象,每个 commit 都绑定一个固定时间戳,分散到时间线上。在 Timeline 上,每个 commit 被抽象为一个 HoodieInstant(Hoodie 瞬时时刻),一个 instant 记录了一次提交(commit)的行为、时间戳、和状态,也就是说每个 HoodieInstant 包含 Action、Time、State 三个部分,下面介绍每个 HoodieInstant 对应的这三个部分。

  • Instant Action

Instant Action 指的是对 Hudi 表执行的操作类型,目前包括 COMMITS、CLEANS、DELTA_COMMIT、COMPACTION、ROLLBACK、SAVEPOINT 这 6 种操作类型。

1)Commits:表示一批记录原子性的写入到一张表中。

2)Cleans:清除表中不再需要的旧版本文件。

3)Delta_commit:增量提交指的是将一批记录原子地写入 MergeOnRead 类型表,其中一些/所有数据都可以写入增量日志。

4)Compaction:将行式文件转化为列式文件。

5)Rollback:Commits 或者 Delta_commit 执行不成功时回滚数据,删除期间产生的任意文件。

6)Savepoint:将文件组标记为“saved”,cleans 执行时不会删除对应的数据。

  • Instant Time

Instant Time 表示一个时间戳,这个时间戳必须是按照 Instant Action 开始执行的时间顺序单调递增的。

  • Instant State

Instant State 表示在指定的时间点(Instant Time)对 Hudi 表执行操作(Instant Action)后,表所处的状态,目前包括 REQUESTED(已调度但未初始化)、INFLIGHT(当前正在执行)、COMPLETED(操作执行完成)这 3 种状态。

HUDI 的读写 API 通过 Timeline 的接口可以方便的在 commits 上进行条件筛选,对 history 和 on-going 的 commit 应用各种策略,快速筛选出需要操作的目标 commit。

下面结合官网中给出的例子理解下 Timeline,例子场景是,在 10:00~10:20 之间,要对一个 Hudi 表执行 Upsert 操作,操作的频率大约是 5 分钟执行一次,每次操作执行完成,会看到对应这个 Hudi 表的 Timeline 上,有一系列的 Commit 元数据生成。当满足一定条件时,会在指定的时刻对这些 COMMIT 进行 CLEANS 和 COMPACTION 操作,这两个操作都是在后台完成,其中在 10:05 之后执行了一次 CLEANS 操作,10:10 之后执行了一次 COMPACTION 操作。

我们看到,从数据生成到最终到达 Hudi 系统,可能存在延迟,如上图数据大约在 07:00、08:00、09:00 时生成,数据到达大约延迟了分别 3、2、1 小时多,最终生成 COMMIT 的时间才是 Upsert 的时间。通过使用 Timeline 来管理,当增量查询 10:00 之后的最新数据时,可以非常高效的找到 10:00 之后发生过更新的文件,而不必根据延迟时间再去扫描更早时间的文件,比如这里,就不需要扫描 7:00、8:00 或 9:00 这些时刻对应的文件(Buckets)。

二、文件格式及索引

Hudi 将表组织成 HDFS 上某个指定目录(basepath)下的目录结构,表被分成多个分区,分区是以目录的形式存在,每个目录下面会存在属于该分区的多个文件,类似 Hive 表,每个 Hudi 表分区通过一个分区路径(partitionpath)来唯一标识。

在每个分区下面,通过文件分组(file groups)的方式来组织,每个分组对应一个唯一的文件 ID。每个文件分组中包含多个文件分片(file slices)(一个新的 base commit time 对应一个新的文件分片,实际就是一个新的数据版本),每个文件分片包含一个 Base 文件(*.parquet),这个文件是在执行 COMMIT/COMPACTION 操作的时候生成的,同时还生成了几个日志文件(*.log.*),日志文件中包含了从该 Base 文件生成以后执行的插入/更新操作。

Hudi 采用 MVCC 设计,当执行 COMPACTION 操作时,会合并日志文件和 Base 文件,生成新的文件分片。CLEANS 操作会清理掉不用的/旧的文件分片,释放存储空间。

Hudi 会通过记录 Key 与分区 Path 组成 Hoodie Key,即 Record Key+Partition Path,通过将 Hoodie Key 映射到前面提到的文件 ID,具体其实是映射到 file_group/file_id,这就是 Hudi 的索引。一旦记录的第一个版本被写入文件中,对应的 Hoodie Key 就不会再改变了。

HUDI 的 Base file(parquet 文件)在根目录中的”.hoodie_partition_metadata”去记录了 record key 组成的 BloomFilter,用于在 file based index 的实现中实现高效率的 key contains 检测,决定数据是新增还是更新。

三、表类型

Hudi 提供了两种表格式,Copy On Write Table (COW)和 Merge On Read Table(MOR),他们会在数据的写入和查询性能上有所不同。

1、​​​​​​​Copy On Write - COW

Copy On Write 简称 COW,在数据写入的时候,复制一份原来的拷贝,在其基础上添加新数据,生成一个新的持有 base file (*.parquet,对应写入的 instant time)的 File Slice,数据存储格式为 parquet 列式存储格式。用户在读取数据时,会扫描所有最新的 File Slice 下的 base file。

如上图,每一个颜色都包含了截至到其所在时间的所有数据。老的数据副本在超过一定的个数限制后,将被删除(hoodie.cleaner.commits.retained 参数配置,保留几个历史版本,不包含最后一个版本,默认 10 个)。这种类型的表,没有 compact instant,因为写入时相当于已经 compact 了。

  • 优点

读取时只需要读取对应分区的一个数据文件即可,比较高效。

  • 缺点

数据写入的时候,需要复制一个先前的副本再在其基础上生成新的数据文件,这个过程比较耗时,且由于耗时,读请求读取到的数据相对就会滞后。

2、​​​​​​​​​​​​​​Merge On Read - MOR

Merge On Read 简称 MOR,使用列式存储(parquet)和行式存储(arvo)混合的方式来存储数据。更新时写入到增量(Delta)文件中,之后通过同步或异步的 COMPACTION 操作,生成新版本的列式格式文件。

Merge-On-Read 表存在列式格式的 Base 文件,也存在行式格式的增量(Delta)文件,新到达的更新都会写到增量日志文件中(log 文件),根据实际情况进行 COMPACTION 操作来将增量文件合并到 Base 文件上。

通过参数”hoodie.compact.inline”来开启是否一个事务完成后执行压缩操作,默认不开启。通过参数“hoodie.compact.inline.max.delta.commits”来设置提交多少次合并 log 文件到新的 parquet 文件,默认是 5 次。这里注意,以上两个参数都是针对每个 File Slice 而言。我们同样可以控制“hoodie.cleaner.commits.retained”来保存有多少 parquet 文件,即控制 FileSlice 文件个数。

上图中,每个文件分组都对应一个增量日志文件(Delta Log File)。COMPACTION 操作在后台定时执行。会把对应的增量日志文件合并到文件分组的 Base 文件中,生成新版本的 Base 文件。

对于查询 10:10 之后的数据的 Read Optimized Query,只能查询到 10:05 及其之前的数据,看不到之后的数据,查询结果只包含版本为 10:05、文件 ID 为 1、2、3 的文件;但是 Snapshot Query 是可以查询到 10:05 之后的数据的。

Read Optimized Query 与 Snapshot Query 是两种不同的查询类型,后文会解释到。

  • 优点

由于写入数据先写 delta log,且 delta log 较小,所以写入成本较低。

  • 缺点

需要定期合并整理 compact,否则碎片文件较多。读取性能较差,因为需要将 delta log 和 老数据文件合并。

3、​​​​​​​​​​​​​​COW&MOR 对比

四、​​​​​​​​​​​​​​查询类型

Hudi 数据查询对应三种查询类型,三种查询类型区别如下:

  • Snapshot Query

读取所有 Partition 下每个 FileGroup 最新的 FileSlice 中的文件,Copy On Write 表读 Base(Parquet 格式)文件,Merge On Read 表读 Base(Parquet 格式)文件+Log(Avro)格式文件,也就是说这种查询模式是将到当前时刻所有数据都读取出来,如果有更新数据,读取的也是更新后数据,例如:MOR 模式下,读取对应的 Base+Log 文件就是读取当前所有数据更新后的结果数据。

  • Incremantal Query

无论 Hudi 表模式是 COW 或者是 MOR 模式,这种模式可以查询指定时间戳后的增量数据,需要由用户指定一个时间戳。

  • Read Optimized Query

这种模式只能查询列式格式 Base 文件中的最新数据。对于 COW 表模式,读取数据与 Snapshot 模式一样。对于 MOR 模式的数据,读取数据只会读取到 Base 文件列式数据,不会读取 Log 文件 Avro 格式数据。

数据湖存储解决方案之Hudi Apache Hudi是一个Data Lakes的开源方案,Hudi是Hadoop Upserts Delete and Incremental的简写,它是由Uber开发并开源的Data Lakes解决方案。Hudi能够基于HDFS之上管理大型分析数据集,可以对数据进行插入、更新、增量消费等操作,主要目的是高效减少摄取过程中的数据延迟。官方对 Hudi 的定义如下:Apache Hudi将核心仓库和数据库功能直接引入数据湖。 阅读详情

相关推荐

数据湖Iceberg、Hudi和Paimon比较

Iceberg 社区基本盘还是在离线处理,它在国外的应用场景主要是离线取代 Hive,它也有强力的竞争对手 Delta,很难调整架构去适配 CDC 流更新。同时,Iceberg 扩展性强,对其它计算引擎也暴露的比较多的优化空间,但是这也导致后续的发展难以迅速,涉及到众多已经对接好的引擎。这并没有什么错,后面也证明了 Iceberg 主打离线数据湖和扩展性是有很大的优势,得到了众多国外厂商的支持。

marui156的专栏 1万+

Hudi介绍

在数据不断写入 Hudi 期间,Hudi 会不断生成 commit、deltacommit、clean 等 Instant 记录每一次操作类型、状态及详细的元数据,这些 Instant 最终都会存到 .hoodie 元数据目录下,为了避免元数据文件数量过多,ActiveTimeline 越来越长,需要对比较久远的操作进行归档(archive),将这部分操作移到 .hoodie/archive 目录下,单独形成一个 ArchivedTimeline。Clean文件的存在可以确保数据的清理操作被记录和跟踪。

m0_57320261的博客 602

数据湖浅析(以hudi为例)

数据湖浅析

weixin_45626756的博客 3978

【Hudi】核心概念-基本概念

(1)元数据:.hoodie目录对应着表元数据信息,包括表的版本管理(Timeline)、归档目录(存放过时的instant也就是版本),一个instant记录一次(commit)的行为、时间戳和状态,Hudi以时间轴的形式维护了在数据集上执行的所有操作的元数据;在COW表中,**只有数据文件/基本文件(.parquet),没有增量日志文件(.log.*).**对每一个新批次写入都将创建相应数据文件的新版本(新的FileSlice),新版本文件包包括旧版本文件的记录以及来自传入批次的记录(全量最新)。

weixin_45746689的博客 1331

数据湖技术之Hudi:核心原理、Spark & Hive 集成、COW 与 MOR 模式详解

摘要 Hudi是Apache开源的数据湖解决方案,支持HDFS上大规模分析数据集的更新、增量消费等操作,旨在降低数据延迟。相比传统数据仓库,数据湖能存储多源异构数据,采用"读时模式"提供更高灵活性。Hudi通过批流一体存储解决了Kappa架构的痛点(如Kafka存储限制),实现高效OLAP查询。其核心特性包括:基于时间线的数据版本管理(支持6种操作类型)、MVCC设计、文件分组优化、布隆过滤器索引等,提供upsert、原子提交、快照隔离等能力,适用于实时数仓场景。Hudi轻量级集成Spa

yangwei2048的博客 1185

数据湖架构与实时数仓实践:Hudi、Iceberg、Kafka + Flink + Spark

本篇文章介绍了数据湖架构实时数仓设计,并通过 Kafka + Flink + Spark 构建高效的数据湖方案。未来,数据湖将在存算分离数据湖仓一体化云原生大数据分析等方向持续优化,为企业提供更高效的实时分析能力。

晴天彩虹雨的博客 1978

Hudi学习02 -- Hudi核心概念

hudi核心概念

patrick_big_data的博客 1933

Hudi、Iceberg 、 Paimon 数据湖选型对比

Hudi、Iceberg 和 Paimon 是当前数据湖领域的三大主流开源框架,均致力于解决数据湖场景下的等核心问题,但设计理念和适用场景存在差异。

LXP 2509

【Hudi】Hudi 核心知识点详解(一)

在 Flink 实时流中,经常会通过 Flink CDC 插件读取 Mysql 数据,然后写入 Hudi 中。所以在执行上述操作时,需要了解 Hudi 的基本概念以及操作原理,这样在近实时往 Hudi 中写数据时,遇到报错问题,才能及时处理。

Data · Model · Agent · Repeat 5453

数据湖(三):Hudi概念术语

大数据联盟地址:https://bbs.youkuaiyun.com/forums/lanson 文章目录 Hudi概念术语 一、Timeline 二、文件格式及索引 三、表类型 1、​​​​​​​​​​​​​​Copy On Write - COW 2、​​​​​​​​​​​​​​Merge On Read- MOR 3、​​​​​​​​​​​​​​COW&MOR对比 四、​​​​​​​​​​​​​​查询类型 Hudi概念术语 一、Timeline Hudi数据湖可以维护很多...

Lansonli(蓝深李)的博客 1593

一篇文章将三极管讲透:三极管从原理到应用,从参数到特性,从入门到精通

晶体三极管(Transistor)是一种半导体电子器件,也是电子工程中最基本的元件之一。它有三个区域,分别是P型半导体,N型半导体和P型半导体,从而形成PNP型晶体三极管或者NPN型晶体三极管。

学习帮的博客 9万+

数据湖---hudi核心概念

正如您所看到的,一个旧的查询不会看到当前飞行中提交的文件以粉色编码,而是在提交后开始的一个新的查询会拾取新的数据。因此,查询不受任何写入失败/部分写入的影响,仅在提交的数据上运行。如果您当前的部署模型是单编写器,以及在同一进程中运行的异步表服务(如清理、集群、压缩),如Deltastremer连续模式写入MOR表、Spark流(默认情况下压缩是异步的),以及您自己的作业设置在同一编写器中启用异步表服务,则必须具有乐观的并发控制,在启用元数据表之前配置的锁提供程序和延迟失败写入清理策略如下。

u013257767的博客 1516

UQLab——其他概率分布随机变量转换标准Gaussian分布

1、使用UQLab将其他类型的随机变量转换成标准Gaussian分布; 2、使用科学计数法输出样本,方便后续ANSYS的调用分析; 3、基于MC的可靠度分析。 原随机变量分布类型: % 调用UQLab进行采样 clc clear uqlab %% Specify these distributions as a UQLab INPUT object: PriorOpts.Marginals(1...

ikhui7的博客 3013

【Hudi】数据湖(三):Hudi概念术语

Hudi数据湖可以维护很多张表,与Hive类似,数据存储在HDFS不同的目录结构中。Hudi维护了表在不同时刻执行的所有操作的Timeline,这有助于提供表的瞬时视图。Timeline 是 HUDI 用来管理提交(commit)的抽象,每个 commit 都绑定一个固定时间戳,分散到时间线上。在Timeline上,每个commit被抽象为一个 HoodieInstant(Hoodie瞬时时刻),一个 instant 记录了一次提交(commit)的行为、时间戳、和状态,也就是说每个HoodieInstan

菜鸟叔叔的博客 1629

单电源运放偏置电压设计:如何避免信号失真

本文详细解析了单电源运放偏置电压设计的关键技术,以LM358为例,探讨如何通过1/2 VCC偏置避免信号失真。文章从基本原理出发,揭示了双端偏置的黄金法则,并提供了常见设计陷阱的解决方案和进阶调试技巧,帮助工程师实现高保真信号放大。

weixin_29266647的博客 293

ARM架构UOS实战:从源码编译Qt 5.15.2到定制Qt Creator的全流程解析

本文详细解析了在ARM架构统信UOS系统上,从源码编译Qt 5.15.2到定制Qt Creator开发环境的完整流程。内容涵盖环境准备、依赖部署、源码配置、编译优化、错误处理及IDE集成,旨在帮助开发者在国产化平台上构建自主可控的高性能Qt开发环境,解决特定ARM平台的兼容性与性能优化问题。

mango的博客 410

数据湖-hudi概述

数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据。您可以按原样存储数据(无需先对数据进行结构化处理),并运行不同类型的分析 – 从控制面板和可视化到大数据处理、实时分析和机器学习,以指导做出更好的决策。

懒猫的脚印 2万+

一台NAS两个系统:飞牛nas上完美运行群晖DSM?(飞牛nas+群晖nas套娃安装实操)

想在飞牛NAS上体验群晖DSM系统?💡 本文详细记录了飞牛nas上部署群晖的完整过程,从镜像转换到系统安装,每一步都有详细说明 🖥️,让你在不增加硬件成本的情况下,轻松实现一套硬件、多种系统的灵活部署 ✅

XiaoqiangClub的博客 2369

大数据之数据湖Apache Hudi

上图中采用时间(小时)作为分区字段,从 10:00 开始陆续产生各种 commits,10:20 来了一条 9:00 的数据,该数据仍然可以落到 9:00 对应的分区,通过 timeline 直接消费 10:00 之后的增量更新(只消费有新 commits 的 group),那么这条延迟的数据仍然可以被消费到。因为流式引擎不会等到所有数据到齐之后再开始计算,所以有一个 watermark 的概念,当数据的时间小于 watermark 时,就会被丢弃,这样是无法对数据完整度有一个绝对的报障。

happy_king_zi的博客 3653

【数字IC验证快速入门】26、SystemVerilog项目实践之AHB-SRAMC(6)(AHB-SRAMC SVTB Overview)

导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思、清华紫光、联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。 文章目录一、内容概述二、AHB-SRAMC 验证计划 一、内容概述 AHB-SRAMC 验证计划 AHB-SRAMC 验证平台的架构图 AHB-SRAMC 验证平台的代.

悟已往之不谏 知来者之可追 2650

文献综述三大痛点用AI轻松解决!借助Gemini 3 Pro搞定检索难、阅读慢、框架乱问题(附 AI 提示词)

4)“漏斗式”结构:先介绍宏观领域的研究现状,再缩小范围,聚焦于与你课题直接先关的子领域,深入探讨与你研究变量直接相关的文献, 指出前人没做过、没做全或结论有矛盾的地方,再顺势提出你的研究课题,这种结构逻辑最清晰,能直接引导读者发现你研究的必要性。想要有针对性的搜到相关文献,必须先把模糊的研究题目拆解成精准的检索语言,这个时候就需要建立一个关键词矩阵,如核心词、同义词、学术术语、上下位词,以及对应的英文表达。请围绕【我的研究主题/关键词】,检索近5年发表的高被引的中英文文献,优先选择顶刊综述/论文。

智能AI让学术科研更容易 277

【Hudi】数据湖Hudi核心概念与架构设计总结

Hudi是现在非常热门的数据湖开源方案,非常适合于搭建一个数据湖平台。 有些人认为数据湖肯定与大数据技术体系完全不一样,是两个东西,甚至认为他俩没关系。但是,你知道Hudi的全称叫啥么?就是“Hadoop Updates and Incrementals” 简单来说,就是基于Hadoop生态,支持HDFS的数据删除和增量更新的技术框架。 所以,Apache Hudi其实本就是从Hadoop生态里来的,依赖 HDFS 做底层的存储,所以可以支撑非常大规模的数据存储。...

菜鸟叔叔的博客 1万+

解锁VS2022!手把手教你本地部署Deepseek

在 VS2022 中本地部署 Deepseek,我们首先需要确保硬件资源的充足,如高性能的 GPU、大容量内存和高速存储等,这是模型稳定运行的基石。如果生成的摘要能够准确概括原文的核心内容,就表明 Deepseek 模型在文本分析方面的功能正常,部署稳定可靠。这对于开发者来说,能够大大提高开发效率,当遇到一些常见的功能实现时,可以借助 Deepseek 模型快速生成基础代码框架,减少手动编写的工作量。在大语言模型的蓬勃发展的当下,Deepseek 凭借其卓越的性能和创新的技术,已然成为该领域的佼佼者。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1万+

Hudi数据湖简介

今天跟大家分享的大数据产品叫Apache Hudi,Hudi是Hadoop Updates and Incrementals的简写,它是由Uber开发并开源的Data Lakes解决方案。下面首先放一张Hudi在Hadoop体系架构中的位置图: 1. 什么是数据湖? 首先介绍一下什么是数据湖,提到数据湖,不得不说一下数据仓库。 关系型数据库大行其道的年代,随着各个业务系统增多,在应对一些分析场景时,慢慢产生了数据仓库的概念,包括之前介绍的Greenplum、Teradata等产品,都是数据仓库的代

专注数据库、大数据领域干货分享,用严谨的数据技术广交天下朋友。 5493

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Hudi最流行数据湖框架介绍

目录 1. 第一章Hudi 框架概述 1.1 数据湖Data Lake 1.1.1 仓库和湖泊 1.1.2 什么是数据湖 1.1.3 数据湖的优点 1.1.4 Data Lake vs Data warehouse 1.1.5 数据湖框架 1.1.5.1 Delta Lake 1.1.5.2 Apache Iceberg 1.1.5.3 Apache Hudi 1.1.6 湖仓一体(Data Lakehouse) 1.1.6.1 背景概述 1.1.6.2 概念定义 1.1.6.3 架构原则

赵广陆 6540

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

深度对比 Delta、Iceberg 和 Hudi 三大开源数据湖方案

深度对比Delta/Iceberg/Hudi三大数据湖的特点

m0_46168848的博客 4502

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 数据湖(二):什么是 Hudi
下一篇: 数据湖(四):Hudi 与 Spark 整合
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值