如何通过API创建Athena数据库

问题描述 投票:0回答:2

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

我可以通过 API 为 Athena 创建数据库吗?

amazon-athena
2个回答
24
投票

可以通过创建您自己的 API 请求或使用 SDK 来在 Athena 中创建数据库。

这是一个使用 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 请求,我建议您充分了解签名流程。您还可以这样使用 AWS CLI:

$ 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/
前缀
。然后我创建了两个 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 文档了解更多信息。


0
投票

Java 和 AWS SDK 示例怎么样? 关于如何创建数据库的信息并没有反映在AWS上的文档和示例中,但是科学的戳方法确实创造了奇迹。 在 AWS 上使用此 https://docs.aws.amazon.com/athena/latest/ug/code-samples.html 示例,只需更改此

QueryExecutionContext queryExecutionContext = 
QueryExecutionContext.builder().catalog("YourAWSCatalogName").build()

其中 YourAWSCatalogName 是 AWS 上的 Athena 控制台中的 Data Source 的名称。

接下来,使用带 DDL 的查询来创建数据库。

对我来说,这是一个谜,为什么不可能在同一个 Athena AWS 示例中写下这一点。

© www.soinside.com 2019 - 2024. All rights reserved.