Snowflake cloud data platform 雪花数据仓库中的模式版本控制

Snowflake cloud data platform 雪花数据仓库中的模式版本控制,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我感兴趣的是,通过使用模式版本控制,雪花数据库的用户可以不受更改的影响。我一直在研究如何使用连接语法来定义一个模式,在这个模式中,将为每个版本创建一个包含核心表视图的新模式,任何未更改的视图都将被复制,其他被修改的视图将被向后兼容。当用户连接时,理想情况下会为他们提供所需版本的正确连接语法 我遇到的问题是,有多个团队各自拥有与核心业务领域关联的模式,我认为不可能在连接语法中定义多个模式 有没有人在有多个用户、模式和开发团队的环境中实现了这一点 问候, Luke作为发布过程的第一步,您可以将“当前

我感兴趣的是,通过使用模式版本控制,雪花数据库的用户可以不受更改的影响。我一直在研究如何使用连接语法来定义一个模式,在这个模式中,将为每个版本创建一个包含核心表视图的新模式,任何未更改的视图都将被复制,其他被修改的视图将被向后兼容。当用户连接时,理想情况下会为他们提供所需版本的正确连接语法

我遇到的问题是,有多个团队各自拥有与核心业务领域关联的模式,我认为不可能在连接语法中定义多个模式

有没有人在有多个用户、模式和开发团队的环境中实现了这一点

问候,


Luke

作为发布过程的第一步,您可以将“当前版本”架构克隆到新的“x版本”架构,然后使用原始名称部署新架构

例子: 创建模式MY_DB.MY_SCHEMA_20200103克隆MY_DB.MY_SCHEMA

。。。部署发布步骤

重要注意事项
  • 必须小心处理所有引用,以确保它们指向正确的对象,无论该对象是版本化架构中的对象还是当前架构中的对象
  • 这将复制模式中所有对象的授权,但需要授予新创建模式的权限

我们使用Alembic对Snowflake进行数据库版本控制。Alembic是一种“迁移”工具,您可以在其中对数据仓库运行多个更改(或迁移)。它本质上是Python中SQLAlchemy库的一个附加组件

在本地开发时,我们创建数据库的克隆,并测试对克隆数据库的迁移更改。一旦我们知道它是有效的,我们就把它推到GitLab,让它获得批准,然后我们就可以运行一个具有
accountadmin
凭据的CI/CD管道,以便在生产中进行更改

因为它是用Python编写的,所以可以将其连接到Git工具(如GitHub或GitLab),在合并请求中提交更改,并在生产数据库中运行之前获得批准

以下是文档:

根据Snowflake文档,这也得到了官方支持:

Alembic迁移的示例可能如下所示:


Revision ID: 78a3acc7fbb2
Revises: 3f2ee8d809a6
Create Date: 2019-11-06 11:40:38.438468

"""

# revision identifiers, used by Alembic.
revision = '78a3acc7fbb2'
down_revision = '3f2ee8d809a6'
branch_labels = None
depends_on = None

from alembic import op
import sqlalchemy as sa

def upgrade():
    op.create_table('test_table',
    sa.Column('op', sa.String(length=255), nullable=True),
    sa.Column('id', sa.String(length=255), nullable=False),
    sa.Column('amount', sa.BigInteger(), nullable=True),
    sa.Column('reason', sa.String(length=255), nullable=True),
    sa.Column('deleted', sa.Boolean(), nullable=True),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('company_id', sa.Integer(), nullable=True),
    sa.Column('inserted_at', sa.DateTime(), nullable=True),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('dw_import_filename', sa.String(length=255), nullable=True),
    sa.Column('dw_import_file_row_number', sa.Integer(), nullable=True),
    sa.Column('dw_import_timestamp', sa.TIMESTAMP(), nullable=True),
    sa.PrimaryKeyConstraint('id'),
    schema='test_schema'
    )

def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('test_table', schema='test_schema')

正如您所看到的,您必须提供升级,并具有降级的能力,这将逆转升级。如果您对Alembic有任何其他问题,或者您对此感兴趣,那么我很乐意解释更多

我听说过许多外部工具(GitHub、CircleCI等),客户将这些工具实现到他们的雪花工作流中,以更改模式的控制。我不认为这些工具现在可以直接集成到Snowflake中,但这将是一个很好的功能要求。是的,我也遵循同样的过程。每次我在snowflake中创建或修改表、视图和存储过程时,我都会更改并提交给Git repos。所以我有做过改变的历史数据。当你有一个大的团队并且在同一个过程中工作时,这个过程也变得很重要。但正如@SuzyLockwood所说,没有这样的工具直接集成到snowflake中,我们只需要实现我们自己的处理过程。