2017-08-13 73 views
1

我们有在S3上存储数据的流式应用程序。 S3分区可能有重复的记录。我们通过Athena查询S3中的数据。亚马逊Athena上的重复数据删除

有没有一种方法可以从S3文件中删除重复项,以便我们在从雅典娜查询时不会得到它们?

回答

1

您可以编写一个小型bash脚本来执行配置单元/ spark/presto查询以读取dat,删除重复项,然后将其写回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

虽然你的建议是正确的,雅典娜不提供插入或更新数据的反正。所以INSERT OVERWRITE将不起作用。我猜将不得不编写EMR作业才能达到同样的效果 – Sourabh

+0

你并不需要在这方面使用雅典娜。您可以使用任何其他建议的引擎。 –

+0

由于您正在使用AWS,因此您可以使用数据管道每天通过Spark运行此作业,例如,如果您没有Hadoop设置。 –

0

我们不能删除雅典娜的重复,因为它在文件上工作,它有工作的周末。

所以一些重复记录应该如何从s3中的文件中删除,最简单的方法就是shell脚本。

用不同选项写入选择查询。

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

0

对于存储在S3中的数据,使用Athena可以使EXTERNAL TABLE。如果你想修改现有的数据,然后使用HIVE。

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