配置单元—amazon athena上的重复数据消除

mitkmikd  于 2021-06-26  发布在  Hive
关注(0)|答案(4)|浏览(346)

我们有流应用程序在s3上存储数据。s3分区可能有重复的记录。我们通过雅典娜查询s3中的数据。
有没有一种方法可以从s3文件中删除重复项,这样我们在从athena查询时就不会得到它们?

okxuctiv

okxuctiv1#

您可以编写一个小的bash脚本,执行一个hive/spark/presto查询来读取dat,删除重复项,然后将其写回s3。
我不使用雅典娜,但因为它只是普雷斯托然后我会假设你可以做任何可以做的普雷斯托。
bash脚本执行以下操作:
读取数据并应用不同的过滤器(或任何您想要应用的逻辑),然后将其插入到另一个位置。
例如:

CREATE TABLE mydb.newTable AS
SELECT DISTINCT *
FROM hive.schema.myTable

如果它是一个重复的任务,那么inser覆盖会更好。
不要忘记设置hivedb的位置,以便轻松地识别数据目的地。
语法参考:https://prestodb.io/docs/current/sql/create-table.html
使用aws s3 cli命令删除旧数据目录。
将新数据移到旧目录
现在您可以安全地读取同一个表,但记录将是不同的。

ehxuflar

ehxuflar2#

使用雅典娜可以使外部表上的数据存储在s3中。如果要修改现有数据,请使用配置单元。
在配置单元中创建表。 INSERT OVERWRITE TABLE new_table_name SELECT DISTINCT * FROM old_table;

zzzyeukh

zzzyeukh3#

我们不能删除重复的雅典娜,因为它的工作文件,它有工作的周围。
所以在s3中如何从文件中删除重复记录,最简单的方法是shellscript。

使用distinct选项编写select查询。
注:这两种操作都是昂贵的。

tyu7yeag

tyu7yeag4#

请使用CTA:

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

相关问题