[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-lakehq--sail":3,"tool-lakehq--sail":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",150037,2,"2026-04-10T23:33:47",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":76,"owner_website":78,"owner_url":79,"languages":80,"stars":108,"forks":109,"last_commit_at":110,"license":111,"difficulty_score":32,"env_os":112,"env_gpu":112,"env_ram":113,"env_deps":114,"category_tags":120,"github_topics":121,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":135,"updated_at":136,"faqs":137,"releases":166},4922,"lakehq\u002Fsail","sail","LakeSail's computation framework with a mission to unify batch processing, stream processing, and compute-intensive AI workloads.","Sail 是由 LakeSail 推出的开源统一分布式多模态计算框架，旨在打破传统数据处理与人工智能计算之间的壁垒。它成功将批处理、流处理以及高算力需求的 AI 工作负载整合到同一个引擎中，解决了以往需要维护多套系统导致的架构复杂、数据流转效率低及成本高昂等痛点。\n\n这款工具特别适合大数据工程师、AI 开发者及数据架构师使用。其最大的技术亮点在于完全基于 Rust 语言原生构建，彻底摒弃了 Java 虚拟机（JVM）的开销，从而实现了内存安全、秒级启动和可预测的高性能表现。在实际基准测试中，Sail 的处理速度可达 Spark 的 4 倍甚至更高，同时能显著降低基础设施成本。\n\n对于熟悉 Spark 生态的用户而言，迁移门槛极低。Sail 完美兼容 Spark Connect 协议，支持现有的 Spark SQL 和 DataFrame API，意味着用户无需重写任何代码即可无缝切换，直接享受更优的性能红利。无论是本地开发调试，还是在 Kubernetes 集群中进行大规模分布式部署，Sail 都提供了灵活便捷的启动与连接方式，是追求极致效率与低成本运营团队的理想选择。","# Sail\n\n[![Build Status](https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Factions\u002Fworkflows\u002Fbuild.yml\u002Fbadge.svg?branch=main&event=push)](https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Factions)\n[![Codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Flakehq\u002Fsail\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fapp.codecov.io\u002Fgh\u002Flakehq\u002Fsail)\n[![PyPI Release](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fpysail)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F)\n[![Static Slack Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fslack-LakeSail_Community-3762E0?logo=slack)](https:\u002F\u002Fwww.launchpass.com\u002Flakesail-community\u002Ffree)\n\nSail is an open-source **unified and distributed multimodal computation framework** created by [LakeSail](https:\u002F\u002Flakesail.com\u002F).\n\nOur mission is to **unify batch processing, stream processing, and compute-intensive AI workloads**. Sail is a compute engine that is:\n\n- **Compatible** with the Spark Connect protocol, supporting the Spark SQL and DataFrame API with no code rewrites required.\n- **~4x faster** than Spark in benchmarks (up to 8x in specific workloads).\n- **94% cheaper** on infrastructure costs.\n- **100% Rust-native** with no JVM overhead, delivering memory safety, instant startup, and predictable performance.\n\n**🚀 Sail outperforms Spark, popular Spark accelerators, Databricks, and Snowflake on [ClickBench](https:\u002F\u002Fgo.lakesail.com\u002Fclickbench).**\n\n**💬 [Join our Slack community](https:\u002F\u002Fwww.launchpass.com\u002Flakesail-community\u002Ffree)** to ask questions, share feedback, and connect with other Sail users and contributors.\n\n## Documentation\n\nThe documentation of the latest Sail version can be found [here](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002F).\n\n## Installation\n\n### Quick Start\n\nSail is available as a Python package on PyPI. You can install it along with PySpark in your Python environment.\n\n```bash\npip install pysail\npip install \"pyspark[connect]\"\n```\n\nAlternatively, you can install the lightweight client package `pyspark-client` since Spark 4.0.\nThe `pyspark-connect` package, which is equivalent to `pyspark[connect]`, is also available since Spark 4.0.\n\n### Advanced Use Cases\n\nYou can install Sail from source to optimize performance for your specific hardware architecture. The detailed [Installation Guide](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fintroduction\u002Finstallation\u002F) walks you through this process step-by-step.\n\nIf you need to deploy Sail in production environments, the [Deployment Guide](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fdeployment\u002F) provides comprehensive instructions for deploying Sail on Kubernetes clusters and other infrastructure configurations.\n\n## Getting Started\n\n### Starting the Sail Server\n\n**Option 1: Command Line Interface.** You can start the local Sail server using the `sail` command.\n\n```bash\nsail spark server --port 50051\n```\n\n**Option 2: Python API.** You can start the local Sail server using the Python API.\n\n```python\nfrom pysail.spark import SparkConnectServer\n\nserver = SparkConnectServer(port=50051)\nserver.start(background=False)\n```\n\n**Option 3: Kubernetes.** You can deploy Sail on Kubernetes and run Sail in cluster mode for distributed processing.\nPlease refer to the [Kubernetes Deployment Guide](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fdeployment\u002Fkubernetes.html) for instructions on building the Docker image and writing the Kubernetes manifest YAML file.\n\n```bash\nkubectl apply -f sail.yaml\nkubectl -n sail port-forward service\u002Fsail-spark-server 50051:50051\n```\n\n### Connecting to the Sail Server\n\nOnce you have a running Sail server, you can connect to it in PySpark.\nNo changes are needed in your PySpark code!\n\n```python\nfrom pyspark.sql import SparkSession\n\nspark = SparkSession.builder.remote(\"sc:\u002F\u002Flocalhost:50051\").getOrCreate()\nspark.sql(\"SELECT 1 + 1\").show()\n```\n\nPlease refer to the [Getting Started](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fintroduction\u002Fgetting-started\u002F) guide for further details.\n\n## Feature Highlights\n\n### Storage\n\nSail supports a variety of storage backends for reading and writing data. You can read more details in our [Storage Guide](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fstorage\u002F).\n\nHere are the storage options supported:\n\n- AWS S3\n- Cloudflare R2\n- Azure\n- Google Cloud Storage\n- Hugging Face\n- HDFS\n- File systems\n- HTTP\u002FHTTPS\n- In-memory storage\n\n### Lakehouse Formats\n\nSail provides native support for modern lakehouse table formats, offering reliable storage layers with strong data management guarantees and ensuring interoperability with existing datasets.\n\nPlease refer to the following guides for the supported formats:\n\n- [Delta Lake Guide](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fformats\u002Fdelta.html)\n- [Apache Iceberg Guide](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fformats\u002Ficeberg.html)\n\n### Catalog Providers\n\nSail supports multiple catalog providers, such as the Apache Iceberg REST Catalog and Unity Catalog. You can manage datasets as external tables and integrate with broader data-platform ecosystems.\n\nFor more details on usage and best practices, see the [Catalog Guide](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fcatalog\u002F).\n\n## Benchmark Results\n\nDerived TPC-H results show that Sail outperforms Apache Spark in every query:\n\n- **Execution Time**: ~4× faster across diverse SQL workloads.\n- **Hardware Cost**: 94% lower with significantly lower peak memory usage and zero shuffle spill.\n\n| Metric                     | Spark    | Sail            |\n| -------------------------- | -------- | --------------- |\n| Total Query Time           | 387.36 s | **102.75 s**    |\n| Query Speed-Up             | Baseline | **43% – 727%**  |\n| Peak Memory Usage          | 54 GB    | **22 GB (1 s)** |\n| Disk Write (Shuffle Spill) | > 110 GB | **0 GB**        |\n\nThese results come from a derived TPC-H benchmark (22 queries, scale factor 100, Parquet format) on AWS `r8g.4xlarge` instances.\n\n![Query Time Comparison](https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fraw\u002F46d0520532f22e99de6d9ade6373a117216484ca\u002F.github\u002Fimages\u002Fquery-time.svg)\n\nSee the full analysis and graphs on our [Benchmark Results](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fintroduction\u002Fbenchmark-results\u002F) page.\n\n## Why Choose Sail?\n\nWhen Spark was invented over 15 years ago, it was revolutionary. It redefined distributed data processing and powered ETL, machine learning, and analytics pipelines across industries.\n\nBut Spark’s JVM-based architecture now struggles to meet modern demands for performance and cloud efficiency:\n\n- **Garbage collection pauses** introduce latency spikes.\n- **Serialization overhead** slows data exchange between JVM and Python.\n- **Heavy executors** drive up cloud costs and complicate scaling.\n- **Row-based processing** performs poorly on analytical workloads and leaves hardware efficiency untapped.\n- **Slow startup** delays workloads, hurting interactive and on-demand use cases.\n\nSail solves these problems with a modern, Rust-native design.\n\n### Sail is Spark-compatible\n\nSail offers a drop-in replacement for Spark SQL and the Spark DataFrame API. Existing PySpark code works out of the box once you connect your Spark client session to Sail over the Spark Connect protocol.\n\n- **Spark SQL Dialect Support.** A custom Rust parser (built with parser combinators and Rust procedural macros) covers Spark SQL syntax with production-grade accuracy.\n- **DataFrame API Support.** Spark DataFrame operations run on Sail with identical semantics.\n- **Python UDF, UDAF, UDWF, and UDTF Support.** Python, Pandas, and Arrow UDFs all follow the same conventions as Spark.\n\n### Sail’s Advantages over Spark\n\n- **Rust-Native Engine.** No garbage collection pauses, no JVM memory tuning, and low memory footprint.\n- **Columnar Format and Vectorized Execution.** Built on top of [Apache Arrow](https:\u002F\u002Fgithub.com\u002Fapache\u002Farrow) and [Apache DataFusion](https:\u002F\u002Fgithub.com\u002Fapache\u002Fdatafusion), the columnar in-memory format and SIMD instructions unlock blazing-fast query execution.\n- **Lightning-Fast Python UDFs.** Python code runs inside Sail with zero serialization overhead as Arrow array pointers enable zero-copy data sharing.\n- **Performant Data Shuffling.** Workers exchange Arrow columnar data directly, minimizing shuffle costs for joins and aggregations.\n- **Lightweight, Stateless Workers.** Workers start in seconds, consume only a few megabytes of memory at idle, and scale elastically to cut cloud costs and simplify operations.\n- **Concurrency and Memory Safety You Can Trust.** Rust’s ownership model prevents null pointers, race conditions, and unsafe memory access for unmatched reliability.\n\nCurious about how Sail stacks up against Spark? Explore our [Why Sail?](https:\u002F\u002Flakesail.com\u002Fwhy-sail\u002F) page. Ready to bring your existing workloads over? Our [Migration Guide](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fintroduction\u002Fmigrating-from-spark\u002F) shows you how.\n\n## Further Reading\n\n- [Architecture](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fconcepts\u002Farchitecture\u002F) – Overview of Sail’s design for both local and cluster modes, and how it transitions seamlessly between them.\n- [Query Planning](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fconcepts\u002Fquery-planning\u002F) – Detailed explanation of how Sail parses SQL and Spark relations, builds logical and physical plans, and handles execution for local and cluster modes.\n- [SQL](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fsql\u002F) and [DataFrame](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fdataframe\u002F) Features – Complete reference for Spark SQL and DataFrame API compatibility.\n- [LakeSail Blog](https:\u002F\u002Flakesail.com\u002Fblog\u002F) – Updates on Sail releases, benchmarks, and technical insights.\n\n**✨Using Sail? [Tell us your story](https:\u002F\u002Flakesail.com\u002Fshare-story\u002F) and get free merch!✨**\n","# Sail\n\n[![构建状态](https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Factions\u002Fworkflows\u002Fbuild.yml\u002Fbadge.svg?branch=main&event=push)](https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Factions)\n[![Codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Flakehq\u002Fsail\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fapp.codecov.io\u002Fgh\u002Flakehq\u002Fsail)\n[![PyPI 发布](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fpysail)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F)\n[![静态 Slack 徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fslack-LakeSail_Community-3762E0?logo=slack)](https:\u002F\u002Fwww.launchpass.com\u002Flakesail-community\u002Ffree)\n\nSail 是由 [LakeSail](https:\u002F\u002Flakesail.com\u002F) 创建的开源 **统一且分布式的多模态计算框架**。\n\n我们的使命是 **统一批处理、流处理以及计算密集型 AI 工作负载**。Sail 是一款计算引擎，具有以下特点：\n\n- **兼容** Spark Connect 协议，支持 Spark SQL 和 DataFrame API，无需重写代码。\n- 在基准测试中比 Spark 快约 4 倍（在特定工作负载下可达 8 倍）。\n- 基础设施成本低 94%。\n- **100% Rust 原生**，无 JVM 开销，提供内存安全、即时启动和可预测的性能。\n\n**🚀 Sail 在 [ClickBench](https:\u002F\u002Fgo.lakesail.com\u002Fclickbench) 上的表现优于 Spark、流行的 Spark 加速器、Databricks 和 Snowflake。**\n\n**💬 [加入我们的 Slack 社区](https:\u002F\u002Fwww.launchpass.com\u002Flakesail-community\u002Ffree)**，提问、分享反馈，并与其他 Sail 用户和贡献者交流。\n\n## 文档\n\n最新版本 Sail 的文档可以在这里找到：[点击此处](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002F)。\n\n## 安装\n\n### 快速入门\n\nSail 作为 Python 包已在 PyPI 上发布。您可以在 Python 环境中同时安装它和 PySpark。\n\n```bash\npip install pysail\npip install \"pyspark[connect]\"\n```\n\n或者，自 Spark 4.0 起，您也可以安装轻量级客户端包 `pyspark-client`。与 `pyspark[connect]` 等效的 `pyspark-connect` 包同样自 Spark 4.0 起可用。\n\n### 高级用法\n\n您可以从源码安装 Sail，以针对您的特定硬件架构优化性能。详细的 [安装指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fintroduction\u002Finstallation\u002F) 将逐步指导您完成此过程。\n\n如果您需要在生产环境中部署 Sail，[部署指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fdeployment\u002F) 提供了在 Kubernetes 集群及其他基础设施配置上部署 Sail 的全面说明。\n\n## 入门\n\n### 启动 Sail 服务器\n\n**选项 1：命令行界面。** 您可以使用 `sail` 命令启动本地 Sail 服务器。\n\n```bash\nsail spark server --port 50051\n```\n\n**选项 2：Python API。** 您也可以使用 Python API 启动本地 Sail 服务器。\n\n```python\nfrom pysail.spark import SparkConnectServer\n\nserver = SparkConnectServer(port=50051)\nserver.start(background=False)\n```\n\n**选项 3：Kubernetes。** 您可以将 Sail 部署到 Kubernetes 上，并以集群模式运行 Sail 进行分布式处理。\n请参阅 [Kubernetes 部署指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fdeployment\u002Fkubernetes.html)，了解如何构建 Docker 镜像和编写 Kubernetes 清单 YAML 文件。\n\n```bash\nkubectl apply -f sail.yaml\nkubectl -n sail port-forward service\u002Fsail-spark-server 50051:50051\n```\n\n### 连接到 Sail 服务器\n\n一旦 Sail 服务器运行起来，您就可以在 PySpark 中连接到它。\n无需更改您的 PySpark 代码！\n\n```python\nfrom pyspark.sql import SparkSession\n\nspark = SparkSession.builder.remote(\"sc:\u002F\u002Flocalhost:50051\").getOrCreate()\nspark.sql(\"SELECT 1 + 1\").show()\n```\n\n更多详细信息，请参阅 [入门指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fintroduction\u002Fgetting-started\u002F)。\n\n## 功能亮点\n\n### 存储\n\nSail 支持多种存储后端，用于读取和写入数据。您可以在我们的 [存储指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fstorage\u002F) 中了解更多详情。\n\n以下是支持的存储选项：\n\n- AWS S3\n- Cloudflare R2\n- Azure\n- Google Cloud Storage\n- Hugging Face\n- HDFS\n- 文件系统\n- HTTP\u002FHTTPS\n- 内存存储\n\n### Lakehouse 格式\n\nSail 原生支持现代 lakehouse 表格格式，提供可靠的数据存储层和强大的数据管理保障，同时确保与现有数据集的互操作性。\n\n有关支持的格式，请参阅以下指南：\n\n- [Delta Lake 指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fformats\u002Fdelta.html)\n- [Apache Iceberg 指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fformats\u002Ficeberg.html)\n\n### 目录提供商\n\nSail 支持多种目录提供商，例如 Apache Iceberg REST 目录和 Unity 目录。您可以将数据集管理为外部表，并与更广泛的数据平台生态系统集成。\n有关使用方法和最佳实践的更多信息，请参阅 [目录指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fcatalog\u002F)。\n\n## 基准测试结果\n\n基于 TPC-H 的测试结果显示，Sail 在每项查询中均优于 Apache Spark：\n\n- **执行时间**：在各种 SQL 工作负载中快约 4 倍。\n- **硬件成本**：降低 94%，峰值内存占用显著减少，且无 shuffle spill。\n\n| 指标                     | Spark    | Sail            |\n| -------------------------- | -------- | --------------- |\n| 总查询时间           | 387.36 s | **102.75 s**    |\n| 查询加速倍数             | 基线 | **43% – 727%**  |\n| 峰值内存占用          | 54 GB    | **22 GB (1 s)** |\n| 磁盘写入（Shuffle Spill） | > 110 GB | **0 GB**        |\n\n这些结果来自 AWS `r8g.4xlarge` 实例上的衍生 TPC-H 基准测试（22 个查询，比例因子 100，Parquet 格式）。\n\n![查询时间对比](https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fraw\u002F46d0520532f22e99de6d9ade6373a117216484ca\u002F.github\u002Fimages\u002Fquery-time.svg)\n\n完整的分析和图表请参见我们的 [基准测试结果页面](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fintroduction\u002Fbenchmark-results\u002F)。\n\n## 为什么选择 Sail？\n\n15 多年前，Spark 的诞生可谓革命性。它重新定义了分布式数据处理方式，并为各行各业的 ETL、机器学习和分析管道提供了动力。\n\n然而，Spark 基于 JVM 的架构如今已难以满足现代对性能和云效率的需求：\n\n- **垃圾回收暂停**会导致延迟激增。\n- **序列化开销**会减缓 JVM 与 Python 之间的数据交换。\n- **重型执行器**会推高云成本并使扩展复杂化。\n- **基于行的处理**在分析型工作负载中表现不佳，无法充分利用硬件效率。\n- **启动缓慢**会延迟工作负载，影响交互式和按需使用场景。\n\nSail 通过现代化的 Rust 原生设计解决了这些问题。\n\n### Sail 与 Spark 兼容\n\nSail 提供了 Spark SQL 和 Spark DataFrame API 的直接替换方案。只需通过 Spark Connect 协议将您的 Spark 客户端会话连接到 Sail，现有的 PySpark 代码即可开箱即用。\n\n- **Spark SQL 方言支持。** 自定义的 Rust 解析器（基于解析组合子和 Rust 过程宏构建）以生产级精度覆盖了 Spark SQL 语法。\n- **DataFrame API 支持。** Spark DataFrame 操作在 Sail 上运行时具有完全相同的语义。\n- **Python UDF、UDAF、UDWF 和 UDTF 支持。** Python、Pandas 和 Arrow UDF 均遵循与 Spark 相同的规范。\n\n### Sail 相较于 Spark 的优势\n\n- **原生 Rust 引擎。** 无垃圾回收停顿、无需 JVM 内存调优，且内存占用极低。\n- **列式存储与向量化执行。** 基于 [Apache Arrow](https:\u002F\u002Fgithub.com\u002Fapache\u002Farrow) 和 [Apache DataFusion](https:\u002F\u002Fgithub.com\u002Fapache\u002Fdatafusion) 构建，列式内存格式结合 SIMD 指令，实现了极速查询执行。\n- **超快的 Python UDF 执行。** Python 代码在 Sail 内部运行时零序列化开销，因为 Arrow 数组指针实现了零拷贝的数据共享。\n- **高效的数据洗牌。** 工作节点之间直接交换 Arrow 列式数据，从而最大限度地降低连接和聚合操作的洗牌成本。\n- **轻量级、无状态的工作节点。** 工作节点可在几秒钟内启动，空闲时仅消耗几 MB 内存，并可弹性扩展，以降低云成本并简化运维。\n- **值得信赖的并发与内存安全。** Rust 的所有权模型可防止空指针、竞态条件及不安全的内存访问，从而提供无与伦比的可靠性。\n\n想了解 Sail 如何与 Spark 竞争吗？请查看我们的 [为什么选择 Sail？](https:\u002F\u002Flakesail.com\u002Fwhy-sail\u002F) 页面。准备好迁移现有工作负载了吗？我们的 [迁移指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fintroduction\u002Fmigrating-from-spark\u002F) 将为您详细介绍具体步骤。\n\n## 更多阅读\n\n- [架构](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fconcepts\u002Farchitecture\u002F) – 介绍 Sail 在本地模式和集群模式下的设计，以及如何在这两种模式之间无缝切换。\n- [查询计划](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fconcepts\u002Fquery-planning\u002F) – 详细说明 Sail 如何解析 SQL 和 Spark 关系表达式，构建逻辑和物理计划，并处理本地与集群模式下的执行流程。\n- [SQL](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fsql\u002F) 和 [DataFrame](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fdataframe\u002F) 功能 – Spark SQL 和 DataFrame API 兼容性的完整参考。\n- [LakeSail 博客](https:\u002F\u002Flakesail.com\u002Fblog\u002F) – Sail 发布信息、基准测试结果及技术洞察的最新动态。\n\n**✨ 正在使用 Sail 吗？[分享您的故事](https:\u002F\u002Flakesail.com\u002Fshare-story\u002F)，即可获得免费周边礼品！✨**","# Sail 快速上手指南\n\nSail 是一个由 LakeSail 开发的开源统一分布式多模态计算框架。它完全兼容 Spark Connect 协议，支持无需修改代码即可运行现有的 PySpark 应用，同时凭借 Rust 原生架构提供更快的执行速度、更低的内存占用和零 GC 停顿。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Linux, macOS 或 Windows (WSL2 推荐)。\n*   **Python 版本**：Python 3.8 及以上版本。\n*   **前置依赖**：\n    *   `pip` (Python 包管理工具)\n    *   建议安装 `pyspark` 相关依赖（Sail 安装过程会自动处理部分依赖，但显式安装可确保环境完整）。\n\n> **注意**：Sail 是 100% Rust 原生的，无需安装 JVM 或配置 Java 环境变量，从而避免了 JVM 的启动开销和调优复杂性。\n\n## 安装步骤\n\nSail 以 Python 包的形式发布在 PyPI 上。您可以使用以下命令快速安装。\n\n### 1. 安装 Sail 和 PySpark 连接组件\n\n在终端中执行以下命令：\n\n```bash\npip install pysail\npip install \"pyspark[connect]\"\n```\n\n*注：如果您使用的是 Spark 4.0 及以上版本，也可以选择不带额外依赖的轻量级客户端 `pyspark-client` 或 `pyspark-connect`。*\n\n### 2. 验证安装\n\n安装完成后，您可以通过检查版本号来确认安装是否成功（可选）：\n\n```bash\npython -c \"import pysail; print(pysail.__version__)\"\n```\n\n## 基本使用\n\nSail 的使用流程分为两步：**启动 Sail 服务器** 和 **通过 PySpark 连接**。您的现有 PySpark 代码无需任何修改即可运行。\n\n### 第一步：启动 Sail 服务器\n\n您可以选择通过命令行或 Python API 启动本地 Sail 服务器。\n\n**方式 A：使用命令行 (推荐)**\n\n在终端中运行以下命令启动服务器（默认端口 50051）：\n\n```bash\nsail spark server --port 50051\n```\n\n**方式 B：使用 Python API**\n\n如果您希望在 Python 脚本中控制服务器生命周期：\n\n```python\nfrom pysail.spark import SparkConnectServer\n\nserver = SparkConnectServer(port=50051)\nserver.start(background=False)\n```\n\n*保持该终端或进程运行，不要关闭。*\n\n### 第二步：连接并运行任务\n\n打开一个新的终端窗口或 Python 脚本，使用标准的 PySpark `SparkSession` 连接到正在运行的 Sail 服务器。\n\n```python\nfrom pyspark.sql import SparkSession\n\n# 连接到本地运行的 Sail 服务器\nspark = SparkSession.builder.remote(\"sc:\u002F\u002Flocalhost:50051\").getOrCreate()\n\n# 执行简单的 SQL 查询\nspark.sql(\"SELECT 1 + 1 AS result\").show()\n\n# 您也可以直接使用 DataFrame API，语法与原生 Spark 完全一致\ndf = spark.range(10).select(\"id\")\ndf.show()\n```\n\n### 后续步骤\n\n一旦连接成功，您就可以像使用普通 Spark 一样处理大规模数据、读取 S3\u002FHDFS 存储、操作 Delta Lake 或 Iceberg 表格式。Sail 将自动利用其列式内存格式和向量化执行引擎来加速您的任务。\n\n如需部署到 Kubernetes 集群或使用更多高级功能，请参考官方 [部署指南](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Fguide\u002Fdeployment\u002F) 和 [文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002F)。","某电商数据团队每天需处理 TB 级用户行为日志，既要完成夜间批量报表统计，又要实时监测异常流量并运行推荐模型。\n\n### 没有 sail 时\n- **架构割裂**：批处理用 Spark、流计算用 Flink、AI 推理用单独集群，维护三套系统导致开发协作困难。\n- **成本高昂**：JVM 内存开销大且资源利用率低，每月云基础设施账单居高不下。\n- **响应迟缓**：传统引擎启动慢，遇到突发流量高峰时无法秒级扩容，导致实时大屏数据延迟。\n- **代码冗余**：为适配不同引擎，同一套数据清洗逻辑需重写多次，测试与迭代周期被拉长。\n\n### 使用 sail 后\n- **统一框架**：sail 将批处理、流计算和 AI 负载整合至单一引擎，团队仅需维护一套代码库即可覆盖全场景。\n- **极致降本**：凭借 100% Rust 原生特性消除 JVM 开销，基础设施成本直接降低 94%，显著优化预算。\n- **即时弹性**：sail 实现毫秒级启动与稳定性能，面对流量洪峰可瞬间扩容，确保实时指标零延迟。\n- **无缝迁移**：完全兼容 Spark Connect 协议，现有 PySpark 代码无需任何修改即可运行，且查询速度提升 4 倍。\n\nsail 通过统一的 Rust 原生架构，让企业在大幅削减成本的同时，实现了从离线到实时再到 AI 计算的高效融合。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Flakehq_sail_8a327c0a.png","lakehq","LakeSail","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Flakehq_1d7f0ff0.png","Unifying batch processing, stream processing, and AI workloads",null,"hello@lakesail.com","https:\u002F\u002Flakesail.com","https:\u002F\u002Fgithub.com\u002Flakehq",[81,85,89,93,97,101,105],{"name":82,"color":83,"percentage":84},"Rust","#dea584",87.2,{"name":86,"color":87,"percentage":88},"Python","#3572A5",8.7,{"name":90,"color":91,"percentage":92},"Gherkin","#5B2063",3.8,{"name":94,"color":95,"percentage":96},"Shell","#89e051",0.2,{"name":98,"color":99,"percentage":100},"Dockerfile","#384d54",0.1,{"name":102,"color":103,"percentage":104},"jq","#c7254e",0,{"name":106,"color":107,"percentage":104},"JavaScript","#f1e05a",1274,82,"2026-04-06T18:18:17","Apache-2.0","未说明","未说明 (基准测试显示峰值内存使用显著低于 Spark，空闲时仅需几 MB)",{"notes":115,"python":116,"dependencies":117},"该工具是基于 Rust 原生开发的分布式多模态计算框架，兼容 Spark Connect 协议。无需重写代码即可替代 Spark。支持通过命令行、Python API 或 Kubernetes 部署。生产环境部署需参考官方文档构建 Docker 镜像。由于是 Rust 实现，无 JVM 开销，启动速度快且内存安全。","未说明 (需安装 pysail 和 pyspark)",[118,119],"pysail","pyspark>=4.0 (推荐包含 connect 支持)",[16,14],[122,123,124,125,126,127,128,129,130,131,132,133,134],"arrow","big-data","data","pyspark","rust","spark","sql","datafusion","python","artificial-intelligence","data-engineering","distributed-computing","machine-learning","2026-03-27T02:49:30.150509","2026-04-11T16:55:42.260200",[138,143,148,153,158,162],{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},22342,"为什么在 Sail 中调用 `StructType.toDDL()` 会抛出 `UnsupportedOperationException` 错误？","这是因为该功能在 Sail 的当前版本（如 0.42.0）中尚未完全实现。虽然 PySpark 支持将 `StructType` 对象转换为 SQL DDL 字符串，但 Sail 后端缺少对应的 `json_to_ddl` 分析逻辑。维护者指出需要遵循 JVM Spark 中 `org.apache.spark.sql.types.StructType#toDDL` 方法的实现逻辑，区分简单数据类型（转为大写，如 byte 转 TINYINT）和复杂数据类型（array, map, struct）的处理方式，并可能需要添加专门的格式化函数来处理类型名称差异。","https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fissues\u002F1060",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},22343,"升级 Sail 后，向 Delta Lake 表追加数据时遇到 `QueryExecutionException` 或 schema 转换错误怎么办？","这通常是因为数据集中存在包含非规范 schema 的 checkpoint 文件。最近的 Sail 更新或 Delta 库升级引入了更严格的验证机制，导致加载现有表失败。当加载失败时，系统可能错误地将表视为“不存在”并尝试写入版本 0，从而引发冲突。具体的内部错误通常涉及 Arrow schema 转换失败（例如无法连接不同数据类型的数组）。解决方法是检查并清理具有非标准 schema 的旧 checkpoint 文件，或者等待后续版本对这类历史数据的兼容性修复。","https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fissues\u002F830",{"id":149,"question_zh":150,"answer_zh":151,"source_url":152},22344,"运行 TPC-DS 基准测试查询时，为什么部分查询（如 q21, q34, q70 等）会失败？","查询失败主要有两类原因：\n1. **小数算术与类型强制转换问题**（如 q21, q34, q73）：表达式中包含类似 `* 1.000` 的操作会导致 Decimal 精度不匹配（例如 `Decimal128(14, 4) > Decimal128(19, 7)`），这是上游 DataFusion 的一个已知问题。\n2. **ORDER BY 子句中的聚合表达式问题**（如 q70, q86）：在带有窗口的投影中，直接在 `ORDER BY` 中使用聚合表达式而非别名会导致错误。\n注意：Sail 官方测试集中的查询变体可能规避了这些问题（例如去掉了 `* 1.000` 或使用了别名），因此使用标准 TPC-DS 脚本时可能会暴露这些差异。","https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fissues\u002F197",{"id":154,"question_zh":155,"answer_zh":156,"source_url":157},22345,"为什么 UDTF（用户自定义表函数）在 `local` 模式和 `local-cluster` 模式下行为不一致，甚至在 `local` 模式下抛出 `ZeroDivisionError`？","这种不一致性是由于 `local` 模式下产生了空分区（empty partitions）。当 UDTF 的 `terminate` 方法在空分区上执行时，如果逻辑中包含除以计数器的操作（如计算平均值），就会因为计数器为 0 而抛出 `ZeroDivisionError`。而在 `local-cluster` 模式下，分区逻辑不同，避免了空分区的产生，因此行为与原生 Spark 一致且正确。这是一个已知的行为差异，空分区导致的异常问题已在相关 PR 中修复，但在某些本地测试场景中仍需注意分区策略的影响。","https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fissues\u002F659",{"id":159,"question_zh":160,"answer_zh":161,"source_url":147},22346,"Sail 如何处理不同引擎写入的 Delta Lake 元数据兼容性问题？","Sail 在处理由不同引擎写入的 Delta Lake 元数据时，可能会因为 schema 验证策略的变化而出现兼容性问题。特别是当现有的 checkpoint 文件中包含非规范的 schema 定义时，新版本的严格验证会导致读取失败。维护者建议检查具体的错误日志，确认是否涉及 `Failed to convert into Arrow schema` 错误。对于多写入者场景，需确保所有写入方遵循一致的 schema 规范，避免产生非标准的元数据文件。",{"id":163,"question_zh":164,"answer_zh":165,"source_url":142},22347,"如何在 Sail 中正确实现类似 JVM Spark 的 DDL 类型格式化逻辑？","实现 DDL 类型格式化时，不能简单复制现有逻辑，而应遵循 JVM Spark 的标准：\n1. 对于简单数据类型，应将类型名称转换为大写（例如 `byte` 应显示为 `TINYINT`），这与 JVM Spark 的 `DataType.sql` 行为一致。\n2. 对于复杂数据类型（如 array, map, struct），需要单独处理其内部结构的递归格式化。\n3. 需要注意 `typeName` 和 `sql` (或 `simpleString`) 之间的区别，必要时引入专门的 `format_ddl_type` 函数来处理这种映射，而不是复用通用的类型名称格式化函数。",[167,172,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257],{"id":168,"version":169,"summary_zh":170,"released_at":171},136075,"v0.5.3","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-5-3)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.5.3\u002F) 上发布。\n\n## 变更内容\n* 依赖（npm）：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1453 中将 all 组的依赖更新了两次。\n* 依赖（cargo）：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1454 中将 all 组的依赖更新了五次。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1394 中将通配符扩展为列引用，用于 COUNT(DISTINCT *)。\n* 杂项：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1457 中升级了 `rand`、`rand_chacha` 和 `rand_distr`。\n* 杂项：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1458 中升级了 `kube` 和 `k8s-openapi`。\n* 杂项：@lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1463 中为 Copilot 代理提供了 BDD 风格的测试指南。\n* 杂项：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1467 中将 cargo 组中的 aws-lc-sys 从 0.37.0 升级到 0.37.1，涉及一个目录。\n* 功能：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1465 中实现了按配置间隔发出执行指标的功能。\n* 功能：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1466 中支持 `CatalogCommand` 的序列化。\n* 功能：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1464 中添加了系统表，用于公开 `AppConfig`。\n* 功能：@linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1471 中实现了在目录管理器中管理函数的功能。\n* 修复：@linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1473 中为 `SortPreservingMergeExec` 实现了分布式计划。\n* 杂项：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1475 中将 npm_and_yarn 组中的 svgo 从 4.0.0 升级到 4.0.1，涉及一个目录。\n* 修复：@lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1477 中更新了 Delta Lake 下推过滤器中的模式引用。\n* 修复：@shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1469 中实现了在 Python 数据源中使用 SQL 的功能。\n* 杂项：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1476 中将 MSRV 提升至 1.91.0。\n* 重构：@lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1346 中使日志扫描子树与 Delta Lake 的表提供程序扫描对齐。\n* 修复：@linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1480 中修正了 `CREATE DATABASE` 的 SQL 语法。\n* 功能：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1479 中将目录命令移至物理计划。\n* 修复：@linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1484 中改进了目录提供程序的命名空间处理。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1488 中截断 gRPC 错误消息，以防止 RESOURCE_EXHAUSTED 错误。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1482 中支持窗口 RANGE 框架边界的非字面量表达式。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1483 中确保 CollectLeft HashJoinExec 构建侧只有一个分区。\n* 功能：@Cop","2026-03-21T06:29:18",{"id":173,"version":174,"summary_zh":175,"released_at":176},136076,"v0.5.2","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-5-2)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.5.2\u002F) 上发布。\n\n## 变更内容\n* 依赖（npm）：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1380 中将所有分组的依赖更新了 6 项。\n* 功能：@zemin-piao 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1379 中实现了自定义的 Python Postgres 数据源。\n* 依赖（cargo）：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1382 中将所有分组的依赖更新了 19 项。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1386 中修复了 SQL 点号表示法中结构体字段提取时使用字面量的问题。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1387 中修正了 SQL 分析器中 TRIM\u002FLTRIM\u002FRTRIM 函数参数顺序的问题。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1393 中改进了 `parse_url` 和 `try_parse_url` 类型转换，使其能够接受 NULL 参数。\n* 杂项：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1401 中将 npm_and_yarn 分组下的一个目录中的依赖更新了 2 项。\n* 依赖（npm）：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1403 中将所有分组的依赖更新了 7 项。\n* 依赖（npm）：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1404 中将 breaking 分组的依赖更新了 2 项。\n* 依赖（cargo）：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1405 中将所有分组的依赖更新了 17 项。\n* 功能：@zemin-piao 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1389 中用通用 JDBC 数据源替换了 Postgres 数据源。\n* 功能：@tamirkifle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1358 中添加了对 TIME 类型的支持（Spark 4.0 的新特性）。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1390 中修复了在 ANSI 模式关闭时，CAST(date AS numeric) 返回 NULL 的问题。\n* 修复：@davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1304 中处理了 ANSI 模式下小数除以零的情况。\n* 功能：@lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1359 中为 MergeCardinalityCheckExec 添加了哈希分区支持。\n* 功能：@santosh-d3vpl3x 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1378 中实现了 Python 数据源写入的 MVP。\n* 重构：@lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1308 中移除了部分 sqlparser 的使用。\n* 重构：@lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1415 中引入了 TableSource 重写器。\n* 杂项：@linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1417 中增加了 Copilot 代理任务的设置。\n* 杂项：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1418 中将 chumsky 升级至 0.12.0。\n* 杂项：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1414 中将 npm_and_yarn 分组下一个目录下的 rollup 从 4.56.0 升级到 4.59.0。\n* 杂项：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1421 中使用 `educe` 推导出 `PartialOrd`。\n* 杂项：@Copilot 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1425 中使用 `educe` 推导出 `PartialOrd`。\n* 重构：@lonless9 在 https:\u002F\u002Fgithub.c","2026-03-02T14:26:03",{"id":178,"version":179,"summary_zh":180,"released_at":181},136077,"v0.5.1","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-5-1)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.5.1\u002F) 上发布。\n\n## 变更内容\n* 功能：由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1323 中实现 regexp_substr 字符串函数。\n* 文档：由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1330 中更新 DML 支持状态。\n* 修复：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1327 中处理 SparkConcat 中的空数组拼接问题。\n* 功能：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1071 中添加 `percentile` 聚合函数。\n* 杂项：由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1333 中跳过 Ibis 的慢速测试。\n* 修复：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1331 中允许具有遮蔽行为的重复 CTE 名称。\n* 功能：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1329 中实现支持数组的 Spark 兼容 `concat_ws` 函数。\n* 功能：由 @santosh-d3vpl3x 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1291 中为自定义数据源添加 PySpark Python 数据源 API。\n* 杂项：由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1338 中跳过发生段错误的 PySpark 对等性测试。\n* 杂项：由 @santosh-d3vpl3x 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1336 中使用 pyspark.cloudpickle，并对读取器使用 pickle。\n* 功能：由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1324 中实现 format_number 字符串函数。\n* 功能：由 @james-willis 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1325 中添加 Geometry 和 Geography 空间类型（Spark 4.1）。\n* 依赖（npm）：由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1342 中将所有组别版本提升 5 个更新。\n* 依赖（cargo）：由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1344 中将所有组别版本提升 6 个更新。\n* 杂项：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1340 中提升 Ibis 版本。\n* 测试：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1337 中关闭 Ibis 的 ANSI 模式。\n* 功能：由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1322 中实现 histogram_numeric 聚合函数。\n* 修复：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1286 中使 `ntile` 窗口函数的行分布与 Spark 兼容。\n* 功能：由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1307 中在 DataFrameWriterV2 API 中支持分区转换。\n* 功能：由 @wudihero2 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1347 中实现 format_string 函数。\n* 功能：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1349 中在 SQL 解析器中支持 `try_cast` 函数。\n* 功能：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1273 中支持 `Dataframe.mergeInto` 函数。\n* 修复：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1204 中完善 spark_sequence 函数对日期序列的支持。\n* 修复：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1341 中改进与 Spark 兼容的时间函数。\n* 功能：由 @pomykalakyle 在 ht 中通过 WithRelations 支持 DataFrame 子查询表达式。","2026-02-15T14:46:20",{"id":183,"version":184,"summary_zh":185,"released_at":186},136078,"v0.5.0","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-5-0)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.5.0\u002F) 上发布。\n\n## 变更内容\n* docs: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1209 中进行的 minor 更新\n* feat: 由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1206 中实现的百分位数分区功能\n* refactor: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1186 中移植的部分 JSON 函数\n* feat: 由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1200 中实现的无需 Lambda 表达式的 `array_sort` 支持\n* feat: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1164 中重新设计的任务图和任务调度逻辑\n* chore: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1213 中改进的 CI 工作流\n* fix: 由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1187 中修复的在 `collect_set` 和 `collect_list` 中忽略空值的问题\n* fix: 由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1221 中修复的 `try_cast` 对于无效日期\u002F时间戳值返回 NULL 的问题\n* feat: 由 @fafacao86 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1223 中实现的 CSV 数据帧读取器的 `infschema` 选项支持\n* feat: 由 @djouallah 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1217 中添加的 OneLake 目录集成\n* fix: 由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1227 中为 Windows 兼容性向 `git apply` 添加 `--ignore-whitespace` 参数\n* fix: 由 @djouallah 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1228 中完成的 OneLake 目录类型映射和模式查找\n* deps(cargo): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1232 中将所有依赖项组更新 6 次\n* deps(npm): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1231 中将所有依赖项组更新 7 次\n* fix: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1234 中修复的针对连接重排安全处理投影、派生表达式和非等值连接的问题\n* fix: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1238 中为测试固定 Pandas 版本\n* refactor: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1169 中重构的 Iceberg 的 Arrow 操作模式\n* feat: 由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1235 中实现的 `randomSplit` 的 `deterministic_order` 排序功能\n* chore: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1240 中添加的在 CI 工作流中列出已安装 Python 包的步骤\n* chore: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1241 中跳过导致超时的 Ibis 测试\n* feat: 由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1243 中添加的 `colRegex` 功能\n* chore: 由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1244 中更新依赖项、修复 lint 错误并移除 `unwrap` 和 `expect` 的使用\n* feat: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1216 中实现的系统目录\n* feat: 由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1218 中添加的 `to_json` 函数\n* deps(npm): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1249 中将所有依赖项组更新 4 次\n* deps(cargo): 由 @dependabot[bo","2026-02-06T07:15:53",{"id":188,"version":189,"summary_zh":190,"released_at":191},136079,"v0.4.6","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-4-6)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.4.6\u002F) 上发布。\n\n## 变更内容\n* docs: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1154 中修复了变更日志\n* deps(cargo): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1150 中将所有依赖项组更新了 8 个版本\n* deps(npm): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1152 中将所有依赖项组更新了 6 个版本\n* chore: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1155 中为 Spark 4.1 设置测试套件\n* chore: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1156 中上传 Ibis 测试报告\n* chore: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1157 中并行运行 Spark 测试\n* feat: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1146 中为 Delta Lake 添加基数检查\n* refactor: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1138 中重构会话管理器\n* feat: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1159 中清理 Delta Lake 的会话和 SQL 使用\n* chore: 由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1160 中执行 Cargo 更新\n* feat: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1158 中启用 DDL 样式的列映射，并优化 Delta Lake 的 BDD 测试\n* deps(cargo): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1165 中将所有依赖项组更新了 3 个版本\n* deps(npm): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1167 中将所有依赖项组更新了 3 个版本\n* chore: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1094 中设置 Codecov 数据延续\n* chore: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1168 中忽略覆盖率状态\n* chore: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1170 中手动设置 Codecov 标志\n* docs: 由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1172 中添加对 Windows LLVM 链接器的要求\n* docs: 由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1173 中添加与 PySail 和 Rust 绑定相关的文档字符串\n* deps(cargo): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1175 中将所有依赖项组更新了 4 个版本\n* deps(npm): 由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1177 中将所有依赖项组更新了 3 个版本\n* chore: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1171 中优化 CI 工作流\n* chore: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1181 中移除 Codecov 的条件检查\n* refactor: 由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1180 中提取命令处理器并添加文档\n* feat: 由 @pomykalakyle 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1179 中添加对 Delta Lake 的支持，并在 TPC-H 基准测试中加入加载时选项\n* feat: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1185 中允许 CSV 读取器处理截断的行\n* feat: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1161 中为 Delta Lake 提供 Arrow 原生操作和分布式日志扫描功能\n* feat: 记录兼容性检查","2026-01-13T11:30:58",{"id":193,"version":194,"summary_zh":195,"released_at":196},136080,"v0.4.5","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-4-5)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.4.5\u002F) 上发布。\n\n## 变更内容\n* 修复：确保快照文件以 LF 换行符存储，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1123 中完成。\n* 新特性：移除会话，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1125 中完成。\n* 修复：获取可选的 Spark 配置，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1126 中完成。\n* 新特性：为执行指标添加更多属性和定义，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1119 中完成。\n* 重构：简化 Actor 操作，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1128 中完成。\n* 依赖项（Cargo）：将所有组别升级 9 次，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1129 中完成。\n* 依赖项（npm）：将所有组别升级 10 次，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1131 中完成。\n* 依赖项（Cargo）：将破坏性更新组别升级 3 次，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1130 中完成。\n* 新特性：为 Delta Lake 实现基本的合并操作，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1093 中完成。\n* 修复：从编解码器中移除 `SessionContext`，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1134 中完成。\n* 修复：确保 Delta 日志 JSON 文件包含操作详情，并为 Delta Lake 设置快照测试，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1133 中完成。\n* 重构：拆分驱动逻辑，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1135 中完成。\n* 新特性：为 Delta Lake 设置指标并启用检查点，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1136 中完成。\n* 重构：改进工作节点对等客户端管理，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1137 中完成。\n* 新特性：重构 DataFusion 函数 51，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1105 中完成。\n* 杂项：各类操作不应失败，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1140 中完成。\n* 杂项：更新 Parquet 配置选项，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1141 中完成。\n* 修复：修正 MergeIntoWriteNode 的哈希值，并避免 explain 语句的副作用，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1139 中完成。\n* 修复：确保表达式求值器使用正确的统计类型，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1144 中完成。\n* 新特性：为 Spark 4.1 更新协议和配置，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1145 中完成。\n* 修复：生成不含物理优化的初始物理计划，以避免误导性的计划步骤，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1147 中完成。\n* 修复：针对 Spark 4.1 的不兼容 UDF 序列化程序，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1148 中完成。\n* 杂项：准备 v0.4.5 版本，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1143 中完成。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.4.4...v0.4.5","2025-12-22T15:01:30",{"id":198,"version":199,"summary_zh":200,"released_at":201},136081,"v0.4.4","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-4-4)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.4.4\u002F) 上发布。\n\n## 变更内容\n* chore：回滚 hatch 版本的固定版本，并由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1090 中解决 ruff 警告。\n* fix：由 @YichiZhang0613 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1098 中修复断言消息。\n* feat：由 @zemin-piao 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1103 中实现将自定义 Kubernetes 标签传递给 sail 工作节点的功能。\n* feat：由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1097 中支持 OpenTelemetry 导出器和分布式追踪。\n* deps(cargo)：由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1101 中将 all 组中的 serde_with 从 3.16.0 升级到 3.16.1。\n* deps(npm)：由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1100 中对 all 组进行 4 次更新。\n* deps(cargo)：由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1102 中对 breaking 组进行 2 次更新。\n* refactor：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1099 中反转数据源注册的依赖关系。\n* feat：由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1106 中为 datafusion 51 添加新功能。\n* feat：由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1104 中实现查询执行追踪。\n* fix：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1095 中处理 Delta Lake 的 Timestamp 和 TimestampNTZ 写入问题。\n* fix：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1108 中解决分区列不匹配问题，并在写入时验证规范。\n* deps(cargo)：由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1112 中对 all 组进行 3 次更新。\n* deps(npm)：由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1113 中对 all 组进行 6 次更新。\n* fix：由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1111 中优化 shuffle 消费计划。\n* feat：由 @keen85 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1075 中添加 PySpark 函数扫描器和 sail 覆盖率。\n* refactor：由 @gstvg 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1115 中使用 arrow take_record_batch。\n* feat：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1110 中重新设计 explain 语句。\n* feat：由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1116 中报告执行指标。\n* fix：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1109 中处理 Delta Lake 的列映射下的分区问题。\n* fix：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1117 中改进并发创建 Delta 和盲追加操作的冲突检查与重试机制。\n* chore：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1118 中解决 clippy 1.92.0 的警告。\n* fix：由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1121 中确保 `GlobalLimitExec` 的输入为单一分区。\n* chore：由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1120 中准备 v0.4.4。\n\n## 新贡献者\n* @YichiZhang0613 在 https: 中做出了他们的首次贡献。","2025-12-12T07:14:26",{"id":203,"version":204,"summary_zh":205,"released_at":206},136082,"v0.4.3","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-4-3)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.4.3\u002F) 上发布。\n\n## 变更内容\n* 功能：添加 CI ibis 测试，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1033 中完成。\n* 杂项：添加 Apache 许可证头，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1054 中完成。\n* 修复：修正 Apache 许可证头，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1055 中完成。\n* 修复：signum 添加 Decimal128 支持，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1056 中完成。\n* 杂项：优化文档以提高清晰度，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1058 中完成。\n* 修复：max_by 和 min_by 实现，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1049 中完成。\n* 文档：Apollo.io 集成，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1064 中完成。\n* 重构：greatest 和 least 函数重构，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1057 中完成。\n* 杂项：datafusion 51 更新，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1031 中完成。\n* 重构：迁移到 `delta-kernel-rs` 基础库，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1065 中完成。\n* 杂项：使用 cargo-nextest 进行测试，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1070 中完成。\n* 杂项：跳过不稳定测试，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1079 中完成。\n* 依赖（Cargo）：所有组别更新 9 项，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1080 中完成。\n* 依赖（npm）：所有组别更新 9 项，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1083 中完成。\n* 功能：为 interval 类型添加 `div` 操作，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1077 中完成。\n* 功能：允许对 SQL 语句执行 `EXPLAIN`，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1078 中完成。\n* 功能：Iceberg 的模式演化支持，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1048 中完成。\n* 文档：小幅更新，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1085 中完成。\n* 杂项：更新至 delta-kernel-rs 0.18.1 和 arrow 57.1.0，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1084 中完成。\n* 杂项：在 CI 环境中将 hatch 版本固定为 1.15.1，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1088 中完成。\n* 重构：改进 Delta Lake 的错误处理机制，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1086 中完成。\n* 杂项：移除操作系统原生 SSL 依赖，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1087 中完成。\n* 杂项：准备 v0.4.3 版本，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1089 中完成。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.4.2...v0.4.3","2025-11-27T07:31:38",{"id":208,"version":209,"summary_zh":210,"released_at":211},136083,"v0.4.2","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-4-2)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.4.2\u002F) 上发布。\n\n## 变更内容\n* 修复：确保跨引擎 Iceberg 读取使用绝对路径，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1006 中完成。\n* 重构：整合冗余逻辑并提升 Iceberg 的可重用性，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1009 中完成。\n* 依赖（npm）：所有组别更新 6 次，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1027 中完成。\n* 依赖（cargo）：所有组别更新 5 次，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1025 中完成。\n* 修复：为 to_date 函数添加时间戳数据类型支持，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1024 中完成。\n* 杂项：更新 claude 代码，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1030 中完成。\n* 新特性：添加 `try_avg Aggregate` 函数，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1012 中完成。\n* 杂项：升级 ibis 测试，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1029 中完成。\n* 测试：设置 SQL BDD 测试，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1032 中完成。\n* 依赖（npm）：所有组别更新 5 次，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1035 中完成。\n* 杂项：跳过 dependabot 的 codecov 报告上传，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1038 中完成。\n* 依赖（cargo）：所有组别更新 6 次，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1036 中完成。\n* 重构：使用 datafusion 50 函数，由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F909 中完成。\n* 新特性：为 Iceberg 添加时间旅行功能，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1039 中完成。\n* 新特性：为 Delta Lake 添加列映射功能，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F985 中完成。\n* 新特性：引入 unity 目录功能，由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1005 中完成。\n* 新特性：支持 `try_` 窗口函数，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1040 中完成。\n* 修复：移除 PyO3 的 `auto-initialize` 功能，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1043 中完成。\n* 杂项：添加用于临时多平台构建的工作流，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1044 中完成。\n* 修复：修正多平台构建的输入问题，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1045、1046、1047 中分别完成。\n* 修复：解决 Windows 平台上 Iceberg 路径处理问题，由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1042 中完成。\n* 杂项：准备 v0.4.2 版本，由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1041 和 1051 中完成。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.4.1...v0.4.2","2025-11-13T11:36:29",{"id":213,"version":214,"summary_zh":215,"released_at":216},136084,"v0.4.1","## 概述\n您可以在[文档](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-4-1)中找到发布摘要。\n\nPySail Python 包已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.4.1\u002F) 上发布。\n\n## 变更内容\n* docs: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F999 中修复目录指南中的拼写错误\n* feat: 由 @davidlghellin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F960 中添加 `try_sum Aggregate` 函数\n* feat: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1003 中实现 Iceberg 的分区写入操作\n* chore: 由 @lonless9 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1004 中处理 clippy 1.91 警告\n* fix: 由 @shehabgamin 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1008 中仅在必要时使用重命名表提供程序\n* docs: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1016 中编写 Iceberg 分区表指南\n* chore: 由 @linhr 在 https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F1022 中准备 v0.4.1 版本\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.4.0...v0.4.1","2025-11-02T07:09:15",{"id":218,"version":219,"summary_zh":220,"released_at":221},136085,"v0.4.0","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-4-0).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.4.0\u002F).\r\n\r\n## What's Changed\r\n* chore: update Rust toolchain installation commands by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F943\r\n* deps(npm): bump @tailwindcss\u002Fvite from 4.1.13 to 4.1.14 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F953\r\n* deps(npm): bump sql-formatter from 15.6.9 to 15.6.10 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F954\r\n* deps(npm): bump @eslint\u002Fjs from 9.36.0 to 9.37.0 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F955\r\n* chore: update docs by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F958\r\n* fix: `count_distinct(multiple, args)` by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F957\r\n* deps(cargo): bump monostate from 1.0.0 to 1.0.1 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F952\r\n* fix: fail fast for invalid gold test paths by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F942\r\n* refactor: item taker by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F941\r\n* feat: add --experimental_allow_proto3_optional when building proto by @zemin-piao in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F959\r\n* feat: syntax description for SQL AST by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F946\r\n* refactor: share scan utilities for Delta Lake by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F921\r\n* feat: get SQL text from AST by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F962\r\n* chore: update dependencies by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F970\r\n* fix: work around dependabot regression by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F971\r\n* deps(cargo): bump the all group with 5 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F973\r\n* deps(npm): bump the all group with 6 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F972\r\n* feat: iceberg rest catalog client generation by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F961\r\n* feat: basic read operation for Iceberg by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F944\r\n* chore: execution configs by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F975\r\n* fix: correct subset logic in get_edges_contained_in_set by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F969\r\n* deps(npm): bump the all group with 7 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F978\r\n* feat: iceberg arrow conversion by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F987\r\n* feat: iceberg rest catalog provider by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F974\r\n* Enrich HDFS doc with kerberos support info by @zemin-piao in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F992\r\n* deps(cargo): bump testcontainers from 0.25.0 to 0.25.1 in the all group by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F990\r\n* fix: iceberg catalog create_namespace by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F993\r\n* feat: basic write operation for Iceberg by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F976\r\n* refactor: remove `IcebergObjectStore ` by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F994\r\n* chore: follow-up changes for Iceberg catalog by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F995\r\n* fix: allow appending to non-existent Iceberg table by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F997\r\n* docs: catalog guide and Iceberg guide by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F998\r\n* chore: prepare v0.4.0 by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F996\r\n\r\n## New Contributors\r\n* @zemin-piao made their first contribution in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F959\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.3.7...v0.4.0","2025-10-29T14:57:30",{"id":223,"version":224,"summary_zh":225,"released_at":226},136086,"v0.3.7","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-3-7).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.3.7\u002F).\r\n\r\n## What's Changed\r\n* chore: update Cargo dependencies by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F937\r\n* chore: update chumsky to 0.11 by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F938\r\n* chore: update npm dependencies by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F939\r\n* chore: deny macros used for development by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F940\r\n* feat: df.unpivot method by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F948\r\n* chore: cargo deps by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F949\r\n* docs: add guide for SQL operators by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F947\r\n* chore: prepare v0.3.7 by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F950\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.3.6...v0.3.7","2025-10-03T10:10:14",{"id":228,"version":229,"summary_zh":230,"released_at":231},136087,"v0.3.6","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-3-6).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.3.6\u002F).\r\n\r\n## What's Changed\r\n* feat: add `elt` function by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F820\r\n* feat: inline and inline_outer funcs, fix: emty and all-null array datatype by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F841\r\n* feat: add `try_parse_url` function by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F824\r\n* feat: kustomize + support pod template for Sail workers by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F833\r\n* feat: stack function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F843\r\n* fix: robots meta tag for docs by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F845\r\n* revert: robots meta tag for docs by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F846\r\n* fix: try_multiply function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F847\r\n* deps(npm): bump the all group with 11 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F850\r\n* deps(cargo): bump the all group with 6 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F851\r\n* feat: add `make_dt_interval` function by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F835\r\n* chore: touch up docs by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F852\r\n* fix: session key without user ID by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F849\r\n* refactor: handle side-effect of replaceWhere for Delta Lake by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F848\r\n* feat: time travel for Delta Lake by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F854\r\n* feat: binary file reader by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F853\r\n* chore: docs update by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F858\r\n* feat: add `version` function by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F855\r\n* feat: months_between func, chore: refactor datetime funcs by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F859\r\n* feat: add `user` and `session_user` functions by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F860\r\n* chore: add basic function docs, missing functions, and aggregate functions to window list by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F861\r\n* fix: string escape by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F868\r\n* chore: disable tracer by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F869\r\n* fix: `map_from_arrays`, `from values` column indices by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F878\r\n* fix: utc in timestamp literal by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F872\r\n* chore: use Claude Sonnet 4 for Claude Code by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F879\r\n* docs: sql features, literals (update) by @everettroeth in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F864\r\n* deps(npm): bump the all group with 5 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F882\r\n* fix: exponential type parsing by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F873\r\n* chore: reorganize udf functions for consistency by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F880\r\n* feat: set up streaming events by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F832\r\n* fix: fetch DuckDB arrow data in tests by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F884\r\n* deps(cargo): bump the all group with 2 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F881\r\n* feat: mcp batch create views by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F875\r\n* fix: avoid repartitioning child for PySpark UDTF by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F662\r\n* feat: applyInArrow by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F886\r\n* refactor: readme touchup by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F888\r\n* docs: introduction (added word \"multimodal\") by @everettroeth in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F889\r\n* feat: cogrouped applyInArrow by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F887\r\n* fix: df.replace() method by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F891\r\n* fix: parsing real by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F892\r\n* fix: arrow-batched UDF with no args by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F895\r\n* docs: update SQL literal guide by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F896\r\n* chore: add README images by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F897\r\n* chore: optimize README by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F898\r\n* deps(npm): bump eslint-plugin-vue from 10.4.0 to 10.5.0 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F903\r\n* chore: upgrade Delta dependencies by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F899\r\n* deps: upgrade eslint by @linhr in https:\u002F\u002Fgithub.com\u002Flake","2025-09-30T05:08:33",{"id":233,"version":234,"summary_zh":235,"released_at":236},136088,"v0.3.5","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-3-5).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.3.5\u002F).\r\n\r\n## What's Changed\r\n* fix: changelog by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F821\r\n* fix: changelog by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F823\r\n* fix: empty map type in from values, explode map with null values by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F829\r\n* feat: set up sail-physical-optimizer by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F831\r\n* fix: writing Delta table with partitioned inputs by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F837\r\n* chore: prepare v0.3.5 by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F838\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.3.4...v0.3.5","2025-09-05T12:55:58",{"id":238,"version":239,"summary_zh":240,"released_at":241},136089,"v0.3.4","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-3-4).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.3.4\u002F).\r\n\r\n## What's Changed\r\n* feat: add `try_mod` function Spark 4.0.0 by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F727\r\n* feat: add `make_interval` function by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F682\r\n* fix: adjust default session timeout and update docs by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F761\r\n* fix: reading and writing compressed files by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F760\r\n* fix: nth_value failure on ignoreNulls=true by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F767\r\n* fix: withColumnsRenamed result if chained renames in one input by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F764\r\n* fix: window functions inconsistent uint64 return type by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F765\r\n* fix: median return type to double by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F769\r\n* deps(npm): bump the all group with 5 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F771\r\n* deps(cargo): bump the all group with 4 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F770\r\n* refactor: split plan resolver by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F772\r\n* feat: map_entries func, map keys deduplication logic by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F774\r\n* chore: code coverage by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F758\r\n* refactor: split expression resolver by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F775\r\n* fix: predicate negation for SQL by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F776\r\n* feat: map_from_entries, unify all ways to create a map in MapFunction by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F777\r\n* chore: add url codecov in README by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F778\r\n* feat: `split` function by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F722\r\n* feat: text file format by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F737\r\n* feat: map_concat func, args check for map(k, v) func by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F779\r\n* refactor: split data source options resolver by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F781\r\n* chore: codecov config by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F780\r\n* feat: support DeltaPlan for Delta Lake by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F768\r\n* chore: update data format docs by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F783\r\n* fix: `element_at` and `try_element_at` inconsistent error treatment, chore: simplify, unify by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F785\r\n* chore: refactor array and collection modules by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F786\r\n* docs: update unsupported SQL features by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F788\r\n* fix: upload codecov report after tests finished by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F782\r\n* feat: str_to_map function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F787\r\n* feat: add `width_bucket` function by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F762\r\n* fix: position and locate funcs with startpos arg by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F789\r\n* fix: projection optimization for extension logical nodes by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F790\r\n* deps(npm): bump the all group with 4 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F791\r\n* deps(cargo): bump the all group with 7 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F792\r\n* fix: split func type coersion, perf: split, str_to_map with scalar args by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F795\r\n* chore: update cargo deps by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F796\r\n* feat: regex_instr,  fix: string funcs type casting, chore: string funcs refactoring by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F798\r\n* feat: support Spark Connect streaming API by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F751\r\n* feat: json_object_keys, fix: get_json_object with scalar by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F801\r\n* refactor: kernel log replay for Delta Lake by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F794\r\n* feat: collect_list(cols) over (window_frame) by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F806\r\n* refactor: use topandas in derived tpch example by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F807\r\n* fix: data sink exec by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F813\r\n* fix: deterministic schema for `withColumns` by @linhr in https:\u002F\u002Fgithub.co","2025-09-03T03:29:29",{"id":243,"version":244,"summary_zh":245,"released_at":246},136090,"v0.3.3","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-3-3).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.3.3\u002F).\r\n\r\n## What's Changed\r\n* feat: convert_timezone, make_timestamp_ltz funcs by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F725\r\n* fix: skewness and kurtosis funcs by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F730\r\n* fix: logarithm funcs results on non-positive input by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F734\r\n* fix: turn off bloom filter for Parquet write by default by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F735\r\n* fix: from values containing NaN cast error by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F739\r\n* feat: add `try_to_number` function by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F670\r\n* fix: math functions return type, infinity show() text, csc out colname by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F743\r\n* deps(cargo): bump the all group with 4 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F744\r\n* chore: update readme by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F746\r\n* deps(npm): bump the all group with 7 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F745\r\n* fix: catalog get table command by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F752\r\n* fix: remove DeltaScan and unify schema evolution paths for Delta Lake by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F750\r\n* fix: json_array_length return type by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F754\r\n* fix: map_contains_key returning true on non-existent keys by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F756\r\n* chore: prepare v0.3.3 by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F753\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.3.2...v0.3.3","2025-08-14T04:41:12",{"id":248,"version":249,"summary_zh":250,"released_at":251},136091,"v0.3.2","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-3-2).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.3.2\u002F).\r\n\r\n## What's Changed\r\n* fix: release notes download by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F605\r\n* deps(npm): bump the all group with 7 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F607\r\n* deps(npm): bump vue-tsc from 2.2.10 to 3.0.1 in the breaking group by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F608\r\n* chore: bump datafusion by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F611\r\n* fix: date_part('seconds', col) inconsistent type and value by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F609\r\n* docs: update brand colors by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F612\r\n* support `nullifzero` and `zeroifnull` by @jamesfricker in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F613\r\n* fix: resolve options for external table read by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F592\r\n* refactor: move catalog code to a separate crate by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F615\r\n* fix: array_contains inconsistent null logic by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F619\r\n* fix: array_position inconsistent result and internal_error in some cases by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F621\r\n* fix: array_append and array_prepend inconsistent NULL behaviour by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F623\r\n* chore: address clippy lints by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F624\r\n* deps(cargo): bump the all group with 4 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F625\r\n* deps(npm): bump the all group with 7 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F626\r\n* fix: inconsistent size, array_size and cardinality logic by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F617\r\n* refactor: data source format by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F628\r\n* feat: basic read\u002Fwrite operations for Delta Lake by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F578\r\n* feat: add `from_csv` udf function by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F529\r\n* feat: add functions math by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F580\r\n* fix: codec for `from_csv` by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F633\r\n* fix: array_agg null values treatment by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F640\r\n* feat: bit_count, bit_get, shiftrightunsigned, unary_not bitwise functions by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F645\r\n* perf: collect_set and array_agg functions by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F644\r\n* fix: flatten function inconsistent null behaviour by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F642\r\n* fix: arrays_overlap function behaviour on inputs containing NULL by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F643\r\n* fix: case when else expr inconsistent eager evaluation by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F649\r\n* feat: add array_insert function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F638\r\n* fix: concat function behaviour on some subset of input types by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F647\r\n* feat: support Azure and GCS for object store by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F616\r\n* fix: maxRecordsPerBatch negative and zero value by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F652\r\n* feat: listagg function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F654\r\n* chore: update cargo deps by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F656\r\n* feat: support Spark URL functions by @anhvdq in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F539\r\n* chore: rewrite cardinality, size, array_size, deep_size functions using pure datafusion exprs by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F660\r\n* feat: bitmap scalar functions by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F661\r\n* fix: pysparktableudf behaviour on empty partitions with no recordbatches by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F658\r\n* feat: add `to_number` function by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F629\r\n* deps(npm): bump the all group with 9 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F663\r\n* deps(cargo): bump tokio from 1.46.1 to 1.47.0 in the all group by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F664\r\n* fix: map_function DataType::Null inputs by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F666\r\n* fix: column output naming by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F668\r\n* feat: catalog manager and provider redesign ","2025-08-08T14:13:34",{"id":253,"version":254,"summary_zh":255,"released_at":256},136092,"v0.3.1","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-3-1).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.3.1\u002F).\r\n\r\n## What's Changed\r\n* fix: release workflow by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F567\r\n* chore: update Arrow to 55.2.0 by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F564\r\n* ci: validate pull request title by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F569\r\n* feat: dayname function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F570\r\n* feat: add zeroifnull and nullifzero functions by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F571\r\n* ci: fix PR validation workflow by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F573\r\n* refactor: move object_store code to `sail-object-store` by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F576\r\n* ci: trigger Claude on PR review by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F577\r\n* deps(npm): bump the all group with 6 updates by @dependabot in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F581\r\n* feat: string split to array by delim function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F582\r\n* feat: collect_set function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F585\r\n* feat: count_if function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F586\r\n* refactor: data source options by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F587\r\n* perf: improve data source listing by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F579\r\n* feat: support SQL `SHOW` statements by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F588\r\n* docs: add notes on protobuf warnings by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F591\r\n* chore: update deps by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F590\r\n* perf: enable tcp and http\u002F2 keepalive with adaptive window settings by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F593\r\n* chore: clippy deny unwrap, expect, and panic by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F597\r\n* fix: temp fix for resolve options for external table create by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F598\r\n* feat: sampleBy functions by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F547\r\n* fix: avoid `.expect()` in plan resolver by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F599\r\n* fix: from_utc_timestamp function by @SparkApplicationMaster in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F596\r\n* chore: prepare v0.3.1 by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F601\r\n\r\n## New Contributors\r\n* @SparkApplicationMaster made their first contribution in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F570\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fcompare\u002Fv0.3.0...v0.3.1","2025-07-07T05:30:46",{"id":258,"version":259,"summary_zh":260,"released_at":261},136093,"v0.3.0","## Overview\r\nYou can find the release summary in the [documentation](https:\u002F\u002Fdocs.lakesail.com\u002Fsail\u002Flatest\u002Freference\u002Fchangelog\u002F#_0-3-0).\r\n\r\nThe PySail Python package is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpysail\u002F0.3.0\u002F).\r\n\r\n## What's Changed\r\n* Rust 1.87: Fix Clippy Warnings + Update Deps by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F462\r\n* Change default ip in k8s\u002Fsail.yaml by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F463\r\n* Add Dev Container for Sail development environment by @rafafrdz in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F460\r\n* Spark v3.5.5 Patch by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F465\r\n* Add basic docs for configuration by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F468\r\n* Update Spark Connect protocol for Spark 4.0 by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F467\r\n* Bump the all group with 2 updates by @dependabot in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F499\r\n* Support generated config docs by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F497\r\n* Fix gold data test issue by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F504\r\n* Hide a few config options temporarily by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F512\r\n* chore: update dependencies by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F514\r\n* feat: improve s3 performance by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F515\r\n* Improve user guide in the docs by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F503\r\n* feat: CSV Reader Configs by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F466\r\n* Add concept docs and diagrams by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F521\r\n* Add more user guide content by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F519\r\n* Docs set tag in Spark to test by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F524\r\n* Bump the all group with 3 updates by @dependabot in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F522\r\n* Add benchmark plots by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F526\r\n* chore: trigger tests on pr label by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F528\r\n* Hash Functions Coverage and Parity by @lonless9 in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F527\r\n* fix: cast bigint to timestamp by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F533\r\n* fix: rand and randn returning same value for all rows when seeded by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F530\r\n* chore: Upgrade to DataFusion 48.0.0 by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F518\r\n* Bump the all group with 3 updates by @dependabot in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F534\r\n* test: refactor Spark remote fixture by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F536\r\n* docs: add context for Spark examples by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F540\r\n* chore: fix docs links in readme by @pimlie in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F542\r\n* feat: sample functions by @davidlghellin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F496\r\n* chore: update dependabot config (npm & major releases) by @pimlie in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F541\r\n* deps(npm): bump the all group with 9 updates by @dependabot in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F543\r\n* chore: improve GitHub workflows by @pimlie in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F546\r\n* chore: add Claude Code workflow by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F549\r\n* chore: update docs-only workflow by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F550\r\n* deps(cargo): bump the all group with 3 updates by @dependabot in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F551\r\n* chore: update Claude Code setup by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F553\r\n* docs: support development without sphinx pages by @pimlie in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F545\r\n* deps(npm): bump the breaking group across 1 directory with 5 updates by @dependabot in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F552\r\n* chore: update object_store to 0.12.2 by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F525\r\n* deps(cargo): bump fastrace from 0.7.11 to 0.7.12 in the all group by @dependabot in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F555\r\n* test: set up Spark 4.0 tests by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F498\r\n* fix: Spark 4.0 server issue by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F559\r\n* chore: add GitHub Releases workflow by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F558\r\n* feat: data source options by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F535\r\n* fix: missing string UDFs in cluster mode by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F562\r\n* chore: bump Rust version in Dockerfile by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F563\r\n* chore: tweak cluster timeout configs by @shehabgamin in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F565\r\n* chore!: remove `spark` extra for Python by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F560\r\n* chore: prepare v0.3.0 by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F561\r\n* fix: previous version in release workflow by @linhr in https:\u002F\u002Fgithub.com\u002Flakehq\u002Fsail\u002Fpull\u002F566\r\n\r\n##","2025-06-28T07:05:01"]