亚马逊雅典娜的重复数据删除

时间:2017-08-13 10:02:11

标签: hive amazon-athena presto

我们有流媒体应用程序在S3上存储数据。 S3分区可能有重复的记录。我们通过Athena查询S3中的数据。

有没有办法从S3文件中删除重复项,以便我们在从Athena查询时不会获取它们?

4 个答案:

答案 0 :(得分:1)

您可以编写一个小的bash脚本来执行hive / spark / presto查询以读取数据,删除重复项,然后将其写回S3。

我不使用雅典娜,但因为它只是presto然后我会假设你可以做任何可以在Presto做的事情。

bash脚本执行以下操作:

  • 读取数据并应用不同的过滤器(或您想要应用的任何逻辑),然后将其插入另一个位置。

例如:

CREATE TABLE mydb.newTable AS
SELECT DISTINCT *
FROM hive.schema.myTable
  • 如果这是一项经常性的任务,那么INSER OVERWRITE会更好。
  • 不要忘记设置配置单元数据库的位置,以便轻松识别数据目的地。

语法参考:https://prestodb.io/docs/current/sql/create-table.html

现在您可以安全地阅读同一张表,但记录将是截然不同的。

答案 1 :(得分:0)

我们无法删除Athena中的副本,因为它在文件上工作它有工作环境。

所以有些如何从s3中的文件中删除重复记录,最简单的方法就是shellcript。

或者

使用不同选项编写选择查询。

注意:两者都是昂贵的操作。

答案 2 :(得分:0)

使用Athena可以对存储在S3中的数据进行 EXTERNAL TABLE 。如果要修改现有数据,请使用HIVE。

  • 在配置单元中创建一个表。
  • INSERT OVERWRITE TABLE new_table_name SELECT DISTINCT * FROM old_table;

答案 3 :(得分:0)

请使用CTAS:

CREATE TABLE new_table
WITH (
      format = 'Parquet',
      parquet_compression = 'SNAPPY')
AS SELECT DISTINCT *
FROM old_table;

参考:https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.html