gpt4 book ai didi

amazon-web-services - 自动化维护 Athena View

转载 作者:行者123 更新时间:2023-12-04 13:58:38 27 4
gpt4 key购买 nike

我目前正在创建一个数据湖,我们可以在其中编译、组合和分析 S3 中的多个数据集。

我使用 Athena 和 Quicksight 作为其中的核心部分,以便能够快速查询和探索数据。为了让最终用户更轻松地使用 Quicksight,我创建了许多执行一些基本转换和聚合的 Athena View 。

我希望能够对我的 View 进行源代码控制并围绕它们创建一些自动化,以便我们可以采用代码驱动的方法,而不是依赖于用户手动更新 View 和运行 DDL 来更新定义。

Cloudformation 中似乎不支持 Athena View 。

我目前的方法是只保存 create or replace view as ... DDL 在源代码管理中的 .sql 文件中,然后创建某种运行 DDL 的脚本,以便它可以成为持续集成解决方案的一部分。

任何人对 Athena View 的自动化和 CI 有任何其他经验吗?

最佳答案

自 OP 发布以来已经很长时间了,但这里有一个 bash 脚本来做到这一点。您可以在您选择的 CI 上使用此脚本。
此脚本假定您有一个包含 View 的所有 .sql 文件定义的目录。在该目录中有一个 .env 文件,用于在部署时替换 shell envs。

#!/bin/bash

export VIEWS_DIRECTORY="views"
export DEPLOY_ENVIRONMENT="dev"
export ENV_FILENAME="views.env"
export OUTPUT_BUCKET="your-bucket-name-$DEPLOY_ENVIRONMENT"
export OUTPUT_PREFIX="your-prefix"
export AWS_PROFILE="your-profile"

cd $VIEWS_DIRECTORY
# Create final .env file with any shell env replaced
env_file=".env"
envsubst < $ENV_FILENAME > $env_file

# Export variables in .env as shell environment variables
export $(grep -v '^#' ./$env_file | xargs)

# Loop through all SQL files replacing env variables and pushing to AWS
FILES="*.sql"
for view_file in $FILES
do
echo "Processing $view_file file..."
# Replacing env variables in query file
envsubst < $view_file > query.sql
# Running query via AWS CLI
query=$(<query.sql) \
&& query_execution_id=$(aws athena start-query-execution \
--query-string "$query" \
--result-configuration "OutputLocation=s3://${OUTPUT_BUCKET}/${OUTPUT_PREFIX}" \
--profile $AWS_PROFILE \
| jq -r '.QueryExecutionId')
# Checking for query completion successfully
echo "Query executionID: $query_execution_id"
while :
do
query_state=$(aws athena get-query-execution \
--query-execution-id $query_execution_id \
--profile $AWS_PROFILE \
| jq '.QueryExecution.Status.State')
echo "Query state: $query_state"
if [[ "$query_state" == '"SUCCEEDED"' ]]; then
echo "Query ran successfully"
break
elif [[ "$query_state" == '"FAILED"' ]]; then
echo "Query failed with ExecutionID: $query_execution_id"
exit 1
elif [ -z "$query_state" ]; then
echo "Unexpected error. Terminating routine."
exit 1
else
echo "Waiting for query to finish running..."
sleep 1
fi

done

done

关于amazon-web-services - 自动化维护 Athena View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56360936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com