首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动维护雅典娜视图

自动维护雅典娜视图
EN

Stack Overflow用户
提问于 2019-05-29 20:42:24
回答 2查看 754关注 0票数 4

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

我使用雅典娜和Quicksight作为其核心部分,以便能够快速查询和探索数据。为了让最终用户在Quicksight中的工作变得更容易,我创建了许多执行基本转换和聚合的雅典娜视图。

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

Cloudformation中似乎没有任何对雅典娜视图的支持。

我目前的方法是在源代码控制中将create or replace view as ... DDL保存在.sql文件中,然后创建某种类型的脚本来运行DDL,这样它就可以成为持续集成解决方案的一部分。

还有没有其他的雅典娜视图自动化和CI经验?

EN

回答 2

Stack Overflow用户

发布于 2021-06-12 06:09:21

自从OP发布以来已经很久了,但是这里有一个bash脚本可以做到这一点。您可以在您选择的CI上使用此脚本。

此脚本假设您有一个目录,其中包含视图的所有.sql文件定义。在该目录中有一个.env文件,用于在部署时替换shell env。

代码语言:javascript
复制
#!/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
票数 1
EN

Stack Overflow用户

发布于 2019-05-29 20:50:00

我认为你可以使用AWS胶水

我应该在什么时候使用AWS胶水?

您可以使用AWS Glue构建数据仓库来组织、清理、验证和格式化数据。您可以转换AWS Cloud数据并将其移动到您的数据存储中。您还可以将来自不同来源的数据加载到您的数据仓库中,以进行定期报告和分析。通过将其存储在数据仓库中,您可以集成来自业务不同部分的信息,并为决策提供通用的数据源。

AWS Glue简化了您构建数据仓库时的许多任务:

  • 会发现有关数据存储的元数据并将其编录到中央编录中。您可以处理半结构化数据,如点击流或使用来自预定爬虫程序的表定义的process logs.
  • Populates
  • 。爬虫调用分类器逻辑来推断数据的架构、格式和数据类型。此元数据以表的形式存储在AWS Glue Data Catalog中,并在您的ETL脚本的创作过程中使用,以将您的数据从源转换、扁平化和丰富为target.
  • Detects模式更改,并基于您的preferences.
  • Triggers基于计划或事件调整您的jobs.
  • Generates作业。您可以自动启动作业以将数据移动到数据仓库中。触发器可用于在jobs.
  • Gathers运行时度量之间创建依赖关系流,以监视data warehouse.
  • Handles错误的活动,并根据需要重试automatically.
  • Scales资源以运行作业。

https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56360936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档