湖仓项目第二阶段使用Go语言的parquet-go库读写Parquet文件。Parquet为列式存储,记录每列min、max、null_count统计信息,支持文件裁剪以减少I/O。写入时通过StatsCollector实时收集统计;读取时按列投影,仅读所需列。每列带field ID,重命名后仍能正确匹配,为模式演进奠定基础。文件以UUID命名避免冲突。
本文介绍用Go构建小型湖仓引擎,模仿DuckLake架构:元数据存于Postgres,数据用Parquet。核心是八张元数据表,涵盖快照、表、列、数据文件、列统计、删除文件等。通过begin_snapshot和end_snapshot实现快照可见性与时间旅行。相比Iceberg的清单文件树,数据库方案让文件裁剪变成SQL查询,原子提交只需事务,但依赖运行中的数据库。
DuckDB 读写 S3 上的 Parquet 文件需要 AWS 凭证。除硬编码密钥外,可用 `PROVIDER credential_chain` 让 DuckDB 按 AWS SDK 顺序自动查找凭证:环境变量、IRSA Web Identity、SSO 配置文件、ECS 任务角色、EC2 实例元数据,取首个可用者。该逻辑位于 aws 扩展,也适用于 GCS 和 R2。IRSA 通过注解 ServiceAccount 注入角色与令牌,由 kubelet 和 SDK 自动轮换。DuckLake 本地开发用静态密钥,生产用凭证链。
Hardwood 1.1 Beta1发布,首次支持Parquet写入,提供RowWriter和ColumnWriter两种API,并优化查询层(Bloom过滤器、字典行组剪枝)及性能(固定长度列表快速路径等)。CLI改用Æsh框架,启动更快,新增AI代理技能和WebAssembly实验版本。此版本修复109个问题,兼容DuckDB和parquet-java,未来将完善写入功能。
Parquet是一种高效的列式二进制数据格式,比CSV更可靠,支持压缩和快速查询,被Spark、DuckDB等主流工具广泛支持。Apache Iceberg作为表格式管理Parquet文件集合,提供事务、模式演进和时间旅行功能。两者结合,可在低成本存储上实现数据仓库行为,适合数据超出单一系统时使用。
Parquet 是一种列式二进制文件格式,其元数据页脚包含所有列块的字节偏移和统计信息,配合 S3 的 HTTP 范围请求,可实现精准读取,仅下载所需数据。它支持列式压缩、统计剪枝和自描述特性,在对象存储上高效运行。Iceberg 等湖仓格式依赖它实现双层数据跳过,相比 CSV、Avro 等格式,Parquet 在分析场景中优势显著。
本文介绍使用Amazon Athena分析Kiro团队用量报表的实践。针对CSV中动态模型列可能导致数据错位的问题,通过ETL将宽表转为长表,采用Parquet格式和Partition Projection建表,实现稳定查询。方案完全Serverless化,月成本低于1美元,并接入Amazon QuickSight构建看板,便于团队观测用量、治理额度。
Spotify等公司需快速访问海量数据,但传统SQL引擎延迟高。RAP(随机访问Parquet)通过外部索引将键直接映射到文件位置,实现O(1)查找,避免扫描。它支持排序、分组、单页键、ZSTD帧重置等优化,减少读取次数和字节数,甚至可零读取。RAP复用现有Parquet文件,无需复制,使数据湖支持交互式查询,降低在线服务成本,惠及AI代理等场景。
Apache Parquet存储固定长度列表(如向量嵌入)效率低,因Dremel编码开销大。Hardwood通过检测定义和重复级别流,识别固定长度列表并绕过常规解码,实现快速路径。列读取器提速达2.5倍,行读取器最高3.9倍,接近扁平列性能。该优化可选启用,预计1.1版默认开启。
ORC和Parquet是两种列式存储格式,分别源自Hive和Twitter/Cloudera。ORC适合Hive事务表,支持ACID,且在整数和时间戳数据上压缩效果好。Parquet是跨引擎的通用格式,广泛应用于AI和数据分析工具。选择时需考虑具体应用场景和数据特性。
本文探讨了Parquet文件的结构与性能优化,包括数据的物理切分(行组、列块、页面)、元数据存储方式,以及通过裁剪元数据(如列索引、偏移索引、布隆过滤器)提高查询效率。Parquet采用“先写数据、后写元数据”的设计,文件尾部包含所有统计信息,支持高效的谓词下推和投影下推,显著减少读取数据的IO量。
Apache Arrow 旨在解决不同系统间的数据内存表示问题,通过定义一种与语言无关的列式内存格式,实现零拷贝共享。其内存布局包括有效性位图和数据缓冲区,支持高效分析运算。C 数据接口允许在同一进程中无拷贝传递数据,而 IPC 和 Flight 则支持跨进程和网络传输。Arrow 与 Parquet 互补,前者优化内存计算,后者优化磁盘存储。
Hardwood是一个为JVM开发的新Parquet库,专注于快速读取Apache Parquet文件,支持多线程和无强制依赖。1.0版本已发布,兼容Java 21及以上,开源并可从Maven Central获取。它支持多种列类型和压缩方案,提供行读取和列读取两种API,适合不同的使用场景。未来版本将增加写入支持和性能优化。
Polars 1.41版本发布,新增快速的parquet元数据解码和嵌套子计划消除等功能。
本文比较列存轻量编码与通用压缩。在相同TPC-H数据上,Parquet默认字典对有序整数压缩效果反而更差,DELTA_BINARY_PACKED更小;ORC对整数不建字典,字符串仅判断一次,容易选错编码。排序可大幅改变压缩效果。zstd的收益多来自文本列。DuckDB采用全量分析,BtrBlocks通过采样选择编码更优,但采样存在固定开销与偏差。
Hardwood 1.0.0.Beta2发布,新增对VARIANT列的支持,提供交互式文本用户界面(TUI),提升性能,优化对象存储文件读取。VARIANT类型适用于存储半结构化数据,CLI新增dive命令以便分析Parquet文件,并优化了核心页面获取和解码流程,提升读取效率,支持更多Parquet逻辑类型。
Hardwood 1.0.0.Beta2发布,新增对VARIANT列的支持,提供交互式文本用户界面(TUI),提升性能,优化对象存储文件读取。VARIANT类型适用于存储半结构化数据,CLI新增dive命令以便分析Parquet文件,核心页面获取和解码流程也得到了优化,支持更多Parquet逻辑类型。
本文介绍了如何使用Kiro CLI和Amazon EKS MCP Server自动搭建FluentBit日志采集方案,并比较了两种将EKS埋点数据转存为S3 Parquet格式的方案。方案A需自编译镜像,适合追求简洁架构的用户;方案B通过Firehose和Glue实现转换,适合需要Schema管理的场景。Kiro CLI显著提升了搭建效率,简化了复杂操作。
现代数据分析可以通过使用Parquet文件和DuckDB简化,直接查询数据,避免传统数据库的复杂性。这种方法提高了分析效率,适合批量处理结构化数据。
本文探讨了优化Databricks AI/BI仪表板性能的关键因素,包括仓库选择、数据建模和文件布局。建议使用星型模式和整数连接键以提升查询效率,同时采用Parquet优化技术减少查询数据量,并利用智能工作负载管理增强并发处理能力。
完成下面两步后,将自动完成登录并继续当前操作。