【问题标题】:create schema but for a list of schemas创建模式,但用于模式列表
【发布时间】:2021-12-05 18:15:32
【问题描述】:

为用户名列表创建多个模式的最佳编程选项是什么?

我想这样做是为了方便,所以当用户登录到雪花时,他们将准备好他们的环境。用户通过 scim proto 同步,因此我可以从分配给他们的组中获取列表。

谢谢!

【问题讨论】:

    标签: snowflake-cloud-data-platform ddl


    【解决方案1】:

    例如,可以使用以下命令生成脚本:ACCOUNT_USAGE.USERS:

    USE ROLE ACCOUNTADMIN;
    
    
    WITH schema_cte AS (
      SELECT 
        REPLACE('CREATE SCHEMA IF NOT EXISTS <name> /*CLONE <source schema>*/;'||CHAR(13)
               , '<name>', DISPLAY_NAME) AS create_schema_line
      FROM SNOWFLAKE.ACCOUNT_USAGE.USERS
      -- WHERE additional_condition_here
    )
    SELECT 
        'USE ROLE <role_name_here>;' || CHAR(13) ||
        'USE DATABASE <database_name_here>;' || CHAR(13) ||
        LISTAGG(create_schema_line) WITHIN GROUP(ORDER BY create_schema_line) AS script
    FROM schema_cte;
    

    相关:Identifier Requirements

    【讨论】:

    • 谢谢,使用 RESULTS_SCAN 找到了类似的解决方案。显示角色“blah”的授予;选择'创建语句' || “被授予人名称” || ';'从表(RESULTS_SCAN(LAST_QUERY_ID())));执行这些语句的最佳方法是什么?使用存储过程? PS对不起格式,我无法弄清楚这个糟糕的编辑器
    • @user17145065 你需要一些代码来调用它,所以存储过程都是可行的(Java/JavaScript)。我希望很快 SF 将允许使用 SQL 脚本(纯粹在 SQL 中的存储过程并支持动态 SQL,因此使用EXECUTE IMMEDIATE (&lt;generated code here&gt;) 会更加直接
    • 好的,所以我得到了一个存储过程,它运行 sql 语句,然后执行第一个生成的 sql 语句。现在我在想也许这根本不是一个好方法。也许使用 SDK 从经过适当测试和编写的应用程序执行 sql 会更易于管理?你怎么看?
    • @user17145065 这取决于需要。如果您的团队更熟悉应用程序开发,那么可以,只要有 Snowflake 的连接器,任何语言都可以。另一方面,将所有东西都包含在 Snowflake 平台中有其自身的优势(例如,它可以按计划运行,例如每天都有 TASK)。这就是 Snowflake Data Cloud 的美妙之处,这两种方法都可以实现需求。
    • 我正在尝试找出从长远来看最有效的方法。团队可能会熟悉其中一种语言并将其用于所有 dba 任务。存储过程很酷,但已经遇到了限制,比如 var 大小只有 512 字节——这太傻了。也没有单元测试……另一方面,如果雪花管理被包裹成胶水作业之类的东西 - 然后繁荣!所有基础设施管理、单元测试、调度、访问管理、环境 - 一切都很容易完成✅
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2022-01-05
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多