阿帕奇箭头2.0.0锈色亮点

2020-11-07 18:11:34

对于整个Apache Arrow项目(发行说明),特别是Rust子项目,Apache Arrow 2.0.0是一个重要的发行版,15个贡献者解决了近200个问题。在这篇博客文章中,我们将介绍影响核心箭头、Parquet支持和DataFusion查询引擎的主要更改。可在此处找到已解决问题的完整列表。虽然Java和C/C++(由Python和R使用)Arrow实现可能仍然是功能最丰富的,但在2.0.0版本中,Rust实现正在迅速缩小功能差距。以下是此次发布的一些亮点。Core Arrow Crate Iterator特征基元数组(例如整数数组)现在可以转换为迭代器并从迭代器进行初始化。这将一个非常流行的API-迭代器-暴露给箭头数组。其他类型的工作将持续到3.0.0。改进的可变大小数组可变大小数组(例如,字符串数组)已经进行了内部重构,以便更容易地支持其更大的(64位大小偏移量)版本。这允许我们将一些内核概括到(32和64)两个版本,并在构建它们时执行类型检查。内核在Arrow计算内核中有许多改进,包括:为字符串操作添加了新的内核,包括子串、最小、最大、连接和长度。现在对SIMD实现了聚合求和,比非SIMD操作提高了5倍。许多内核都进行了改进,以支持字典编码的数组。一些内核针对没有空值的数组进行了优化,使其在这种情况下速度大大加快。许多内核都在应用它们所需的内存副本数量和实现上进行了优化。其他改进数组特征现在有了GET_BUFFER_MEMORY_SIZE和GET_ARRAY_MEMORY_SIZE方法来确定分配给数组的内存量。拼花目前正在努力为Arrow数据创建拼花写入器。此工作尚未作为2.0.0的一部分发布,计划在3.0.0版本中发布。该写入器的开发是在铁锈镶木箭写器分部进行的,该分部与主分部定期同步。作为编写器的一部分,阅读器正在添加必要的改进和功能。主要关注点是:支持嵌套的Arrow类型,如LIST<Struct<[Dictionary,String]>>通过在拼图元数据中编码箭头模式来确保读取器和写入器之间的正确往返。改进了拼图的空值写入。创建了一个新的PARQUET_DRIVE框,它允许用户为简单的结构派生拼图记录。有关用法示例,请参阅PARQUET_DRIVE板条箱。DataFusion DataFusion是一个内存查询引擎,带有DataFrame和SQL API,构建在基本箭头支持之上。DataFrame API DataFusion现在有一个更丰富的DataFrame API,改进了显示示例用法的文档,支持以下操作:SELECT_COLUMNS SELECT Filter Aggregate Limit Sort Collect解释性能和可扩展性DataFusion查询执行现在使用与Tokio线程运行时的异步/等待,而不是启动专用线程,从而使查询在可用内核间的伸缩性更好。散列聚合物理运算符已在很大程度上进行了重写,从而显著提高了性能。表达式和计算改进的标量函数DataFusion在SQL和DataFrame API中都有许多新函数:字符串长度Count(DISTINCT列)to_Timestamp IsNull和IsNotNull最小/最大字符串(字典顺序)列的数组字符串连接聚合表达式的别名通过避免内存副本和利用Arrow格式的不变量,许多现有的表达式也得到了显著优化(加速2-3倍)。一元数学函数(如SQRT)现在同时支持32位和64位浮点数,并返回相应的类型,从而在不需要更高精度时允许更快的运算。改进的用户定义函数(UDF)使用和注册UDF的API已得到显著改进,允许用户注册UDF并通过SQL和DataFrame API调用它们。UDF现在还具有与DataFusion函数相同的通用性,包括可变的和动态类型的参数。用户定义的聚合函数(UDAF)DataFusion现在支持用户定义的聚合函数,这些聚合函数可用于执行跨多行、批处理和分区以外的操作。UDAF与DataFusion的函数具有相同的通用性,并且同时支持行更新和批处理更新。您可以查看此示例以了解如何声明和使用UDAF。用户定义的常量DataFusion现在支持注册常量(例如“@Version”),这些常量在执行上下文的持续时间内存在,并且可以从SQL访问。查询规划与优化用户定义的逻辑计划逻辑计划枚举现在可以通过一个扩展变量进行扩展,它接受