7月 17, 2023 - laravel, php开发    aws的athena的使用-php已关闭评论

aws的athena的使用-php

laravel自带支持aws的s3,故可以直接使用AthenaClient.

2_1先new AthenaClient,初始化参数,如key,secret :

$athena_client = new AthenaClient([
    'version' => 'latest',
    'region' => env('AWS_DEFAULT_REGION'),
    'credentials' => [
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
    ],
]);

2_2运行SQL,获取到QueryExecutionId:

//运行查询语句.指定database,sql,output
$res = $athena_client->startQueryExecution([
    'QueryExecutionContext' => [
        'Database' => 'yoywow_dws',//数据库
    ],
    //sql查询语句
    'QueryString' => "select * from dws_new_industry_bi_hot_talents where dt='20230715' limit 100",
    'ResultConfiguration' => [
        'EncryptionConfiguration' => ['EncryptionOption' => 'SSE_S3'],
        //运行结果保存的目录示例:s3://testforanalytist/123654/83002323-42323-332323-332d-3232323dafsa.csv
        'OutputLocation' => 's3://testforanalytist/123654/',
    ],
]);
$query_execution_id = $res->toArray()['QueryExecutionId'];

2_3_1:根据QueryExecutionId获取运行状态:

$query_execution = $athena_client->getQueryExecution(['QueryExecutionId' => '840f2c3d-1790-45b7-942e-4e02a5815cc2']);
//根据id获取运行状态,当State=='SUCCESSED'则,表示已经运行成功,并自动保存到了,创建时指定的目录+queryExecutionId.csv中了.
dd($query_execution->get('QueryExecution')['Status']);

运行成功后,自动生成的结果:

2_3_2:还根据QueryExecutionId获取数据集,并自定义下载数据到自定义的csv中,此方法不如直接采用2_3_1的结果来的方便和快捷.

$param = [
    'QueryExecutionId' => '2c43e5ce-ac95-4e59-bc72-a922eb203eb2',
    //一次最多获取n条
    'MaxResults' => 10,
];
//循环获取结果
$datas = [];
do {
    $result = $athena_client->getQueryResults($param);
    $token = $result->get('NextToken');
    if ($token) {
        $param['NextToken'] = $token;
    }
    $data = $result->get('ResultSet');
    foreach ($data['Rows'] as $key => $row) {
        $datas[] = array_column($row['Data'], 'VarCharValue');
    }
} while ($token);
//导入到csv中.
$csv = Writer::createFromString();
$csv->setOutputBOM(Reader::BOM_UTF8);
$csv->insertAll($datas);
$put_res = Storage::disk('local')->put('test.csv', $csv->getContent());
dd($put_res);

3:官网athena支持的所有方法列表:


文档链接:https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Athena.AthenaClient.html

4:其余参考链接:

How to fetch data from AWS Athena using PHP


https://stackoverflow.com/questions/75594678/athena-query-using-aws-php-sdk

5:在页面中直接使用athena查询:

 

评论被关闭。