基于Python 3.8,通过schemachange实现GitHub Action连接Snowflake DB
使用GitHub Action + schemachange 自动化Snowflake数据库Schema变更
以下是可直接运行的GitHub Action配置,用于通过schemachange工具连接Snowflake数据库,自动执行schema变更脚本。
完整配置代码
name: Snowflake Schema 自动变更 # 触发条件:main分支推送dbscripts目录下文件,或手动触发 on: push: branches: - main paths: - 'dbscripts/**' # 存放SQL变更脚本的目录 workflow_dispatch: jobs: schema-change-job: runs-on: ubuntu-latest steps: # 拉取代码仓库 - name: 拉取仓库代码 uses: actions/checkout@v2 # 配置Python环境 - name: 配置Python 3.8.x环境 uses: actions/setup-python@v2.2.1 with: python-version: 3.8.x # 执行schemachange变更 - name: 执行schemachange env: SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_USERNAME: ${{ secrets.SNOWFLAKE_USERNAME }} SNOWFLAKE_ROLE: ${{ secrets.SNOWFLAKE_ROLE }} SNOWFLAKE_WAREHOUSE: ${{ secrets.SNOWFLAKE_WAREHOUSE }} SNOWFLAKE_DATABASE: ${{ secrets.SNOWFLAKE_DATABASE }} SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }} SNOWFLAKE_SCHEMA: ${{ secrets.SNOWFLAKE_SCHEMA }} run: | echo "当前工作目录: $GITHUB_WORKSPACE" echo "步骤1:安装schemachange" pip install schemachange echo "步骤2:执行schema变更" schemachange -f $GITHUB_WORKSPACE/dbscripts -a $SNOWFLAKE_ACCOUNT -u $SNOWFLAKE_USERNAME -r $SNOWFLAKE_ROLE -w $SNOWFLAKE_WAREHOUSE -d $SNOWFLAKE_DATABASE -s $SNOWFLAKE_SCHEMA -c $SNOWFLAKE_DATABASE.xxxx.CHANGE_HISTORY --create-change-history-table
前置准备
- SQL脚本规范:变更脚本需遵循schemachange命名规则,示例:
V1.1.1__test_sql_table_creation.sql,格式为V<版本号>__<描述>.sql - 脚本存放位置:将SQL脚本放在仓库主分支的
dbscripts目录下 - 配置GitHub Secrets:在仓库的「Settings > Secrets and variables > Actions」中添加以下密钥:
SNOWFLAKE_ACCOUNT:Snowflake账户名SNOWFLAKE_USERNAME:Snowflake用户名SNOWFLAKE_ROLE:执行变更的Snowflake角色SNOWFLAKE_WAREHOUSE:使用的Snowflake仓库SNOWFLAKE_DATABASE:目标数据库SNOWFLAKE_PASSWORD:Snowflake用户密码SNOWFLAKE_SCHEMA:目标Schema
- 注意:配置中的
-c $SNOWFLAKE_DATABASE.xxxx.CHANGE_HISTORY需替换为你实际的变更历史表位置(将xxxx替换为对应的Schema),--create-change-history-table参数会自动创建变更历史表(首次执行时需要)
工作流程说明
- 触发时机:当main分支的
dbscripts目录下有文件推送时自动执行,也可通过GitHub Actions页面手动触发 - 环境配置:使用Ubuntu虚拟机运行,拉取仓库代码后配置Python 3.8环境
- 执行变更:安装schemachange工具,读取
dbscripts下的SQL脚本,连接Snowflake执行变更,并记录变更历史到指定的历史表中
内容的提问来源于stack exchange,提问作者user2466009
相关产品推荐
相关产品推荐

