我目前正在创建一个数据湖,在那里我们可以在S3中编译、组合和分析多个数据集。
我使用雅典娜和Quicksight作为其核心部分,以便能够快速查询和探索数据。为了让最终用户在Quicksight中的工作变得更容易,我创建了许多执行基本转换和聚合的雅典娜视图。
我希望能够对我的视图进行源代码控制,并围绕它们创建一些自动化,这样我们就可以有一种代码驱动的方法,而不是依赖用户手动更新视图和运行DDL来更新定义。
Cloudformation中似乎没有任何对雅典娜视图的支持。
我目前的方法是在源代码控制中将create or replace view as ... DDL保存在.sql文件中,然后创建某种类型的脚本来运行DDL,这样它就可以成为持续集成解决方案的一部分。
还有没有其他的雅典娜视图自动化和CI经验?
发布于 2021-06-12 06:09:21
自从OP发布以来已经很久了,但是这里有一个bash脚本可以做到这一点。您可以在您选择的CI上使用此脚本。
此脚本假设您有一个目录,其中包含视图的所有.sql文件定义。在该目录中有一个.env文件,用于在部署时替换shell env。
#!/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发布于 2019-05-29 20:50:00
我认为你可以使用AWS胶水
我应该在什么时候使用AWS胶水?
您可以使用AWS Glue构建数据仓库来组织、清理、验证和格式化数据。您可以转换AWS Cloud数据并将其移动到您的数据存储中。您还可以将来自不同来源的数据加载到您的数据仓库中,以进行定期报告和分析。通过将其存储在数据仓库中,您可以集成来自业务不同部分的信息,并为决策提供通用的数据源。
AWS Glue简化了您构建数据仓库时的许多任务:
https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html
https://stackoverflow.com/questions/56360936
复制相似问题