0

是否有可能将 AWS Athena 查询的结果写入 s3 存储桶中的 results.json?

我的第一个想法是使用INSERT INTO SELECT ID, COUNT(*) ...orINSERT OVERWRITE但这似乎不受Amazon Athena DDL Statementstdhoppers Blogpost 的支持

  1. 是否有可能CREATE TABLE使用 AWS Athena 处理新数据?
  2. AWS Glue 有什么解决方法吗?
  3. 无论如何有可能用 Athena 的结果触发 lambda 函数?(我知道 S3 Hooks)

覆盖整个 json 文件/表并始终创建一个新的 json 对我来说并不重要,因为我汇总的统计数据非常有限。

我知道 AWS Athena 会自动将结果作为 CSV 写入 S3 存储桶。但是,我喜欢进行简单的聚合并将输出直接写入公共 s3,以便浏览器中的 spa angular 应用程序能够读取它。因此 JSON 格式和特定​​路径对我来说很重要。

4

2 回答 2

2

用胶水解决我的问题。使用 Athena jdbc 驱动程序运行查询并将结果加载到数据帧中。然后将数据框保存为指定 S3 位置所需的格式。

df=spark.read.format('jdbc').options(url='jdbc:awsathena://AwsRegion=region;UID=your-access-key;PWD=your-secret-access-key;Schema=database name;S3OutputLocation=s3 location where jdbc drivers stores athena query results',
      driver='com.simba.athena.jdbc42.Driver',
      dbtable='(your athena query)').load()
df.repartition(1).write.format("json").save("s3 location")

以 dbtable='(select * from foo)' 格式指定查询

从这里下载 jar并将其存储在 S3 中。在胶水上配置 etl 作业时,在 Jar lib 路径中指定 jar 的 s3 位置。

于 2018-01-13T19:31:44.047 回答
1

您可以使用“create table as select”(CTAS)查询让 Athena 在 s3 中创建数据。在该查询中,您可以指定希望创建的表存储其数据的位置和格式。 https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.html 对于 json,您要查找的示例是:

CREATE TABLE ctas_json_unpartitioned 
WITH (
     format = 'JSON',  
     external_location = 's3://my_athena_results/ctas_json_unpartitioned/') 
AS SELECT key1, name1, address1, comment1
FROM table1;

这将导致单行 json 格式

于 2019-03-01T13:36:03.467 回答