我们有流媒体应用程序在S3上存储数据。 S3分区可能有重复的记录。我们通过Athena查询S3中的数据。
有没有办法从S3文件中删除重复项,以便我们在从Athena查询时不会获取它们?
答案 0 :(得分:1)
您可以编写一个小的bash脚本来执行hive / spark / presto查询以读取数据,删除重复项,然后将其写回S3。
我不使用雅典娜,但因为它只是presto然后我会假设你可以做任何可以在Presto做的事情。
bash脚本执行以下操作:
例如:
CREATE TABLE mydb.newTable AS
SELECT DISTINCT *
FROM hive.schema.myTable
语法参考: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