【问题标题】:Which file format I have to use which supports appending?我必须使用哪种文件格式支持追加?
【发布时间】:2021-05-16 23:26:11
【问题描述】:

目前我们使用orc file format将传入的流量存储在s3中用于欺诈检测分析

我们确实选择了orc文件格式,原因如下

  • 压缩
  • 以及使用 athena 查询数据的能力

问题:

  • 由于 orc 文件是只读的,我们希望每 20 分钟不断更新文件内容 这意味着我们
    • 需要从s3下载orc文件,
    • 读取文件
    • 写入文件末尾
    • 最后上传回s3

这不是问题,但随着数据每天显着增长~2GB every day。下载 10Gb 文件读取、写入和上传是非常昂贵的过程

问题: 有没有办法使用另一种文件格式,它也提供追加/插入,并且可以被 athena 用来查询?

从这个article 它说avro 是文件格式,但不确定

  • 是否可以使用 athena 进行查询?
  • 还有其他问题吗?

Note: My skill on big data technologies is on beginner level

【问题讨论】:

  • 您可以使用 Athena 查询 Avro 文件 - 您不能每天上传一个新的 ORC 文件吗? Athena 使用集群来读取文件,如果数据分布在多个对象中,则可以更轻松地进行并行化。
  • 谢谢会调查一下,但由于我们的平台要求,我们需要查询不超过 20 分钟的数据
  • 更具体的要求会有所帮助,否则我建议您自己获取 Kinesis Firehose 并将其配置为将传入数据批量处理为 x 或最多 y 分钟,然后将其存储在S3。 Kinesis Firehose 可以在 parquet 和 ORC 中做到这一点,这两者都可以通过 Athena 进行查询 - docs
  • 即使文件格式允许追加(例如,您可以追加到 CSV 文件),像 S3 这样的对象存储不允许允许追加。如果是这样,您可能会看到部分数据有人正在追加更多行。推荐的方法是对传入的数据进行微批处理(如 Maurice 建议的那样)。如果文件很小,查询起来会很昂贵,因此您可能需要将它们重新批处理成更大的文件。您还可以从Trino (formerly Presto SQL) community获得更多建议。
  • 查看了 kinesis ,但是对于摄取大量记录来说太贵了,无论如何感谢您提供的信息

标签: amazon-s3 avro amazon-athena orc


【解决方案1】:

如果您的表未分区,只需将您的新 orc 文件复制 (aws s3 cp) 到表的目标 s3 路径,它们将立即可供通过 Athena 查询。 p>

如果您的表是分区,您可以将新文件复制到与您的特定分区对应的路径。在将新文件复制到分区结束时,您需要将该分区添加或更新到 Athena 的元存储中。

例如,如果您的表由date 分区,那么您需要运行此查询以确保您的分区得到添加/更新:

alter table dataset.tablename add if not exists
   partition (date = YYYYMMDD) 
   location 's3://your-bucket/path_to_table/date=YYYYMMDD/'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 2010-11-09
    • 1970-01-01
    • 2011-04-20
    • 2011-07-26
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多