我的Athena查询结果似乎太短了。试图弄清楚为什么?
设置:
胶水目录(118.6千兆字节)。 数据:以CSV和JSON格式存储在S3中。 Athena Query:当我查询整个表的数据时,每个查询只获得40K结果,对于一个月的数据,该查询平均应该有121Million记录。
Athena Cap查询结果数据吗?这是服务限制(文档不建议这样做)。
答案 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