如何将存储在雪花中的所有视图下载到本地机器



我想创建保存在雪花(而不是数据(上的所有SQL脚本(视图(的备份
我该怎么做?显然,手动复制和粘贴不是一个答案

预期结果:我拥有本地计算机雪花数据库中的所有视图(sql脚本(,每个视图一个文件。

预期结果完美版本:我在本地计算机上拥有雪花中的所有视图(sql脚本(,其中文件夹将对应雪花中的架构,文件将对应雪花的视图(文件也放置在正确的文件夹中(。

SHOW VIEWS在文本列中包含DDL。获取数据库中的所有视图:

show views in database my_database;
select "text" from table(result_scan(-1));

您可以使用SNOWSQL从CLI调用它。

您可以运行:

SELECT get_ddl('schema',{schema_name});

这将获得架构中所有对象的DDL,然后可以将其保存到文件夹中的文件中。

您只需下载完整的数据库DDL

选项1

选择GET_DL("数据库"、"数据库名称"(,然后将其复制并保存到您的机器

选项2

编写Python脚本以获得模式、视图、表、存储的proc等的列表,并将其保存到本地机器上相应的文件夹中。像这样的东西,你只需要扩展它就可以得到完美的版本输出。只需安装snowflake Python连接器即可运行以下代码。

import snowflake.connector
con = snowflake.connector.connect(
    user='YourUsername',
    password='YourPassword',
    account='your snowflakeaccount',
    database='databasename',
    warehouse='datawarehousename',
    role='dbrole'
    )
cur = con.cursor()
try:
    cur.execute("SELECT TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE from information_schema.tables")
    for (TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE) in cur:
        print('{0}, {1}'.format(TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE))
        #Have another loop  to get the DDL for each object and save it to a file/folder structure, something like this..
        #cur2.execute("SELECT GET_DDL('object type information from previous query','object name'")
finally:
    cur.close()

上面的答案很好,但您可以更进一步,通过像DBT这样的版本控制工具来管理所有DDL。

这样,您不仅可以将DDL存储在文本文件中,还可以运行DDL(而不是依赖于容易出错的手动过程(。

否则,你怎么知道你的文本文件是否是最新的?

最新更新