AWS Athena将result.json输出到s3 - CREATE TABLE AS / INSERT INTO SELECT?

时间:2018-01-05 19:02:38

标签: json amazon-web-services amazon-athena aws-glue

无论如何可以将AWS Athena查询的结果写入s3存储桶中的results.json吗?

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

  1. 使用AWS Athena的新数据,CREATE TABLE无论如何都可以吗?
  2. AWS胶水是否有任何解决方法?
  3. 无论如何可以用Athena的结果触发lambda函数? (我知道S3 Hooks)
  4. 覆盖整个json文件/表并始终创建一个新的json对我来说无关紧要,因为我聚合的统计数据非常有限。

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

2 个答案:

答案 0 :(得分: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)'

的格式指定查询

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

答案 1 :(得分:0)

通过使用“选择时创建表”(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格式