web-dev-qa-db-ja.com

APIを介してAthenaデータベースを作成する方法

APIを介してAthenaにデータベースを作成したいと思います。 APIを使用してクエリしたいS3の寄木細工のファイルがあり、クエリにAthenaを使用したいと思います。

とにかく、AthenaのAPIを介してデータベースを作成できますか?

8
condo1234

Athenaでデータベースを作成するには、独自のAPIリクエストを作成するか、 [〜#〜] sdk [〜#〜] を使用します。

SDKを使用したPythonの例:

import boto3

client = boto3.client('athena')

config = {'OutputLocation': 's3://TEST_BUCKET/'}

client.start_query_execution(
                             QueryString = 'create database TEST_DATABASE', 
                             ResultConfiguration = config
)

Java、.NET、Node、 [〜#〜] php [〜#〜] 、Python、Ruby、Go、C++で利用できるSDKがあります。独自のAPIリクエストを作成する場合は、 署名プロセス をよく理解することをお勧めします。 AWSCLIを次のように使用することもできます。

$ aws athena start-query-execution --query-string "CREATE database ATHENA_TEST_TWO" --result-configuration "OutputLocation=s3://TEST_BUCKET/"

データベースを作成したら、クエリリクエストでデータベース名を渡すことができます。

context = {'Database': 'TEST_DATABASE'}
client.start_query_execution(QueryString='CREATE TABLE ...', 
                             QueryExecutionContext = context, 
                             ResultConfiguration=config)

Parquetファイルからテーブルを作成するDDLを確認するには、 Amazon Athenaユーザーガイド の次の例を参照してください。

@ condo1234の質問に答えて編集:

しかし、データベースをS3のファイルに関連付けるにはどうすればよいですか?

簡単な答えはあなたがしないということです。 S3のバケットでプレフィックスを共有するファイルにテーブルを関連付けます。

たとえば、s3://TEST_BUCKETに保持されているデータを分析するためのテーブルを作成するとします。 AWSコンソールを介して、名前の悪い「フォルダの作成」ボタンを使用して、one-table-many-files/という名前のプレフィックスを作成できます。次に、2つのcsvファイルを作成しました。

f1.csv

Codd,1923
Ellison,1944
Chamberlin,1944
Boyce,1947

f2.csv

Hopper,1906
Floyd,1953
Moriarty Wolf Chambers,1980

次に、これらのテキストファイルをバケットとプレフィックスの組み合わせの例s3://TEST_BUCKET/one-table-many-files/にアップロードしました。

次のDDLを実行しました。

CREATE EXTERNAL TABLE php_test.computer_scientists (
  name string,
  year_born int
  ) 
ROW FORMAT DELIMITED
 FIELDS TERMINATED BY ','
 LINES TERMINATED BY '\n'
LOCATION 's3://TEST_BUCKET/one-table-many-files/'; 

そして、次のSQLステートメントを実行しました。

SELECT * FROM php_test.computer_scientists;

DDLで指定されたバケットとプレフィックスの組み合わせの両方のファイルからのデータを使用して、次の結果が返されました。

"name","year_born"
"Hopper","1906"
"Floyd","1953"
"Moriarty Wolf Chambers","1980"
"Codd","1923"
"Ellison","1944"
"Chamberlin","1944"
"Boyce","1947"

「フォルダ」ではなく「プレフィックス」という単語を使用していることに注意してください。これは、S3に フォルダーの概念がない !ただし、これらのプレフィックスは Athena Partitioning を許可するので便利です。

あなたの要求に従って、ここにphpの例もあります。

<?php
print('Welcome to PHP');

require 'aws-autoloader.php';

$athena = new Aws\Athena\AthenaClient(['version' => 'latest', 'region' => 'us-east-1' ]);

$athena->StartQueryExecution([
    'QueryString' => 'CREATE DATABASE php_test;',
    'ResultConfiguration' => [
        'OutputLocation' => 's3://TEST_BUCKET/', // REQUIRED
    ],
]);

?>

詳細については、 PHP SDKドキュメント を参照してください。

13
Zerodf