web-dev-qa-db-ja.com

データをs3に保存せずにBoto3 athenaクエリ

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出力場所を指定することは必須のようです。それで、これを回避し、応答でのみ結果を取得する方法は何でしょうか?

7
muazfaiz

「start_query_execution」コマンドを実行するときは常に、S3一時バケットの場所を指定する必要があります。ただし、クエリIDを使用して「get_query_results」メソッドを実行することにより、結果セット(dict)を取得できます。

応答(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一時バケット内のすべてのファイルを削除できます。

1
Ishay Hilzenrat

StartQueryExecution アクションには、S3出力場所が必要です。 ResultConfigurationパラメータは必須です。

Athenaをクエリする別の方法は JDBCまたはODBCドライバー)を使用する です。S3に結果を保存したくない場合は、おそらくこの方法を使用する必要があります。

1
spg

Pythonを使用してデータを処理したい場合でも、Athenaがデータを保存するための一時的な場所としてs3を提供する必要があります。ただし、Pagination APIを使用してタプルとしてデータをページングできます。例を参照してください ここ 。それが役に立てば幸い

0
Tanveer Uddin