Athena 存储查询结果的最佳实践

Athena Best Practice to store query result

我正在创建数据湖并在 Glue Catalog 中有一些表需要在 Athena 中查询。作为先决条件,Athena 要求我们将查询结果存储在 S3 存储桶中。我有“Temp”和“Logs”S3 存储桶。但由于这是客户端敏感数据,我只想检查我应该为此创建一个新的 Athena 存储桶还是使用现有的 temp/logs 存储桶。

注意:我以后不会使用 Athena 查询。

你说得很好 -- Amazon Athena 查询的输出将出现在输出文件中,包括敏感数据。

您可以创建一个只允许写入访问的存储桶——也就是说,在其上设置拒绝策略,这样就没有人可以从该存储桶中获取对象。那样的话,Athena 很乐意写出它的输出,但是人们看不到结果。

您还可以应用 Amazon S3 生命周期策略,在一天后删除文件。

另一种方法是在创建对象后立即触发 AWS Lambda 函数,并让 Lambda 函数删除对象。

无论哪种方式,如果人们不需要访问结果,或者如果正在检索敏感数据,请将他们的 Athena 输出定向到该存储桶。

我还要补充一点,如果您的查询中出现 PII,Athena 还会保留可能包含敏感数据(例如 PII)的历史记录。

假设以下数据、DDL 和查询:

数据:

breed_id, breen_name, category
1,pug,toy
2,German Shepard, working,
3,Scottish Terrier, Working

DDL:

CREATE EXTERNAL TABLE default.dogs (
  `breed_id` int, 
  `breed_name` string, 
  `category` string
)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
LOCATION
  's3://stack-exchange/48836509'
TBLPROPERTIES ('skip.header.line.count'='1')

查询:

SELECT * FROM default.dogs WHERE breed_name = 'pug'
SELECT * FROM default.dogs WHERE breed_name = 'German Shepard'

我们可以在控制台看到这些:

基于这些 documentation,我相信此历史记录会存储 45 天。