Я обнаружил, что клонирование отдельных таблиц с разрешениями на копирование позволяет копировать разрешения на эти объекты, поэтому не нужно повторно применять разрешения на роль. Я использую хранимую процедуру для запуска клонирования всех моих объектов из Prod-> Uat-> Dev и т. Д. Это эффективно для данных, однако, если вы вносите изменения в схему в более низких средах, это может быть не лучшим решением. Копирование из источника в цель (Prod to UAT). Вот пример кода, измените его в соответствии с вашими потребностями. Вы можете добавить столько таблиц, сколько вам нужно. Просто повторите код в блоке $$ javascript $$.
CREATE or REPLACE PROCEDURE public.clone_table_objects(SOURCE_DATABASE_NAME VARCHAR,DESTINATION_DATABASE_NAME VARCHAR)
RETURNS VARCHAR
LANGUAGE javascript
EXECUTE AS CALLER
AS
$$
table1 = snowflake.execute( { sqlText:
"CREATE OR REPLACE TABLE " + DESTINATION_DATABASE_NAME + ".schema1.table1 COPY GRANTS CLONE "+ SOURCE_DATABASE_NAME + ".schema1.table1;"
} );
table2 = snowflake.execute( { sqlText:
"CREATE OR REPLACE TABLE " + DESTINATION_DATABASE_NAME + ".schema1.table2 COPY GRANTS CLONE "+ SOURCE_DATABASE_NAME + ".schema1.table2;"
} );
$$;
Выполните процедуру. CALL public.clone_table_objects ('prod_db' :: VARCHAR, 'uat_db' :: VARCHAR);