【发布时间】:2016-01-14 05:25:39
【问题描述】:
我们有大量的 csv 文件,文件/目录按日期和其他几个因素进行分区。例如,文件可能被命名为 /data/AAA/date/BBB.csv
有数千个文件,其中一些大小在 GB 范围内。总数据大小以 TB 为单位。
它们只会被附加到并且通常是批量的,因此写入性能并不那么重要。我们不想将它加载到另一个系统中,因为我们运行的几个重要进程依赖于能够快速流式传输文件,这些文件是用 c++ 编写的。
我正在寻找允许直接从数据中查询数据的类似 sql 的工具/库。我已经开始研究 hive、spark 和其他大数据工具,但不清楚它们是否可以直接从源访问分区数据,在我们的例子中是通过 nfs。
理想情况下,我们可以通过给出列的描述以及分区信息来定义表。此外,文件被压缩,因此处理压缩将是理想的。
他们的开源工具可以做到这一点吗?我见过一个名为 Pivotal 的产品,它声称可以做到这一点,但我们更愿意为开源分布式查询系统的数据编写自己的驱动程序。
任何线索将不胜感激。
【问题讨论】:
-
正如@isaac.hazan 所说,Apache Drill 1.4 为您提供了平面文件的 SQL 接口。美妙之处在于,您不必提及绝对文件。分区中的文件夹层次结构应该可以。您的示例 /data/AAA/date/BBB.csv - 针对 AAA 中所有文件夹下的所有文件触发类似
select count(*) from dfs.root.'/data/AAA/';的查询。 -
Apache Drill是否允许您通过属性指定分区函数?例如,假设您在 /data/TAG1_A/yyyy-mm-dd.csv、/data/TAG1_B/yyyy-mm-dd.csv 中有数据,但您只想查询特定年份的数据,是否存在Apache Drill 只知道搜索某些文件的任何方式?另一个可能的查询可能只涉及 TAG1 的一些值,它不必遍历所有 TAG1_XXX 文件。我希望它更像是数据库中的分区表。
标签: c++ hive amazon-redshift distributed-computing bigdata