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

Posted

技术标签:

【中文标题】如何将存储在雪花中的所有视图下载到本地机器【英文标题】:How to download all views stored in snowflake to local machine 【发布时间】:2020-03-04 16:51:44 【问题描述】:

我想为保存在雪花(不是数据)上的所有 SQL 脚本(视图)创建备份。我该怎么做?显然,手动复制和粘贴不是答案。 预期结果:我拥有本地机器上雪花数据库中的所有视图(sql 脚本),每个视图都有一个文件。 预期结果完美版本:我在本地机器上拥有雪花中的所有视图(sql 脚本),其中文件夹对应雪花中的模式,文件对应于雪花中的视图雪花(文件也放置在正确的文件夹中)。

【问题讨论】:

【参考方案1】:

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

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

您可以在 CLI 中使用 SNOWSQL 调用它。

【讨论】:

【参考方案2】:

你可以运行:

SELECT get_ddl('schema',schema_name);

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

【讨论】:

【参考方案3】:

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

选项 1

选择 GET_DDL('database','databasename') 并复制并保存到您的机器上

选项 2

编写 Python 脚本以获取架构、视图、表、存储过程等的列表,并将其保存到本地计算机上的相应文件夹中。像这样,您只需扩展它即可获得完美的版本输出。只需安装雪花 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()

【讨论】:

以上是关于如何将存储在雪花中的所有视图下载到本地机器的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地蜂巢连接到雪花?

如何使用雪花存储过程将变量数据传递到雪花表中

如何将所有数据提取到拆分行中的雪花对象数组中?

我们可以使用雪花中的存储过程将文件从文件位置加载到命名内部阶段吗?

如何将 Postgres Hstore 数据类型转换为雪花对象或变体

将 Avro 中存储为整数(自 1970 年 1 月 1 日以来的天数)的“日期”转换为雪花“日期”类型