如何通过API创建Athena数据库

con*_*234 8 amazon-athena

我想通过API在Athena中创建一个数据库.我在S3中有镶木地板文件,我想使用API​​查询,我想使用Athena进行查询.

无论如何,我可以通过API为Athena创建一个数据库?

Zer*_*odf 13

在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
)
Run Code Online (Sandbox Code Playgroud)

有适用于Java,.NET,Node,PHP,Python,Ruby,Go和C++的SDK .如果您想创建自己的API请求,我建议您充分了解签名过程.您也可以使用AWS CLI:

$ aws athena start-query-execution --query-string "CREATE database ATHENA_TEST_TWO" --result-configuration "OutputLocation=s3://TEST_BUCKET/"
Run Code Online (Sandbox Code Playgroud)

创建数据库后,可以在查询请求中传递数据库名称.

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

要查看某些DDL从Parquet文件创建表,请参阅Amazon Athena用户指南中的以下示例.

编辑响应@ condo1234的问题:

但是如何将数据库与S3中的文件相关联?

简短的回答是你没有.您将表与在S3中的存储桶中共享前缀的文件相关联.

例如,假设我想创建一个表来分析保存的数据s3://TEST_BUCKET.通过AWS控制台,我可以使用命名不佳的"创建文件夹"按钮来创建一个名为的前缀one-table-many-files/.然后我创建了两个csv文件:

f1.csv

Codd,1923
Ellison,1944
Chamberlin,1944
Boyce,1947
Run Code Online (Sandbox Code Playgroud)

f2.csv

Hopper,1906
Floyd,1953
Moriarty Wolf Chambers,1980
Run Code Online (Sandbox Code Playgroud)

然后我将这些文本文件上传到示例存储桶/前缀组合 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/'; 
Run Code Online (Sandbox Code Playgroud)

并运行以下SQL语句:

SELECT * FROM php_test.computer_scientists;
Run Code Online (Sandbox Code Playgroud)

我得到了以下结果,来自DDL中指定的bucket +前缀组合中的两个文件的数据.

"name","year_born"
"Hopper","1906"
"Floyd","1953"
"Moriarty Wolf Chambers","1980"
"Codd","1923"
"Ellison","1944"
"Chamberlin","1944"
"Boyce","1947"
Run Code Online (Sandbox Code Playgroud)

请注意,我使用的是"前缀"而不是"文件夹"?那是因为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
    ],
]);

?>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅PHP SDK文档.