(AWS)Athena:查询结果似乎太短

时间:2018-01-18 19:26:16

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

我的Athena查询结果似乎太短了。试图弄清楚为什么?

设置:

胶水目录(118.6千兆字节)。 数据:以CSV和JSON格式存储在S3中。 Athena Query:当我查询整个表的数据时,每个查询只获得40K结果,对于一个月的数据,该查询平均应该有121Million记录。

Athena Cap查询结果数据吗?这是服务限制(文档不建议这样做)。

2 个答案:

答案 0 :(得分:1)

似乎有1000的限制。 您应该使用NextToken来迭代结果。

GetQueryResults文档的引用

  

MaxResults在此返回的最大结果数(行数)   请求。

     

类型:整数

     

有效范围:最小值0.最大值1000。

     

必填:否

答案 1 :(得分:1)

因此,一次获取1000个结果显然无法扩展。幸运的是,有一个简单的解决方法。 (或者也许一直以来都是这样。)

运行雅典娜查询时,您应该得到一个QueryExecutionId。此ID对应于您在S3中找到的输出文件。

这是我写的一个片段:

s3 = boto3.resource("s3")
athena = boto3.client("athena")
response: Dict = athena.start_query_execution(QueryString=query, WorkGroup="<your_work_group>")
execution_id: str = response["QueryExecutionId"]
print(execution_id)

# Wait until the query is finished
while True:
    try:
        athena.get_query_results(QueryExecutionId=execution_id)
        break
    except botocore.exceptions.ClientError as e:
        time.sleep(5)

local_filename: str = "temp/athena_query_result_temp.csv"
s3.Bucket("athena-query-output").download_file(execution_id + ".csv", local_filename)
return pd.read_csv(local_filename)

确保相应的WorkGroup设置了“查询结果位置”,例如“ s3:// athena-query-output /”

也可以通过类似的答案查看此线程:How to Create Dataframe from AWS Athena using Boto3 get_query_results method