【问题标题】:Boto3 athena query without saving data to s3Boto3雅典娜查询而不将数据保存到s3
【发布时间】:2019-03-28 17:38:46
【问题描述】:

我正在尝试使用 boto3 运行一组查询,并且不想将数据保存到 s3。相反,我只想获得结果并希望使用这些结果。我正在尝试执行以下操作

import boto3

client = boto3.client('athena')
response = client.start_query_execution(
        QueryString='''SELECT * FROM mytable limit 10''',
        QueryExecutionContext={
            'Database': 'my_db'
            }.        
        ResultConfiguration={
            'OutputLocation': 's3://outputpath',
            }
        )

print(response)

但这里我不想给ResultConfiguration,因为我不想在任何地方写结果。但是如果我删除 ResultConfiguration 参数,我会收到以下错误

botocore.exceptions.ParamValidationError: Parameter validation failed:
Missing required parameter in input: "ResultConfiguration"

因此,似乎为写作提供 s3 输出位置是虚构的。那么有什么方法可以避免这种情况并仅在响应中获得结果呢?

【问题讨论】:

    标签: amazon-web-services boto3 amazon-athena


    【解决方案1】:

    StartQueryExecution 操作确实需要 S3 输出位置。 ResultConfiguration 参数是必需的。

    查询 Athena 的另一种方法是 using JDBC or ODBC drivers。如果您不想将结果存储在 S3 中,您可能应该使用此方法。

    【讨论】:

    • 目标是使用 Python boto3 运行这些查询。我知道我可以使用 SQL 工作台运行这些并在那里配置 JDBC 驱动程序,但不确定我是否可以使用 Python 运行它?
    【解决方案2】:

    尽管您想使用 python 处理数据,但您仍然需要提供 s3 作为 Athena 保存数据的临时位置。但是您可以使用 Pagination API 将数据作为元组进行分页。请参考示例here。希望有帮助

    【讨论】:

      【解决方案3】:

      无论何时运行“start_query_execution”命令,您都必须指定 S3 临时存储桶位置。但是,您可以通过使用查询 ID 运行“get_query_results”方法来获取结果集(字典)。

      响应(dict)将如下所示:

      {
      'UpdateCount': 123,
      'ResultSet': {
          'Rows': [
              {
                  'Data': [
                      {
                          'VarCharValue': 'string'
                      },
                  ]
              },
          ],
          'ResultSetMetadata': {
              'ColumnInfo': [
                  {
                      'CatalogName': 'string',
                      'SchemaName': 'string',
                      'TableName': 'string',
                      'Name': 'string',
                      'Label': 'string',
                      'Type': 'string',
                      'Precision': 123,
                      'Scale': 123,
                      'Nullable': 'NOT_NULL'|'NULLABLE'|'UNKNOWN',
                      'CaseSensitive': True|False
                  },
              ]
          }
      },
      'NextToken': 'string'
      }
      

      更多信息见boto3客户端文档:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena.html#Athena.Client.get_query_results

      然后您可以删除您指定的 S3 临时存储桶中的所有文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-04
        • 2022-01-03
        • 2021-11-16
        • 2019-04-29
        • 2021-06-14
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        相关资源
        最近更新 更多