Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于查询大量csv文件的工具_C++_Hive_Amazon Redshift_Distributed Computing_Bigdata - Fatal编程技术网

C++ 用于查询大量csv文件的工具

C++ 用于查询大量csv文件的工具,c++,hive,amazon-redshift,distributed-computing,bigdata,C++,Hive,Amazon Redshift,Distributed Computing,Bigdata,我们有大量的csv文件,文件/目录按日期和其他几个因素进行分区。例如,文件名可能为/data/AAA/date/BBB.csv 有数千个文件,其中一些大小在GB范围内。总数据大小以TB为单位 它们只会被追加,而且通常是批量的,所以写性能并不那么重要。我们不想把它加载到另一个系统中,因为我们运行的几个重要过程依赖于能够快速地流文件,这些文件是用C++编写的。 我正在寻找允许直接从数据中查询数据的类似sql的工具/库。我已经开始研究hive、spark和其他大数据工具,但不清楚它们是否可以直接从源访

我们有大量的csv文件,文件/目录按日期和其他几个因素进行分区。例如,文件名可能为/data/AAA/date/BBB.csv

有数千个文件,其中一些大小在GB范围内。总数据大小以TB为单位

它们只会被追加,而且通常是批量的,所以写性能并不那么重要。我们不想把它加载到另一个系统中,因为我们运行的几个重要过程依赖于能够快速地流文件,这些文件是用C++编写的。 我正在寻找允许直接从数据中查询数据的类似sql的工具/库。我已经开始研究hive、spark和其他大数据工具,但不清楚它们是否可以直接从源访问分区数据,在我们的例子中,是通过nfs

理想情况下,我们可以通过给出列的描述以及分区信息来定义一个表。此外,文件是压缩的,因此处理压缩将是理想的

他们的开源工具可以做到这一点吗?我见过一个名为Pivotal的产品,它声称可以做到这一点,但我们更愿意为开放源码分布式查询系统的数据编写自己的驱动程序


任何潜在客户都将不胜感激。

Spark可能是一个解决方案。它是内存中的分布式处理引擎。数据可以加载到集群中多个节点的内存中,并可以在内存中进行处理。您不需要将数据复制到另一个系统

以下是您案例的步骤:

  • 构建多节点spark集群
  • 将NFS装载到其中一个节点上
  • 然后,您必须以RDD的形式将数据临时加载到内存中并开始处理它
  • 它提供

  • 支持scala、python、java等编程语言
  • 支持SQL上下文和数据帧。您可以定义数据的结构,并开始使用SQL查询进行访问
  • 支持多种压缩算法
  • 局限性

  • 数据必须装入内存中才能由Spark处理
  • 您需要使用数据帧来定义数据结构,然后可以使用scala、python、java等编程语言中嵌入的sql查询数据
  • RDBMS中的传统SQL和spark等分布式系统中的SQL之间存在细微的差异。你需要意识到这些

  • 使用hive,您需要将数据复制到HDFS。由于您不想将数据复制到另一个系统,hive可能不是解决方案。

    正如@isaac.hazan所说,Apache Drill 1.4为您提供了平面文件的SQL接口。最妙的是,你不必提及绝对文件。分区中的文件夹层次结构应该可以。您的示例/data/AAA/date/BBB.csv-从dfs.root启动类似于
    select count(*)的查询。'/data/AAA/'用于AAA中所有文件夹下的所有文件。Apache Drill是否允许您按属性指定分区函数?例如,假设您在/data/TAG1_A/yyyy-mm-dd.csv、/data/TAG1_B/yyyy-mm-dd.csv中有数据,但您只想查询特定年份的数据,Apache Drill是否可以只搜索一些文件?另一个可能的查询可能只跨TAG1的一些值,它不必遍历所有TAG1_XXX文件。我希望它的工作方式更像数据库中的分区表。对于Spark,听起来您必须手动将数据加载到内存中。我希望您能够映射分区,这样在跨文件查询时就不必显式加载每个文件。