如何将数据从 dynamo db 导出到 S3 并进行更快的临时查询(而不是当前的 spark 40 分钟完整 table 扫描查询)?

How can I export data from dynamo db to S3 and make faster ad hoc queries (instead of current spark 40 mins full table scan queries)?

我目前在一家公司的大数据团队工作,我需要将数据从dynamo db导出到amazon s3,当导出数据并使用spark对提取的半结构JSON进行查询时,需要使用完整 table 扫描进行临时查询需要 40 分钟。我阅读了有关 apache drill 及其对非结构化数据进行秒查询的能力,我应该继续进行 apache drill 还是对 json 进行展平并将其存储为配置单元 ORC table(10,000 列) ?换句话说,我需要进行查询而不需要进行完整的 table 扫描。

嗯,

如果您打算使用 Apache Drill,那么不更改数据格式是一个不错的选择。使用 Apache Drill,它将对您的数据进行 table 扫描,如果您使用 JSON,它将在 S3 数据中进行大 IO。当然,它会比 Spark 更快。

但是根据Drill documentation they suggest to use Parquet for faster SQL queries. This will reduce the IO due to columnar interface. 10 thousand columns will not be a great problem, Drill will flat数据也是如此。

我真的建议您将数据扁平化为 Orc,这将允许您压缩数据,并且使用这种格式,您可以使用 Presto 或 AWS Athena 非常快速地查询数据。使用 Orc 或 Parquet 这两种列式数据文件的优势。它将减少读取 Metastore 信息的 IO 时间。您将设置模式,它就会完成。

这样做的最大问题是构建模式的开销......这对您来说将是一个巨大的开销。

所以,做出你的选择。 Apache Drill 将允许您以 Json 格式推断模式,从而减少构建模式格式等的开销。并且可能比 Spark 查询更快。 但不会比将文件转换为 Orc 或 Parquet 格式更快。不会那么紧凑,因此您将有更多数据要存储和读取更多数据,这意味着要在 AWS 上花费更多的钱。使用 Orc 或 Parquet 会更快、更紧凑且更便宜。但是构建模式会花费很多时间。