Gain de temps et d’espace : simplifier DevOps grâce au clonage rapide

Gain de temps et d’espace : simplifier DevOps grâce au clonage rapide


Comme j’ai écrit avant, je pense que notre fonctionnalité de clonage rapide est plutôt cool. Non seulement il est très rapide (car il m’a fallu à peine une minute pour cloner une base de données de 2 To !), mais il vous permet d’avoir plusieurs copies de vos données sans le surcoût de stockage généralement associé à la réplication des données.

C’est bien beau, mais dans le monde réel, les gens veulent voir de nombreux exemples sur la façon de faire bon usage de cette fonctionnalité. Une question courante des clients est de savoir comment utiliser la fonctionnalité de clonage rapide de Snowflake pour prendre en charge DevOps. Plus précisément, peut-il être utilisé pour soutenir un processus de promotion du développement à l’intégration/test à la production ?

La réponse est oui! Voici quelques exemples de la façon dont cela pourrait fonctionner.

Premiers pas : Cloner votre base de données de production

Pour commencer, supposons que vous ayez une base de données dans Snowflake (c’est-à-dire la production par défaut) et qu’elle ait un schéma nommé PUBLIC. Dans cette base de données, vous avez deux tables (A et B) et elles sont remplies quotidiennement par un processus de chargement.

image2

Maintenant, vous constatez que vous devez apporter des modifications et des ajouts et réalisez que vous devriez ne pas faites ceux en production alors maintenant vous avez besoin d’une base de données de développement. Comment faites-vous cela dans Snowflake?

Vous pouvez le faire à l’ancienne et simplement créer une nouvelle base de données, puis copier les tables et les données existantes depuis la production (en utilisant une opération « CREATE TABLE AS SELECT … » ou CTAS). S’il s’agit de grandes tables, cela prendrait du temps et coûterait plus cher car cela nécessite également plus d’espace. Cependant, en utilisant la fonction de clonage rapide de Snowflake, vous pouvez le faire beaucoup plus rapidement et ne pas supporter le coût de l’espace supplémentaire.

Voici comment faire:

CREATE DATABASE Dev CLONE Prod;

Ça y est, une seule commande ! Il crée la nouvelle base de données, le nouveau schéma et les nouvelles tables et vous donne une copie logique des données de production avec lesquelles travailler presque instantanément.

Pendant que vous y êtes, vous pouvez également créer la base de données de test d’intégration (base de données INT) :

CREATE DATABASE Int CLONE Prod;

Vous êtes maintenant prêt à poursuivre vos efforts de développement d’entrepôt de données avec un environnement approprié en place.

Scénario 2 : Promouvoir un nouveau développement

Sur la base de ce que nous avons fait ci-dessus, votre base de données de développement actuelle contient les tables A et B, clonées à partir de Prod. Lorsque vous commencez votre itération de développement, vous pouvez ajouter d’autres tables. Dans cet exemple, nous avons ajouté deux nouvelles tables C et D, qui sont en cours de développement.

Etat initial:

Base de données de produits : Tableaux A, B

Base de données internationale : Tableaux A, B (précédemment clonés à partir de Prod)

Base de données de développement :

  • Tableaux A, B (précédemment clonés à partir de Prod)
  • Tableaux C, D (créés dans le cadre d’un nouveau développement)

image5 1

Mini-version :

Supposons maintenant que vous vouliez faire une mini-version, dans laquelle vous :

  • Promouvoir uniquement le tableau C en Int pour les tests
  • Laissez la table D telle quelle dans Dev (travail en cours, pas prêt à être déployé)

Pour effectuer cette mini-version, vous devez exécuter les étapes suivantes dans un script, à l’aide du client en ligne de commande ou dans la feuille de calcul Snowflake :

1. Déployez la Table C pour Int par simple clone :

  • Si C contient déjà production données (copier des données):
  • Si le tableau C ne contient que des données de test et que vous ne souhaitez pas copier les données :

2. Si la validation du tableau C réussit à Intpuis déployez-le sur Produit:

Vous avez maintenant la nouvelle table C en direct dans votre base de données Prod.

image1 1

Mais vous n’avez pas encore tout à fait terminé. Vous devez terminer le cycle.

Rafraîchir le développeur :

Nous voulons maintenant actualiser Dev pour être synchronisé avec Prod. Pour ce faire, nous devons créer un clone de production du tableau C et mettre à jour les tableaux A et B avec des données actualisées. Cela servira également à réduire votre espace de stockage en remplaçant la version originale de la Table C en Dev par une table clonée. De même, vous devez également synchroniser Int.

S’il n’y a que quelques tables dans Prod (comme dans notre exemple), alors :

USE Dev.public;
CREATE OR REPLACE TABLE A CLONE Prod.public.A;
CREATE OR REPLACE TABLE B CLONE Prod.public.B;
CREATE OR REPLACE TABLE C CLONE Prod.public.C;
USE Int.public;
CREATE or REPLACE DATABASE Int CLONE Prod;
image3

Noter: CREATE OR REPLACE TABLE supprimera et reconstruira la table. Cela libérera tout espace utilisé dans Dev (ou Int) par ces tables après la dernière opération de clonage.

Astuce : S’il existe de nombreuses tables dans Prod et seulement quelques nouvelles tables dans Dev, cette approche sera plus efficace :

CREATE DATABASE Dev2 CLONE Prod;
USE Dev2.public;
CREATE TABLE D CLONE Dev.public.D; // preserving the WIP table in Dev
DROP DATABASE Dev;
ALTER DATABASE Dev2 RENAME To Dev;

Ce processus supprime tous les clones précédents et vous permet de conserver la table D telle qu’elle est actuellement en cours de développement. Lorsque vous avez terminé le développement sur la table D, vous suivez le même processus que nous avons fait pour la table C pour promouvoir la table D en Int pour les tests, puis jusqu’à Prod pour la mise en ligne. Après la promotion, assurez-vous de remplacer le tableau D dans Dev et Int par un nouveau clone de Prod afin de libérer de l’espace.

Scénario 3 : promouvoir une modification dans une table existante

Supposons maintenant que vous ayez déjà trois tables en production et que vous deviez modifier l’une de ces tables (c’est-à-dire ajouter une nouvelle colonne), puis promouvoir la table révisée en production. Il s’agit d’un scénario important, en particulier lorsque des lignes sont constamment ajoutées aux données de la table de production. Dans ce scénario, vous ne souhaitez pas recharger la table modifiée, mais plutôt la modifier, puis continuer avec des chargements incrémentiels.

Etat initial:

Base de données de produits : Tableaux A, B, C

Base de données internationale : Tableaux A, B, C (clonés à partir de Prod)

Base de données de développement : Tableaux A, B, C (clonés à partir de Prod)

image4 1

Mini-version :

Dans ce scénario, vous voulez faire une mini-version, dans laquelle vous allez :

  • Modifier le tableau C en ajoutant une nouvelle colonne
  • Ajustez le processus de chargement pour inclure cette colonne
  • Promouvoir la table C en Int pour les tests

Pour faire cette mini-version, vous devez exécuter les étapes suivantes dans un script ou à la main dans la feuille de calcul Snowflake :

1. Modifiez le tableau et le code (en Développeur), puis actualisez le tableau

2. Déployez la Table C pour Int par simple clone :

3. Si la promotion à Int réussit, puis déployez-vous sur Produit:

Rafraîchir le développeur :

Une fois la promotion en production terminée, vous pouvez à nouveau actualiser Dev et Int en utilisant le même processus que celui mentionné ci-dessus.

USE Dev.public;
CREATE OR REPLACE TABLE C CLONE Prod.public.C;
USE Int.public;
CREATE OR REPLACE TABLE C CLONE Prod.public.C;

Vous avez maintenant un clone de production du tableau C dans Dev & Int avec la nouvelle colonne ajoutée et mise à jour avec de nouvelles données de production.

Vous voulez voir le clonage en action ? Regarde ça vidéo:

Conclusion

Ce ne sont là que quelques exemples de la manière dont vous pouvez utiliser le clonage rapide de Snowflake pour prendre en charge un processus DevOps agile et léger qui ne nécessite pas beaucoup de gestion DBA et ne prend pas de place supplémentaire ! J’espère que cela vous donne quelques idées sur la façon dont vous pouvez utiliser le clonage rapide dans votre environnement de développement.

Merci à Saqib Mustafa (@cloudsommelier) pour son aide sur ce post !

Comme toujours, gardez un œil sur ce site de blog, nos flux Twitter liés à Snowflake (@SnowflakeDB), (@kentgraziano), et (@cloudsommelier) pour plus de choses cool sur Snowflake et pour des mises à jour sur toutes les actions et activités ici à Snowflake Computing.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.