Обновить базу данных снежинки - PullRequest
0 голосов
/ 07 октября 2019

У нас есть 2 снежинки (non-prod и prod). Есть ли способ обновить базу данных Prod в не-prod среде и / или изучить возможность автоматизации этого процесса.

Ответы [ 3 ]

1 голос
/ 07 октября 2019

Полагаю, вы хотите в определенный момент времени реплицировать среду prod в тестовую среду, чтобы вы могли работать с реальными данными.

Это легко сделать с помощью команды CLONE DATABASE, но для этого требуется prodи тестировать базы данных в одной учетной записи. В Snowflake вы должны держать все свои среды в одной учетной записи, но разделять их с разными ролями и, возможно, разными пользователями.

Команда CLONE DATABASE может быть повторена в любое время, чтобы догнать производство.

0 голосов
/ 08 октября 2019

Я обнаружил, что клонирование отдельных таблиц с разрешениями на копирование позволяет копировать разрешения на эти объекты, поэтому не нужно повторно применять разрешения на роль. Я использую хранимую процедуру для запуска клонирования всех моих объектов из 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);

0 голосов
/ 07 октября 2019

Под средой вы подразумеваете две отдельные учетные записи или две отдельные базы данных?

Я не уверен насчет значения " обновление данных ", но если:

  1. Его две отдельные базы данных : Вы можете создавать представления в не-prod базе данных, указывая на базу данных PROD таким образом, всегда просматривая последний набор данных.
  2. Если его два отдельных env: Вы можете использовать Обмен функцией SNOWFLAKE, которая помогает в обмене данными между отдельными учетными записями.
...