CN116113937A - 硬件实现的文件阅读器 - Google Patents
硬件实现的文件阅读器 Download PDFInfo
- Publication number
- CN116113937A CN116113937A CN202180062362.1A CN202180062362A CN116113937A CN 116113937 A CN116113937 A CN 116113937A CN 202180062362 A CN202180062362 A CN 202180062362A CN 116113937 A CN116113937 A CN 116113937A
- Authority
- CN
- China
- Prior art keywords
- column
- reader
- record
- values
- records
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/116—Details of conversion of file system types or formats
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种硬件实现的文件阅读器(20),包括接口(32)、多个硬件实现的列阅读器(36)和记录重构器(40)。该接口被配置成访问包括多个记录的文件(24)。记录根据支持可选值和重复值的嵌套结构存储值。文件以具有多列的列格式存储,每列存储(i)压缩值和(ii)将列中的值与记录的嵌套结构相关联的相对应的压缩结构信息。每个列阅读器被配置成被分配给相应的选定列,以及从选定列的至少一部分读取和解压缩值和结构信息。记录重构器被配置成根据由列阅读器读取的列的至少部分来重构记录中的一个或更多个记录,并输出重构的记录。
Description
发明领域
本发明总体上涉及数字硬件和微处理器设计,且特别是涉及用于硬件实现的文件读取的方法和系统。
发明背景
Apache Parquet是一种流行的列式数据存储格式。Parquet文件具有复杂的层次结构,并且支持多种压缩和编码模式。已经做了一些在硬件中处理Parquet文件的尝试。例如,Van Leeuwen等人在2019年6月4日的CompSys 2019中的“High-throughput conversionof Apache Parquet files to Apache Arrow in-memory format using FPGAs”中描述了Parquet到Arrow转换器。
发明概述
本文描述的本发明的实施例提供了硬件实现的文件阅读器,该文件阅读器包括接口、多个硬件实现的列阅读器和硬件实现的记录重构器。该接口被配置成访问包括多个记录的文件。记录根据支持可选值和重复值的嵌套结构存储值。该文件以具有多列的列格式进行存储,每列存储(i)压缩值和(ii)将列中的值与记录的嵌套结构相关联的相对应的压缩结构信息。每个列阅读器被配置成被分配给相应的选定列,以及从选定列的至少一部分读取值和结构信息并进行解压缩。该记录重构器被配置成根据由该列阅读器读取的该列的至少部分来重构记录中的一个或更多个,以及输出所重构的记录。
在一些实施例中,列格式是Parquet格式,以及结构信息包括值的重复级别(repetition levels)和定义级别(definition levels)。在一个实施例中,该记录重构器被配置成向列阅读器中的一个或更多个施加反向压力(backpressure),以便将列阅读器的相应输出对齐,使其属于不超过预定义数量的相邻记录。
在示例实施例中,该记录重构器被配置成确定每个记录需要从每个列阅读器中获得的相应数据大小,并通过从每个列阅读器获得确定的数据大小来保持列阅读器之间的对齐。在公开的实施例中,给定的列阅读器被配置成在从选定列读取和解压缩后续值和后续结构信息之前,将至少一些解压缩后的值与相对应的解压缩后的结构信息对齐。
在一些实施例中,给定的列阅读器包括被配置成读取和解压缩选定列的值的值阅读器以及被配置成读取和解压缩选定列的结构信息的一个或更多个结构信息阅读器。在示例实施例中,结构信息包括值的重复级别和定义级别,并且结构信息阅读器包括被配置成读取和解压缩重复级别的重复级别阅读器以及被配置成读取和解压缩定义级别的定义级别阅读器。在另一实施例中,给定的列阅读器包括单个阅读器,该单个阅读器被配置成交替地读取和解压缩选定列的值和选定列的结构信息两者。
在又一实施例中,在重构嵌套记录时,该记录重构器被配置成分解嵌套记录的一个或更多个嵌套级别,从而输出多个记录来代替该嵌套记录。在又另一实施例中,响应于重构大于列阅读器数量的列的集合的请求,记录重构器被配置成重构并输出两个或更多个部分记录集合,每个部分记录集合对应于所请求的列的集合的相应子集。
在一些实施例中,该文件阅读器还包括硬件实现的字典电路,该字典电路被配置成从文件中读取用相应键(key)表示一些值的字典,并且随后将从文件中读取的键翻译成相对应的值,以便将翻译后的值放置在重构的记录中。在一个实施例中,该文件阅读器包括将键映射到相应值的字典数据结构,并且字典电路被配置成在从文件读取字典时填充字典数据结构。在一个实施例中,字典电路被配置成将字典的一部分保存在高速缓存中。
在一些实施例中,列阅读器中的一个或更多个和记录重构器被配置成修改从文件读取的一个或更多个值。在示例实施例中,记录重构器被配置成仅输出修改后的值,或者输出从文件读取的值和修改后的值两者。在一个实施例中,记录重构器被配置成基于接收到的查询来指定值的修改。
在另一个实施例中,记录重构器被配置成基于以下中的一项或两项来筛选记录:(i)对值中的一个或更多个定义的标准,以及(ii)接收到的查询。在公开的实施例中,记录重构器包括多个处理引擎,该多个处理引擎被配置成同时重构多个相应记录。
在一些实施例中,记录重构器被配置成并行重构多个记录流。在一个实施例中,记录重构器被配置成彼此独立地重构多个记录流。在公开的实施例中,记录重构器被配置成仅针对记录流的选定子集向列阅读器施加反向压力。
根据本发明的实施例,还提供了用于硬件实现的文件读出的方法。该方法包括使用多个硬件实现的列阅读器访问文件。该文件包括多个记录,以及这些记录根据支持可选值和重复值的嵌套结构存储值。该文件以具有多列的列格式存储,每列存储(i)压缩值和(ii)将列中的值与记录的嵌套结构相关联的相对应的压缩结构信息。每个列阅读器被分配给相应的选定列,并且从选定列的至少一部分读取和解压缩值和结构信息两者。使用硬件实现的记录重构器,根据由列阅读器读取的列的至少部分来重构记录中的一个或更多个,并且输出重构的记录。
根据对本发明的实施例的以下详细描述并结合以下附图,本发明将得到更充分的理解。
附图简述
图1是根据本发明的实施例示意性示出硬件实现的Parquet阅读器的框图;
图2是根据本发明的实施例示意性示出图1的Parquet阅读器中的列阅读器的框图;
图3是根据本发明的实施例示意性示出图2的列阅读器中的部分阅读器的框图;
图4是根据本发明实施例示意性示出图1的Parquet阅读器中的记录重构器的框图;
图5是根据本发明实施例示意性示出图1的Parquet阅读器中的字典翻译电路的框图;以及
图6是根据本发明的实施例示意性示出用于硬件实现的从Parquet文件读出的方法的流程图。
具体实施方式
综述
本文描述的本发明的实施例提供了针对诸如Parquet的文件格式的硬件实现的阅读器以及相关的方法。所公开的技术可以例如作为针对数据库应用被优化的微处理器的一部分来实现,或者在独立设备中实现。
Parquet文件以列格式存储最初被表示为多个记录的数据,每个记录具有存储相应值的多个列。记录可以具有嵌套结构,其中的值可以被定义为“必需的”、“可选的”或“重复的”。例如,考虑一个示例,其中每个记录存储必需的人名、必需的姓、可选的子女名和可选的孙辈名。在嵌套形式中,这样的记录可以写成如下:
这种记录的可替代表示是:
John | Smith | {{Tom,{Alice,Bob}},{Dick},{Harry,{Charlie,Dan,Edna}} |
在Parquet格式中,记录的支持可选值和重复值的嵌套结构由“重复级别”和“定义级别”表示。例如,在2013年9月在题为“Dremel made simple with Parquet”的文章中和在2010年的第36届超大数据库国际会议论文集的第330-339页Melnik等人的“Dremel:Interactive Analysis of Web-Scale Datasets”中详细描述了Parquet格式,特别是表示嵌套记录结构的重复级别和定义级别的使用。
按照Parquet格式,原始表被分成行组,这些行组一个接一个地存储在文件中。属于给定行组的列的部分称为“列块(column-chunk)”。每个行组的数据逐列块地存储在文件中,使得数据具有高度的可压缩性。每个列块被分成页面,这些页面一个接一个地被存储。每个页面包括标题,接着是页面的重复级别,接着是页面的定义级别,接着是页面的值。重复级别、定义级别和值都被压缩,例如,使用Gzip或Snappy压缩进行压缩。
在一些实施例中,硬件实现的阅读器被配置成从Parquet文件读取和解压缩数据,以及重构原始表的选定记录,而不必读取和解压缩整个文件。为此,阅读器被配置成从多个不同的列块并行地读取和解压缩数据,并对齐来自属于相同记录的不同列块的数据。阅读器使用该对齐以根据从各个列块读取的数据来重构整个记录。在一些实施例中,使用反向压力机制来实现对齐,该反向压力机制限制从不同列块读出的速率。在其他实施例中,通过用指示数据所属的记录的标识符标记读取的数据来实现对齐。
在一些实施例中,阅读器包括并行操作的多个硬件实现的列阅读器。每个列阅读器被配置成被分配给相应的选定列,以及从选定列读取和解压缩重复级别、定义级别和值。阅读器还包括记录重构器,该记录重构器对齐由不同列阅读器提供的数据,并根据对齐的数据重构记录。
如上所述,每个Parquet页面包括三个连续的部分——重复级别、定义级别以及值。通常,每个列阅读器被配置成以相互对齐的方式读取和解压缩重复级别、定义级别和值。在一个实施例中,给定的列阅读器包括三个单独的部分阅读器,这些部分阅读器被配置成并行地分别读取和解压缩重复级别、定义级别和值。在另一实施例中,单个部分阅读器被配置成在重复级别、定义级别和值之间交替。
所公开的Parquet阅读器能够从Parquet文件快速且有效地读出数据。所公开的对齐机制使得阅读器能够重构选定记录,同时最小化对不必要的数据的读出和压缩。例如,与传统的读出模式不同,所公开的Parquet阅读器不需要为了重构特定值而读取和解压缩整个Parquet页面。
所公开的阅读器可以被配置成重构和输出连续记录流,或者一个或更多个特定的选定记录。还描述了各种其他的阅读器特征,例如即时字典翻译、读取值的操作以及具有受控嵌套级别的记录重构。
尽管本文描述的实施例主要涉及Parquet格式,但作为示例,所公开的技术可以与其他合适的文件格式一起使用。例如,重复级别和定义级别在本文被视为用于指定记录的嵌套结构的“结构信息”的一个示例。在可替代的实施例中,所公开的技术可以用于实现其他格式的阅读器,其中记录的结构信息以任何其他合适的方式表示。可替代文件格式的一个示例是Apache优化行列(ORC)格式。
系统描述
图1是根据本发明的实施例示意性示出硬件实现的Parquet阅读器20的框图。阅读器20被配置成从Parquet文件读取和重构记录。通常,阅读器20以硬件实现,例如以集成电路(IC)或现场可编程门阵列(FPGA)实现。在一些实施例中,尽管不是必须的,阅读器20被实现为针对数据库应用优化的微处理器的一部分。在一些用例中,阅读器20例如响应于数据库查询根据Parquet文件重构一个或更多个记录并输出。在其他用例中,阅读器20按顺序地重构和输出记录流。也可以应用任何其他用例。
在图1的示例中,阅读器20访问被存储在动态随机存取存储器(DRAM)28中的Parquet文件24。然而,阅读器20通常可以访问被存储在任何其他合适的存储器或存储介质上的Parquet文件24,或者通过网络,例如通过与网络接口控制器(NIC)通信,来访问Parquet文件24。
图1底部的插图示出了Parquet文件24的结构。如上所述,文件24包括多个行组;每个行组包括多个列块;并且每个列块包括多个页面。每个页面包括标题,接着是页面的重复级别,接着是页面的定义级别,接着是页面的值。文件24以包括文件元数据的“页脚(footer)”部分结束。
在本示例中,阅读器20包括用于访问存储器28中的Parquet文件24的存储器接口32。阅读器20还包括多个列阅读器电路36(为简洁起见,称为“列阅读器”)和记录重构电路40(为简洁起见,称为“记录重构器”)。列阅读器36和记录重构器40的示例实现方式分别在下面的图2和图4中进行了描绘。
通常,为了根据Parquet文件24重构一个或更多个记录,每个列阅读器36与相应列相关联。然后,列阅读器36从相应列读取数据、对该数据可选地解密、解压缩和可选地解码,并将解压缩后的数据提供给记录重构器40。记录重构器40根据由列阅读器提供的数据重构记录。通常,由每个列阅读器36处理的基本单位是Parquet页面中的行组。
列阅读器和部分阅读器配置
图2是根据本发明的实施例示意性示出图1的Parquet阅读器20中的列阅读器36的框图。Parquet阅读器20的各个列阅读器36通常都具有类似的结构,并且在操作期间被分配不同的列块。
在本示例中,列阅读器36包括用于访问DRAM 28的直接存储器访问(DMA)引擎44和多个部分阅读器48(重复级别阅读器48A、定义级别阅读器48B和值阅读器48C)。根据示例实施例的部分阅读器48的内部结构在下面的图3中进行了描绘。
当列阅读器36读取属于其分配的列块的特定Parquet页面时,阅读器48A、48B和48C分别读取并解压缩该页面的重复级别部分、定义级别部分和值部分。部分阅读器48A和48B被视为一个或更多个结构信息阅读器的示例,该结构信息阅读器被配置成从被分配给列阅读器36的列读取并解压缩结构信息。
通常,用于压缩重复级别部分、定义级别部分和值部分的压缩模式(例如,Gzip或Snappy)具有可变的压缩速率。因此,重复级别部分、定义级别部分和值部分(压缩后)的大小是可变的,并且与数据相关。因此,Parquet页面中定义级别部分和值部分的起始位置也是可变的,并且也与数据相关。
在各个实施例中,定义级别阅读器48B和值阅读器48C可以使用各种技术来确定它们在给定Parquet页面中相应部分的起始位置。在一个实施例中,定义级别阅读器48B从Parquet页面的开头(该开头始于页面标题和重复级别部分)开始读取和解压缩数据,但是丢弃数据直到到达定义级别部分的开始位置。这个初始过程的目的仅仅是识别定义级别部分的开始位置。仅从该点开始,定义级别阅读器48B开始输出其解压缩的数据。
类似地,值阅读器48C从Parquet页面的开头开始,并且读取和解压缩重复级别部分和定义级别部分的数据,以便找到值部分的开始位置。值阅读器48C丢弃解压缩后的数据,直到到达值部分的开始位置。仅从该点开始,值阅读器48C开始输出其解压缩的数据。
在一个实施例中,在开始处理Parquet页面时,阅读器48B和48C执行寻找它们相应部分的开始位置的初始过程。当所有三个部分阅读器48A-48C准备就绪时,它们开始并行地读取和解压缩它们的相应部分,以便对齐(至少大致对齐)它们输出的数据。在本上下文中,术语“对齐”意味着值和关于该值定义的结构信息(例如,重复级别和定义级别)之间的关联。
在可替代的实施例中,列阅读器36不必包括用于读取重复级别部分、定义级别部分和值部分的三个单独的部分阅读器48。例如,列阅读器36可以包括耦合到三个存储缓冲器的单个部分阅读器48。在这样的实现方式中,部分阅读器交替地从重复级别部分、定义级别部分和值部分读取和解压缩数据。部分阅读器将每个部分的解压缩后的数据缓存在相应缓冲器中,并且通常保存跟踪从每个部分进行读取的下一个位置的三个指针。
在又一实施例中,列阅读器可以包括单个部分阅读器48,该单个部分阅读器48:(i)从重复级别部分和定义级别部分读取并解压缩对应数据到缓冲器中,然后(ii)从值部分读取并解压缩对应数据,以及(iii)将值与其重复级别和定义级别对齐。
此外,可替代地,列阅读器36可以以任何其他方式实现,并且使用任何其他合适数量的部分阅读器48。在典型的实现方式中,列阅读器逐个读取、解压缩和对齐{重复级别、定义级别、值}的三元组,而不是在对齐之前读取和解压缩整个Parquet页面。换句话说,列阅读器通常在进行到读取、解压缩和对齐下一个三元组之前读取、解压缩和对齐一个三元组。
在图2的实施例中,列阅读器36还包括微控制器60,该微控制器60被配置成管理和控制列阅读器的操作。在其他任务中,微控制器60被配置成解析正被读取的Parquet页面的页面标题。微控制器60将页面标题存储在缓冲器64中。
在一些实施例中,列阅读器36还包括耦合到DMA引擎44的循环冗余校验(CRC)块。CRC块验证重复级别数据流、定义级别数据流和值数据流上的CRC。CRC结果被提供给微控制器60。
列阅读器36还包括控制逻辑52。在其他任务中,逻辑52被配置成触发部分阅读器48A、48B和48C以提供相应重复级别、定义级别和值,以及对齐由部分阅读器提供的重复级别、定义级别和值。逻辑52与由部分阅读器48A提供的重复级别并行地将值输出到记录重构器40。
在一些实施例中,逻辑52被配置成在将值输出到记录重构器40之前执行至少一些值的字典翻译。字典或其一部分被高速缓存在耦合到逻辑52的字典高速缓存56中。字典翻译的各个方面将在下面进一步详细讨论。
图3是根据本发明的实施例示意性示出图2的列阅读器36中的示例部分阅读器48的框图。该配置可用于实现重复级别部分阅读器48A、定义级别部分阅读器48B和/或值部分阅读器48C。部分阅读器48被配置成从Parquet页面的一部分(重复级别部分、定义级别部分或值部分)读取数据。
在本示例中,部分阅读器48包括可配置管线(pipeline),该管线包括(i)解密从部分读取的数据的解密逻辑68,(ii)解压缩解密后的数据的解压缩逻辑72,以及(iii)解码解压缩后的数据的解码器76。缓冲器80缓存在解密逻辑68和解压缩逻辑72之间的解密后的数据。缓冲器84缓存在解压缩逻辑72和解码器76之间的解压缩后的数据。值处理逻辑96可配置成对解码后的值执行指定函数,或以其他方式操作解码后的值。下面的“读取的值的操作”部分给出了函数的示例。值处理逻辑96输出解码后的值(到图2的列阅读器36的控制逻辑52)。
部分阅读器48还包括配置寄存器92,该配置寄存器92保存用于解密逻辑68、解压缩逻辑72和解码器76的可用配置。解密逻辑68的配置寄存器92可以保存例如用于解密该部分的解密密钥。解压缩逻辑72的配置寄存器92可以保存例如要使用的解压缩模式的标识符和任何相关的解压缩参数。解码器76的配置寄存器92可以保存例如要使用的解码模式的标识符和任何相关的解码参数。可以使用Parquet支持的任何合适的解密、解压缩和解码模式。
部分阅读器48还包括控制逻辑88,该控制逻辑88配置和控制部分阅读器的各种部件。
缓冲器80和84的作用之一是向前面的管线级施加反向压力。反向压力的方面、以及反向压力用于Parquet页面的不同部分之间和Parquet文件的不同列(或行组的列块)之间的数据对齐的使用,将在下面进一步讨论。
在一些实施例中,部分阅读器48包括耦合到解码器100的字典缓冲器100。缓冲器100可以进行保存,例如用于存储关于重复级别和定义级别的字典值。
记录重构
图4是根据本发明的实施例示意性示出图1的Parquet阅读器20中的记录重构器40的框图。重构器40从各个列阅读器36接收数据,并使用数据来重构Parquet文件的选定记录。重构器40通常从每个列阅读器接收作为三个向量的数据——(i)值向量、(ii)重复级别向量和(iii)定义级别向量。
重构器40包括可编程记录阅读器104,该可编程记录阅读器104根据由列阅读器提供的数据来重构记录。重构后的记录被提供作为Parquet阅读器20的输出。重构器40还包括模式存储器120,该模式存储器120存储正被读取的Parquet文件的模式。
在一些实施例中,记录重构器40可以包括字典电路112和字典缓存108,该字典电路112执行值的字典翻译,该字典缓存108存储字典条目。然而,这不是强制性的——在一些实施例中,包括高速缓存和高速缓存查找在内的所有字典翻译操作都在列阅读器36中执行。字典翻译特征,包括列阅读器和记录重构器之间“分工”的各个选项,将在下面进一步详细陈述。
在一些实施例中,记录重构器40还包括函数电路116,该函数电路116在输出记录之前对重构的记录执行预定义的函数。一些函数控制记录重构器40分解正被重构的记录的嵌套结构的级别。考虑上面综述部分中描述的示例记录,它有两个嵌套级别:
名 | 姓 | 子女&孙辈 |
John | Smith | {{Tom,{Alice,Bob}},{Dick},{Harry,{Charlie,Dan,Edna}} |
该记录也可以如下表示,仍然是完全嵌套的格式:
分解一个嵌套级别将产生三个记录:
John | Smith | Dick | - |
分解两个嵌套级别将产生六个平面(非嵌套)记录:
John | Smith | Tom | Alice |
John | Smith | Tom | Bob |
John | Smith | Dick | Charlie |
John | Smith | Harry | Dan |
John | Smith | Harry | Edna |
John | Smith | Harry |
在一些实施例中,函数电路116被配置成例如根据每个记录或作为一般操作模式来指定在重构记录中要分解的级别的数量。数量范围从零到最大嵌套级别。
在一些实施例中,重构器40中的可编程记录阅读器104包括被配置成同时重构多个相应记录的多个处理引擎(例如,内核或处理器)。阅读器104可以包括将记录灵活地分配给处理引擎的调度器。
在一些实施例中,记录重构器40被配置成(例如,同时使用不同的处理引擎)并行地或交替地重构多个记录流。每个记录流通常源自不同的查询,且因此通常具有要读取的列、要应用的函数等的单独定义。在一些实施例中,重构器40中的记录阅读器104被配置成仅针对一个或更多个选定记录流向列阅读器36施加反向压力,并且避免针对其他流使用反向压力。
当交替地重构多个记录流时,一旦所有解压缩缓冲器84(图3)为空(在每个行组的末尾),阅读器104就可以在记录流之间切换。可替代地,阅读器104可以在一些解压缩缓冲器非空时,通过保存解压缩缓冲器的当前状态(“上下文(context)”)或通过在相同的记录流被重新调度用于重构时重复解压缩,在记录流之间切换。在一些实施例中,重构器40中的记录阅读器104被配置成仅针对一个或更多个选定记录流使用上下文切换,并且对于其他流等待直到行组的结束。在任何情况下,暂停或恢复某个流都不会影响其他流。
在各个实施例中,阅读器20可以在记录流之间应用协作式上下文切换,或者在记录流之间应用抢占式上下文切换。在协作式上下文切换中,外部控制器允许阅读器20完成整个行组的重构,并且随后仅将该阅读器配置成针对不同上下文(通常是与不同列的集合相关的不同查询)重构行组。在抢占式上下文切换中,如果阅读器20在预定义的时间段之后没有完成行组的重构,则控制器指示阅读器20在中间行组中停止。控制器保存指定阅读器的中间行组状态的上下文(例如,每个列阅读器的页面索引和每个页面中的值索引)并配置阅读器以对另一行组进行操作。控制器可以稍后配置阅读器以从其被抢占的位置恢复读取被抢占的行组。
在各个实施例中,记录重构器40可以将重构后的记录输出到任何合适的“用户系统”,例如对记录应用进一步处理的处理器。在一些实施例中,重构器40能够接收来自用户系统的反向压力信令(例如,信号或通知)并对其起作用。通常,用户系统在其无法接收新记录时发送“暂停”通知,以及在其再次能够接收记录时发送“恢复”通知。在接收到“暂停”通知时,只要空间允许,记录重构器40就可以开始缓冲重构后的记录。否则,记录重构器可以将反向压力向前传播到列阅读器。
在一些实施例中,记录重构器40连同重构后的记录一起输出各种类型的元数据。元数据可以包括例如与特定字段相关的附加信息,例如指示字段值是否满足条件的布尔值、指示字符串字段的第一个字母的数值等。作为另一个示例,元数据可以以不同于Parquet格式中指定的方式指示嵌套级别(或其他结构信息)。例如,元数据可以指示字段中的嵌套值是否为空。
附加实施例和变型
使用反向压力对齐
在一些实施例中,记录重构器40和列阅读器36(包括各个部分阅读器48)使用反向压力机制来控制从各个列块的各个部分读出的速率。例如,该速率控制对于保持从不同列块读取的数据之间的对齐是重要的。
在示例实现方式中,在记录重构器40的记录阅读器104的控制下,每个列阅读器36独立于其他列阅读器操作。记录阅读器104为每个列阅读器分配相应列块,并指示列阅读器从列块读取哪些Parquet页面。
由于每个列阅读器36独立操作,并且由于数据大小和压缩速率是可变的,一些列阅读器可以以比其他列阅读器更高的速率返回数据。然而,记录阅读器104旨在保持列阅读器36之间的对齐,即确保由不同列阅读器在给定时间提供的数据对应于相同的记录或少量的相邻记录。
在示例实施例中,记录阅读器104可以检测到,在给定时间,由各个列阅读器提供的数据属于多于预定义最大数量的相邻记录。响应于检测到该未对齐,记录阅读器104可以暂时暂停列阅读器中相对较快的一个或更多个,以便允许一个或更多个较慢的列阅读器追赶。当重新获得对齐时,即当由各个列阅读器提供的数据属于不超过预定义最大数量的相邻记录时,记录阅读器104可以恢复被暂停的列阅读器。
需要对齐的一个典型示例是当一列(表示为col1)存储整数字段,而另一列(表示为col2)保存相对应的列表。在这种情况下,对于每个记录,被分配给col1的列阅读器需要读取单个值,而被分配给col2的列阅读器需要读取整个列表。
通常,每个列阅读器36在内部将反向压力传递到各个部分阅读器48并且在每个部分阅读器48的管线内。例如,当特定列阅读器36被记录阅读器104暂停时,将暂停部分阅读器48的解码器76,并且当被恢复时,将恢复解码器。在给定的部分阅读器48(参见图3)内,当解码器76被暂停时,缓冲器84将逐渐用解压缩后的数据填补。当超过特定填补水平时,缓冲器84将暂停解压缩逻辑72。暂停解压缩逻辑72将导致缓冲器80逐渐用解密后的数据填补。当超过特定填补水平时,缓冲器80将暂停解密逻辑68。
当列阅读器恢复操作时,该恢复以类似的方式在内部传递到部分阅读器——每个缓冲器(84和80)开始清空,并且当足够空时恢复前面的管线级。在各个实施例中,记录阅读器104和列阅读器36(包括部分阅读器48及其内部缓冲器和管线级)可以使用任何合适的信令来施加反向压力。例如,级之间的“就绪”信号可以取消断言以暂停,以及取消断言以恢复操作。
记录重构器40通常使用关于正在被读取的文档的可用信息,例如文档的结构信息和/或模式,来保持由各个列阅读器36提供的值之间的对齐。在一些实施例中,记录重构器确定每个记录需要从每个列阅读器获得的数据大小,并通过从每个列阅读器获得适当的数据大小来保持列阅读器之间的对齐。
例如,如果正在被读取的列中没有一列具有任何嵌套,则记录重构器40简单地从每一列中获取值。如果某个字段较宽(比总线的大小宽),则记录重构器可能需要在每个记录的多个周期中从列阅读器接收该字段,而对其他每个字段只需一个周期。对于可变大小的字段,例如字符串,记录重构器可以检查字段的长度,字段的长度通常在字段的前几个字节中被指定。然后,记录重构器可以使用长度信息来设置从列阅读器接收字段所需的周期数。当某列具有嵌套时,结构信息(例如,在Parquet中的重复级别和定义级别)帮助记录重构器决定如何将该列与其他列对齐以及重构记录。
在一些情况下,为了重构记录,请求Parquet阅读器20读取的列的数量大于列阅读器36的数量。在一些实施例中,记录重构器40通过基于不超过列阅读器的数量的列的部分子集重构部分记录来处理这样的请求,并将该部分记录保存到存储器。部分记录的集合随后可以被合并(例如,通过外部控制器或用户系统)以形成具有任何所需数量的列的完全被重构的记录。
字典翻译
根据Parquet格式,给定的列块可以可选地包含字典。字典用较短的键表示常见的值(例如,字符串)。列块中的后续Parquet页面包括短键来代替较长的实际值,这进一步减小了文件大小。字典可用于表示字符串和/或任何其他支持的值类型,例如double或long。字典可以表示具有恒定大小的值(即,字典中的所有值具有相同的大小)或具有可变大小的值(即,字典中的不同值可以在大小上彼此不同)。字典通常被放置在列块的开头,在第一个Parquet页面之前,并且它通常例如使用Gzip或Snappy来压缩。
在一些实施例中,Parquet阅读器20被配置成从一个或更多个列块读取、解压缩和存储一个或更多个字典,以将从列块读取的键即时地翻译成实际值,以及重构和输出具有实际值的记录。
在实施例中,当遇到字典时,阅读器20使用部分阅读器48中的一个来解压缩字典,并将解压缩后的字典存储在邻近存储器中,例如静态随机存取存储器(SRAM)中。当稍后将键翻译成实际值时,阅读器20中的电路使用该键来导出其中存储相对应的实际值的存储器地址。
图5是根据本发明的实施例示意性地示出图1的Parquet阅读器20中的字典翻译电路122的框图。电路122可以被实现为例如列阅读器36中的逻辑52和字典高速缓存56(图2)的一部分、记录重构器40中的字典电路112(图4)的一部分,或者被实现在两者中。作为另一个示例,在可能不是所有列阅读器都将同时访问字典的假设下,可以使用合适的存储器在两个或更多个列阅读器之间共享字典的存储。在又一示例中,字典被存储在存储器子系统中,并且存储器的相关部分被高速缓存在就近的高速缓存存储器(close-by cachememory)中。
字典电路122接收从Parquet页面读取的键作为输入,并根据字典输出由键表示的值。电路122包括间接寻址表124和映射128。映射128保存实际值,并通过地址(被表示为与某个基地址的偏移量)来访问。表124和映射128在本文被称为“字典数据结构”。在可替代的实施例中,可以使用任何其他合适类型的字典数据结构。
对于恒定大小值的字典,电路122直接根据键计算偏移量,例如通过将键乘以值的恒定大小。然后,该偏移量被用于访问映射128并从中提取值。在该示例中,不使用间接寻址表124。对于可变大小值的字典,电路122使用键来访问间接寻址表124并从中提取偏移量和大小。然后,偏移量和大小被用于访问映射128并从中提取值。在可替代的实施例中,间接寻址表124也可以用于访问恒定大小值的字典,而不使用乘法。
通常,电路122在从列块读取字典时构造字典(例如,填充映射128和间接寻址表124(如果使用的话))。稍后,当从列块读取Parquet页面时,电路122使用填充后的映射128和填充后的表格124(如果使用的话)进行即时翻译。
读取的值的操作
在一些实施例中,Parquet阅读器20被配置成修改从Parquet文件读取的值,并将修改后的值插入到重构后的记录中。通常为选定字段(选定列)指定操作。这种操作可以在读出和重构过程的任何阶段执行,例如在记录重构之前,或者在重构记录之后并且在输出重构后的记录之前。
例如,可以在列阅读器36中(例如,通过图3的部分阅读器48中的值处理逻辑96)或在记录重构器40中(例如,通过图4的函数电路116)执行值操作。在列阅读器中执行的操作通常(尽管不一定)是简单的、硬件控制的操作,例如值与阈值的比较或简单的逻辑函数。在记录重构器中执行的操作可以是更复杂的、软件控制的操作,例如从触发读出操作的查询中导出的操作。
阅读器20可以对值执行任何合适类型的操作。操作的几个示意性的、非限制性的示例包括以下(关于表示为“field1”的字段(列))项:
将函数应用于字段的值,例如,Round(field1)、field1*4、Sign(field1)等。
输出布尔标志(“0”或“1”)而不是field1,这取决于在field1上定义的条件是真还是假,例如,“field1>6”。布尔函数的另一示例是以下函数:如果列表中存在指定的值,则返回“1”,否则返回“0”。
操作嵌套值,例如,修改列表或整个列表上的选定项目,或者将函数应用于列表,例如,查找列表的最大值、最小值或值之和。
对单个字段执行多个操作,例如,响应于在同一字段上定义的多个条件(例如,“field1>7”、“field1<30”,“field1>100”)输出多个布尔标志。
对字符串执行各种函数,例如逻辑函数,如col1==“the”或col1==“%the”,其中%是通配符。
对日期类型执行各种函数,例如从col4中的日期字段中提取年和月的函数。
例如,通过融合对多个字段的操作,根据对一个或更多个字段值定义的标准筛选(即,选择性地丢弃或保留)记录。可以在重构记录之前或之后执行筛选。
在各个实施例中,阅读器20可以执行各种筛选操作以决定输出哪些记录以及丢弃哪些记录。在一些实施例中,筛选程序基于单个列,例如col1>7,在这种情况下,记录重构器40仅输出符合指定条件的记录,并丢弃不符合指定条件的记录。请注意,输出是一个完整的记录(例如,col1、col2、......、col8),即使该条件仅与特定的列有关。
在另一个实施例中,筛选程序基于两个或更多列的组合,例如“(Col1>7and col2==“The record”)或(extract_date(col3)-current_date<50)”。在该实施例中,筛选程序定义中的列可以是不同的类型。此外,可以对列执行各种操作,以便达到关于是输出还是丢弃特定记录的最终决定。
在一些情况下,筛选程序不一定与从重构器40输出的记录相关。附加地或可替代地,正在输出的记录可以不同于文件中的原始记录。例如,考虑筛选程序“(Col1>17andcol2 in(“The record”,“The sum”,“The Best”))or(extract_date(col3)-current_date<10)”。在一个实施例中,记录重构器40检查记录是否满足条件。在识别出满足条件的记录后,记录重构器40输出关于不同列的对应记录,例如“col1-5,col2,(if col2==“TheBest”,1,0),extract_date(col3),extract_month(col3),col4,col5,col6,7*col7-43,is_Null(col8)”。
上面的筛选程序纯粹以示例的方式给出,以便展示通过在阅读器20中进行筛选来提供的能力。在可替代的实施例中,可以使用任何其它合适的筛选程序。
通常,当根据记录的一个或更多个字段导出操作后的值时(例如,当对一个或更多个字段执行函数时),阅读器20在伴随重构后的记录的元数据中输出操作后的值。在一些实施例中,阅读器20输出操作后的值,而不是从列读取的字段值。在其他实施例中,阅读器20输出操作后的值和从列读取的值两者。这通常可以通过输出附加字段来完成。
在一些实施例中,尽管阅读器20通常基于正在被读取的文件来配置,但是记录重构器40可以基于处理(例如,正在处理的查询)而不是文件来配置值修改,并且因此进一步优化处理。
总体方法描述
图6是根据本发明的实施例示意性示出通过Parquet阅读器20执行的用于硬件实现的从Parquet文件读出的方法的流程图。该方法开始于在列指定步骤130,记录重构器40例如响应于查询,指定要从Parquet文件读取的列的集合。在配置步骤134,记录重构器40将相应列阅读器36分配给要被读取的每一列,并相应地配置列阅读器36。
由被分配给该列的列阅读器36对正被读取的每个列块的每个Parquet页面执行以下步骤(138-146)。在部分初始化步骤138,列阅读器36以在部分初始化步骤138要从中读取重复级别部分、定义级别部分和值部分的起始位置来初始化部分阅读器48。在读出步骤142,部分阅读器48从Parquet页面读取、解密、解压缩和解码重复级别、定义级别和值。列阅读器36将重复级别、定义级别和值输出到记录重构器40。
在记录重构步骤150,记录重构器150根据由各个列阅读器36提供的重复级别、定义级别和值来重构一个或更多个记录。
如图1-5所示的Parquet阅读器20及其部件(例如,列阅读器36、部分阅读器48和记录重构器40)的配置是纯粹为了概念清晰而描绘的示例配置。在可替代的实施例中,可以使用任何其它合适的配置。
Parquet阅读器20及其部件(例如列阅读器36、部分阅读器48和记录重构器40)可以使用任何合适的硬件(例如,在专用集成电路(ASIC)或现场可编程门阵列(FPGA)中)实现。
在一些实施例中,Parquet阅读器20的特定部分及其部件(例如,列阅读器36、部分阅读器48和记录重构器40)可以使用可编程处理器来实现,该可编程处理器在软件中被编程以执行本文描述的功能。软件可通过网络以电子形式下载到处理器,例如,或者可替代地或另外,软件可以被提供和/或存储在非暂时性有形介质(诸如,磁存储器、光存储器或电子存储器)上。
应当理解,上述实施例是通过示例的方式引用的,并且本发明不限于已经在上文具体示出和描述的内容。相反,本发明的范围包括上文所描述的各种特征的组合及子组合以及本发明的变型和修改,该变型和修改将在本领域的技术人员阅读上述描述之后被想到并且在现有技术中未被公开。通过引用并入本专利申请中的文件被视为本申请的组成部分,除了任何术语在这些并入的文件中在某种程度上以与本说明书中明确地或隐含地做出的定义冲突的方式被定义之外,应该仅考虑本说明书中的定义。
Claims (42)
1.一种硬件实现的文件阅读器,包括:
接口,其被配置成访问包括多个记录的文件,其中,所述记录根据支持可选值和重复值的嵌套结构来存储值,并且其中,所述文件以具有多列的列格式存储,每列存储(i)压缩值和(ii)将列中的值与所述记录的嵌套结构相关联的相对应的压缩结构信息;
多个硬件实现的列阅读器,每个列阅读器被配置成被分配给相应的选定列,以及从所述选定列的至少一部分读取和解压缩所述值和所述结构信息;以及
硬件实现的记录重构器,其被配置成根据由所述列阅读器读取的列的至少一部分来重构所述记录中的一个或更多个记录,并输出所重构的记录。
2.根据权利要求1所述的文件阅读器,其中,所述列格式包括Parquet格式,并且其中,所述结构信息包括所述值的重复级别和定义级别。
3.根据权利要求1所述的文件阅读器,其中,所述记录重构器被配置成向所述列阅读器中的一个或更多个列阅读器施加反向压力,以便将所述列阅读器的相应输出对齐为属于不超过预定义数量的相邻记录。
4.根据权利要求1所述的文件阅读器,其中,所述记录重构器被配置成确定每个记录需要从每个列阅读器获得的相应数据大小,并且通过从每个列阅读器获得所确定的数据大小来保持所述列阅读器之间的对齐。
5.根据权利要求1所述的文件阅读器,其中,给定的列阅读器被配置成在从所述选定列读取和解压缩后续值和后续结构信息之前,将解压缩后的值中的至少一些解压缩后的值与相对应的解压缩后的结构信息对齐。
6.根据权利要求1-5中任一项所述的文件阅读器,其中,给定的列阅读器包括被配置成读取和解压缩所述选定列的值的值阅读器、以及被配置成读取和解压缩所述选定列的结构信息的一个或更多个结构信息阅读器。
7.根据权利要求6所述的文件阅读器,其中,所述结构信息包括所述值的重复级别和定义级别,并且其中,所述结构信息阅读器包括被配置成读取和解压缩所述重复级别的重复级别阅读器、以及被配置成读取和解压缩所述定义级别的定义级别阅读器。
8.根据权利要求1-5中任一项所述的文件阅读器,其中,给定的列阅读器包括单个阅读器,所述单个阅读器被配置成交替地读取和解压缩所述选定列的值和所述选定列的结构信息两者。
9.根据权利要求1-5中任一项所述的文件阅读器,其中,在重构嵌套记录时,所述记录重构器被配置成分解所述嵌套记录的一个或更多个嵌套级别,从而输出多个记录来代替所述嵌套记录。
10.根据权利要求1-5中任一项所述的文件阅读器,其中,响应于重构大于所述列阅读器的数量的列的集合的请求,所述记录重构器被配置成重构并输出两个或更多个部分记录集合,每个部分记录集合对应于所请求的列的集合的相应子集。
11.根据权利要求1-5中任一项所述的文件阅读器,还包括硬件实现的字典电路,所述字典电路被配置成从所述文件读取用相应键表示一些值的字典,并且随后将从所述文件读取的键翻译成相对应的值,以便将翻译后的值放置在所述重构的记录中。
12.根据权利要求11所述的文件阅读器,并且所述文件阅读器包括将所述键映射到相应值的字典数据结构,其中,所述字典电路被配置成在从所述文件读取所述字典时填充所述字典数据结构。
13.根据权利要求11所述的文件阅读器,其中,所述字典电路被配置成将所述字典的一部分保存在高速缓存中。
14.根据权利要求1-5中任一项所述的文件阅读器,其中,所述列阅读器中的一个或更多个列阅读器和所述记录重构器被配置成修改从所述文件读取的所述值中的一个或更多个值。
15.根据权利要求14所述的文件阅读器,其中,所述记录重构器被配置成仅输出修改后的值,或者输出从所述文件读取的值和修改后的值两者。
16.根据权利要求14所述的文件阅读器,其中,所述记录重构器被配置成基于接收到的查询来指定所述值的修改。
17.根据权利要求1-5中任一项所述的文件阅读器,其中,所述记录重构器被配置成基于以下中的一项或两项来筛选所述记录:(i)对所述值中的一个或更多个值定义的标准,以及(ii)接收到的查询。
18.根据权利要求1-5中任一项所述的文件阅读器,其中,所述记录重构器包括被配置成同时重构多个相应记录的多个处理引擎。
19.根据权利要求1-5中任一项所述的文件阅读器,其中,所述记录重构器被配置成并行地重构多个记录流。
20.根据权利要求19所述的文件阅读器,其中,所述记录重构器被配置成彼此独立地重构所述多个记录流。
21.根据权利要求1-5中任一项所述的文件阅读器,其中,所述记录重构器被配置成仅针对记录流的选定子集向所述列阅读器施加反向压力。
22.一种用于硬件实现的文件读出的方法,包括:
使用多个硬件实现的列阅读器访问文件,其中,所述文件包括多个记录,其中所述记录根据支持可选值和重复值的嵌套结构来存储值,并且其中,所述文件以具有多个列的列格式进行存储,每列存储(i)压缩值和(ii)将列中的值与所述记录的嵌套结构相关联的相对应的压缩结构信息;
将每个列阅读器分配给相应的选定列,以及从所述选定列的至少一部分读取和解压缩所述值和所述结构信息;以及
使用硬件实现的记录重构器,根据由所述列阅读器读取的列的至少一部分来重构所述记录中的一个或更多个记录,并输出所重构的记录。
23.根据权利要求22所述的方法,其中,所述列格式包括Parquet格式,并且其中,所述结构信息包括所述值的重复级别和定义级别。
24.根据权利要求22所述的方法,其中,重构所述记录包括向所述列阅读器中的一个或更多个列阅读器施加反向压力,以便将所述列阅读器的相应输出对齐为属于不超过预定义数量的相邻记录。
25.根据权利要求22所述的方法,其中,重构所述记录包括:确定每个记录需要从每个列阅读器中获得的相应数据大小,并且通过从每个列阅读器获得所确定的数据大小来保持所述列阅读器之间的对齐。
26.根据权利要求22所述的方法,其中,读取和解压缩所述值和所述结构信息包括:在给定的列阅读器中,在从所述选定列读取和解压缩后续值和后续结构信息之前,将解压缩后的值中的至少一些解压缩后的值与相对应的解压缩后的结构信息对齐。
27.根据权利要求22-26中任一项所述的方法,其中,读取和解压缩所述值和所述结构信息包括:在给定的列阅读器中,由值阅读器读取和解压缩所述选定列的值,以及由一个或更多个结构信息阅读器读取和解压缩所述选定列的结构信息。
28.根据权利要求27所述的方法,其中,所述结构信息包括所述值的重复级别和定义级别,并且其中,读取和解压缩所述结构信息包括由重复级别阅读器读取和解压缩所述重复级别,以及由定义级别阅读器读取和解压缩所述定义级别。
29.根据权利要求22-26中任一项所述的方法,其中,读取和解压缩所述值和所述结构信息包括:在给定的列阅读器中,由单个阅读器交替地读取和解压缩所述选定列的所述值和所述选定列的结构信息两者。
30.根据权利要求22-26中任一项所述的方法,其中,重构所述记录包括:在重构嵌套记录时,分解所述嵌套记录的一个或更多个嵌套级别,从而输出多个记录来代替所述嵌套记录。
31.根据权利要求22-26中任一项所述的方法,其中,重构所述记录包括响应于重构大于所述列阅读器的数量的列的集合的请求,重构并输出两个或更多个部分记录集合,每个部分记录集合对应于所请求的列的集合的相应子集。
32.根据权利要求22-26中任一项所述的方法,还包括使用硬件实现的字典电路,从所述文件读取用相应键表示一些值的字典,并且随后将从所述文件读取的键翻译成相对应的值,以便将翻译后的值放置在所述重构的记录中。
33.根据权利要求32所述的方法,其中,读取所述字典包括填充将所述键映射到相应值的字典数据结构,并且其中,将所述键翻译成相应值包括通过所填充后的字典数据结构将所述键映射到相应值。
34.根据权利要求32所述的方法,并且所述方法包括将所述字典的一部分保存在高速缓存中。
35.根据权利要求22-26中任一项所述的方法,并且所述方法包括修改从所述文件读取的所述值中的一个或更多个值。
36.根据权利要求35所述的方法,其中,输出所述重构的记录包括仅输出修改后的值,或者输出从所述文件读取的所述值和修改后的值两者。
37.根据权利要求35所述的方法,并且所述方法包括基于接收到的查询来指定所述值的修改。
38.根据权利要求22-26中任一项所述的方法,其中,重构所述记录包括基于以下中的一项或两项来筛选所述记录:(i)对所述值中的一个或更多个值定义的标准,以及(ii)接收到的查询。
39.根据权利要求22-26中任一项所述的方法,其中,重构所述记录包括应用多个处理引擎来同时重构多个相应记录。
40.根据权利要求22-26中任一项所述的方法,其中,重构所述记录包括并行地重构多个记录流。
41.根据权利要求40所述的方法,其中,重构所述记录包括彼此独立地重构所述多个记录流。
42.根据权利要求22-26中任一项所述的方法,其中,重构所述记录包括仅针对记录流的选定子集向所述列阅读器施加反向压力。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/030,422 US11586587B2 (en) | 2020-09-24 | 2020-09-24 | Hardware-implemented file reader |
US17/030,422 | 2020-09-24 | ||
PCT/IB2021/058279 WO2022064313A1 (en) | 2020-09-24 | 2021-09-12 | Hardware-implemented file reader |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116113937A true CN116113937A (zh) | 2023-05-12 |
Family
ID=80740338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180062362.1A Pending CN116113937A (zh) | 2020-09-24 | 2021-09-12 | 硬件实现的文件阅读器 |
Country Status (4)
Country | Link |
---|---|
US (3) | US11586587B2 (zh) |
EP (1) | EP4217883A1 (zh) |
CN (1) | CN116113937A (zh) |
WO (1) | WO2022064313A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11892976B2 (en) | 2021-01-29 | 2024-02-06 | Splunk Inc. | Enhanced search performance using data model summaries stored in a remote data store |
US11841827B2 (en) * | 2021-01-29 | 2023-12-12 | Splunk Inc. | Facilitating generation of data model summaries |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10866940B2 (en) | 2015-12-31 | 2020-12-15 | Fireeye, Inc. | Method, apparatus, and computer-readable medium for ingesting semi-structured data in a columnar format |
US10585913B2 (en) | 2017-03-20 | 2020-03-10 | Datameer, Inc. | Apparatus and method for distributed query processing utilizing dynamically generated in-memory term maps |
JP2020135318A (ja) * | 2019-02-18 | 2020-08-31 | 株式会社日立製作所 | データ処理装置、及びデータ処理方法 |
US20210042280A1 (en) * | 2019-08-09 | 2021-02-11 | BigStream Solutions, Inc. | Hardware acceleration pipeline with filtering engine for column-oriented database management systems with arbitrary scheduling functionality |
-
2020
- 2020-09-24 US US17/030,422 patent/US11586587B2/en active Active
-
2021
- 2021-09-12 WO PCT/IB2021/058279 patent/WO2022064313A1/en unknown
- 2021-09-12 CN CN202180062362.1A patent/CN116113937A/zh active Pending
- 2021-09-12 EP EP21871755.1A patent/EP4217883A1/en active Pending
-
2023
- 2023-01-16 US US18/154,884 patent/US11874800B2/en active Active
- 2023-11-20 US US18/513,714 patent/US20240086371A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230153273A1 (en) | 2023-05-18 |
US20240086371A1 (en) | 2024-03-14 |
WO2022064313A1 (en) | 2022-03-31 |
EP4217883A1 (en) | 2023-08-02 |
US11874800B2 (en) | 2024-01-16 |
US11586587B2 (en) | 2023-02-21 |
US20220092030A1 (en) | 2022-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11874800B2 (en) | Hardware-implemented file reader | |
AU2019257524B2 (en) | Managing operations on stored data units | |
US9195695B2 (en) | Technique for compressing columns of data | |
CN104040541B (zh) | 用于更高效地使用存储器至cpu带宽的技术 | |
US9507811B2 (en) | Compressed data page with uncompressed data fields | |
US20200387509A1 (en) | Hybrid column store providing both paged and memory-resident configurations | |
CN110741637B (zh) | 简化视频数据的方法、计算机可读存储介质和电子装置 | |
US20130099946A1 (en) | Data Compression Utilizing Variable and Limited Length Codes | |
AU2014226446B2 (en) | Managing operations on stored data units | |
CN108475508B (zh) | 音频数据和保存在块处理存储系统中的数据的简化 | |
AU2014226447B2 (en) | Managing operations on stored data units | |
Liu et al. | Mostly order preserving dictionaries | |
US9129001B2 (en) | Character data compression for reducing storage requirements in a database system | |
US20220318252A1 (en) | Data streaming between nodes of a database system | |
JPH10261969A (ja) | データ圧縮方法および装置 | |
US8010510B1 (en) | Method and system for tokenized stream compression | |
US11868331B1 (en) | Systems and methods for aligning big data tables in linear time | |
Cheng et al. | The Key as Dictionary Compression Method of Inverted Index Table under the Hbase Database. | |
US7254689B1 (en) | Decompression of block-sorted data | |
Kella et al. | Apcfs: Autonomous and parallel compressed file system | |
An | Column-based RLE in row-oriented database | |
Wang et al. | Group-Scope query and its access method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |