{"id":14912,"date":"2023-03-22T09:00:21","date_gmt":"2023-03-22T09:00:21","guid":{"rendered":"https:\/\/beta.bluetab.net\/?p=14912"},"modified":"2023-03-22T09:00:21","modified_gmt":"2023-03-22T09:00:21","slug":"que-es-zero-copy-clone","status":"publish","type":"post","link":"https:\/\/beta.bluetab.net\/en\/2023\/03\/que-es-zero-copy-clone\/","title":{"rendered":"Snowflake: Zero-Copy clone, o c\u00f3mo librarte del duplicado de datos al clonar."},"content":{"rendered":"<figure><a href=\"https:\/\/www.linkedin.com\/in\/roberto-garc%C3%ADa-parra-1b914128\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/roberto-garc%C3%ADa-parra-1b914128\/\" target=\"_blank\" rel=\"noopener\">Roberto Garc\u00eda Parra<\/a><\/h4>\n<p>Technical Delivery Manager<\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/gabriel-gallardo-ruiz-9042a0212\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/gabriel-gallardo-ruiz-9042a0212\/\" target=\"_blank\" rel=\"noopener\">Gabriel Gallardo Ruiz<\/a><\/h4>\n<p>Enterprise Architect<\/p>\n<h2>Introducci\u00f3n<\/h2>\n<p>C\u00f3mo continuaci\u00f3n a la serie de art\u00edculos que estamos haciendo sobre las funcionalidades avanzadas que se derivan de la forma en la que se almacenan los datos en Snowflake, presentamos este nuevo art\u00edculo sobre el Zero-copy clone, que permite mediante diferentes operaciones a nivel metadato poder tener diferentes copias o versiones de la informaci\u00f3n, sin tener que duplicar datos en la mayor\u00eda de las ocasiones.<\/p>\n<h2>\u00bfQu\u00e9 es Zero-Copy Clone?<\/h2>\n<p>Uno de los casos de uso m\u00e1s frecuente que implica gran consumo de tiempo, recursos y almacenamiento, especialmente si hablamos de grandes dataset, es el copiado de datos. Para la realizaci\u00f3n de copias de objetos, snowflake ofrece zero-copy clone. Esta operaci\u00f3n se realiza sobre la metadata, lo que permite realizar clonado de objetos r\u00e1pidamente sin tener que duplicar los datos.<\/p>\n<h2>\u00bfC\u00f3mo funciona?<\/h2>\n<p>Snowflake realmente lo que realiza es una copia de la metadata asociada al objeto que se va a clonar. Como podemos ver en el ejemplo de clonaci\u00f3n de la tabla \u2018Events\u2019 en la siguiente imagen, simplemente duplica la metadata sin realizar ning\u00fan cambio en la parte de almacenamiento.<\/p>\n<p><img decoding=\"async\" width=\"624\" height=\"259\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-1.png 624w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-1-300x125.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\"><\/p>\n<p>Una vez realizado el clon, los objetos clonados tienen su propio ciclo de v\u00eda, lo que permite que se puedan realizar cambios sobre los datos sin afectar al objeto original, de igual modo los cambios realizados sobre el objeto original tampoco ser\u00e1n reflejados sobre el objeto clonado.<\/p>\n<p>Zero-copy clone permite la realizaci\u00f3n de clones pr\u00e1cticamente de cualquier objeto de Snowflake siendo especialmente \u00fatil en bases de datos, esquemas y tablas.<\/p>\n<h2>\u00bfQu\u00e9 coste tiene?<\/h2>\n<p>Al tratarse de una operaci\u00f3n exclusiva de metadata, no se repercuten costes ni de procesamiento ni de almacenamiento, ni siquiera es necesario realizar la operaci\u00f3n con un virtual data warehouse activo.<\/p>\n<h2>\u00bfC\u00f3mo se puede clonar una tabla?<\/h2>\n<p><b>Privilegios:<\/b> Para poder clonar una tabla, el ROLE que va a realizar la clonaci\u00f3n tiene que tener privilegios de SELECT sobre la tabla que se va a clonar, adem\u00e1s como es l\u00f3gico, privilegios de CREATE TABLE sobre el esquema destino en el que se va a crear el clon de la tabla.<\/p>\n<p><b>Sentencia<\/b>: La sentencia utilizada para la clonaci\u00f3n de tablas es similar a la de creaci\u00f3n pero a\u00f1adiendo la cl\u00e1usula CLONE. A continuaci\u00f3n, vamos a clonar la tabla \u201cevents&#8221;:<\/p>\n<blockquote><p>\n\t\t\t\tUSE ROLE INGESTA_HUB_ROLE;<br \/>\nUSE SCHEMA WEATHER.HISTORICAL;<br \/>\nCREATE TABLE EVENTS_CLONE CLONE  EVENTS;<\/p><\/blockquote>\n<p>Podemos comprobar que la clonaci\u00f3n de la tabla se realiza de inmediato, ya que como se coment\u00f3 anteriormente \u00fanicamente se opera sobre la metadata.<\/p>\n<p><img decoding=\"async\" width=\"179\" height=\"89\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/query.png\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Adem\u00e1s, podemos observar en la siguiente tabla que todas las propiedades de la tabla origen se han clonado en la nueva tabla. \u00danicamente en el caso en que la tabla origen tenga asignado una cluster key, la nueva tabla se crear\u00e1 con automatic_clustering suspendido.<\/p>\n<table id=\"eael-data-table-c47c05f\">\n<thead>\n<tr>\n<th id=\"\" colspan=\"\"><\/th>\n<th id=\"\" colspan=\"1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tEVENTS<\/th>\n<th id=\"\" colspan=\"1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tEVENTS<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tcluster_by<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tLINEAR (COUNTRY,CITY)<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tLINEAR (COUNTRY,CITY)<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\trows<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t7,479,165<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t7,479,165<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tbytes<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t105,110,528<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t105,110,528<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\towner<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tINGESTA_HUB_ROLE<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tINGESTA_HUB_ROLE<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tretention_time<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t30<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t30<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tautomatic_clustering<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tON<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tOFF<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tchange_tracking<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tOFF<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tOFF<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tsearch_optimization<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tOFF<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tOFF<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tis_external<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tN<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tN<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Con respecto a los privilegios, por defecto no ser\u00e1n clonados. Esto lo podemos comprobar con las sentencias siguientes:<\/p>\n<h4><strong>SHOW GRANTS ON TABLE WEATHER.HISTORICAL.EVENTS;<\/strong><\/h4>\n<p><img decoding=\"async\" width=\"624\" height=\"55\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-2.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-2.png 624w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-2-300x26.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\"><\/p>\n<h4><strong>SHOW GRANTS ON TABLE WEATHER.HISTORICAL.EVENTS_CLONE;<\/strong><\/h4>\n<p><img decoding=\"async\" width=\"567\" height=\"33\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-3.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-3.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-3-300x17.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><\/p>\n<p>Para que se clonen los privilegios asignados a la tabla origen, hay que a\u00f1adir COPY GRANTS en la sentencia de clonado:<\/p>\n<h4><strong>CREATE TABLE EVENTS_CLONE_1 CLONE EVENTS COPY GRANTS;<\/strong><\/h4>\n<p>Ahora podemos comprobar que los privilegios han sido clonados:<\/p>\n<h4><strong>SHOW GRANTS ON TABLE WEATHER.HISTORICAL.EVENTS_CLONE;<\/strong><\/h4>\n<p><img decoding=\"async\" width=\"567\" height=\"51\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-4.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-4.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-4-300x27.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><\/p>\n<h2>Clonaci\u00f3n usando time travel<\/h2>\n<p>Snowflake permite realizar la clonaci\u00f3n de una tabla para un momento hist\u00f3rico determinado, para ello tendremos que utilizar la cl\u00e1usula <strong>AT o BEFORE<\/strong> en la sentencia de clonado.<\/p>\n<p>Para la ejecuci\u00f3n de la prueba, vamos a hacer cambios en la tabla de EVENTS y despu\u00e9s realizaremos el clonado con un time travel anterior al cambio.<\/p>\n<h4><strong>DELETE FROM EVENTS WHERE AIRPORTCODE=&#8217;KS47&#8242;;<\/strong><\/h4>\n<p><img decoding=\"async\" width=\"183\" height=\"47\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-5.png\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Clonamos la tabla con un time travel anterior a la realizaci\u00f3n del borrado<\/p>\n<h4><strong>CREATE TABLE EVENTS_CLONE_TIME_TRAVEL CLONE EVENTS at (offset =&gt; -60*5);<\/strong><\/h4>\n<p>Si consultamos la informaci\u00f3n referente a ambas tablas, podemos comprobar que el clonado se ha realizado en el momento anterior en el que la tabla EVENTS ten\u00eda 9.062 filas m\u00e1s.<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"40\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-6.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-6.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-6-300x21.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"23\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-7.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-7.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-7-300x12.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<h2>Consideraciones del clonado de tablas<\/h2>\n<ul>\n<li>Actualmente las tablas externas no pueden ser clonadas.<\/li>\n<li>La tabla clonada tiene su propio ciclo de vida con lo que no tiene acceso a los datos hist\u00f3ricos de la tabla origen utilizando time travel.<\/li>\n<li>Una tabla clonada no incluye el historial de carga(LOAD_HISTORY) de la tabla de origen.<\/li>\n<li>Si se clona una tabla con una secuencia asignada como valor por defecto a una columna, \u00e9sta seguir\u00e1 referenciando a la secuencia original. En el caso de clonaci\u00f3n de base de datos o esquemas que contengan tanto la secuencia como la tabla, la columna referenciar\u00e1 a la secuencia clonada (esto lo veremos con un ejemplo en la parte de clonado de Esquemas y Bases de dato)<\/li>\n<li>Si clonamos una tabla que contiene a una foreign key, esta seguir\u00e1 haciendo referencia a la tabla con al primary key. Como pasaba en el caso de las secuencias, si la clonaci\u00f3n se realiza sobre un esquema o una base de datos y contiene ambas tablas, las referencias se realizan sobre las clonadas. En el caso de que la referencia de la foreign key sea sobre otra base de datos, seguir\u00e1 realiz\u00e1ndose sobre la tabla que contiene la primary key.<\/li>\n<\/ul>\n<h2>\u00bfC\u00f3mo realizar la clonaci\u00f3n de Esquemas y Base de datos?<\/h2>\n<p><strong>Privilegios:<\/strong> Para poder clonar una base de datos o un esquema en Snowflake el role que va a realizar la operaci\u00f3n tiene que tener permisos USAGE sobre los objetos que se van a clonar y los privilegios adecuados para la creaci\u00f3n de los objetos en el destino.<\/p>\n<p>La realizaci\u00f3n de clonado de un esquema o de una base de datos se realiza de manera recursiva, clonando todos los objetos hijos con la \u00fanica excepci\u00f3n de <strong>las tablas externas , stages internos y snowpipes internos<\/strong> que<strong> no ser\u00e1n clonados<\/strong>.<\/p>\n<p>A diferencia de la clonaci\u00f3n de tablas, cuando se realiza la clonaci\u00f3n de un esquema o una base de datos todos los permisos son heredados, por tanto, todos los objetos de la base de datos o del esquema clonado tendr\u00e1n los mismos privilegios que ten\u00edan en el original.<\/p>\n<p><strong>Sentencia<\/strong><\/p>\n<blockquote><p>\n\t\t\t\tUSE ROLE ACCOUNTADMIN;<br \/>\nUSE DATABASE  WEATHER;<br \/>\nCREATE SCHEMA HISTORICAL_CLON  CLONE  HISTORICAL;<\/p><\/blockquote>\n<p>Al igual que suced\u00eda con la clonaci\u00f3n de tablas, la operaci\u00f3n de clonado se realiza \u00fanicamente sobre la metadata, lo que permite que se realice en un tiempo reducido y sin necesidad de tener un virtual warehouse activo.<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"172\" height=\"89\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-8.png\" alt=\"\" loading=\"lazy\"><figcaption><\/figcaption><\/figure>\n<p>Para comprobar que la clonaci\u00f3n se ha realizado de la forma esperada, podemos observar los objetos de cada una de los esquemas. Comprobamos tablas e <em>internal stages<\/em>.<\/p>\n<h4><strong>SHOW TABLES IN HISTORICAL;<\/strong><\/h4>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"88\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-9.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-9.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-9-300x47.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"81\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-10.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-10.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-10-300x43.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<h4><strong>SHOW TABLES IN HISTORICAL_CLON;<\/strong><\/h4>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"88\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-11.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-11.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-11-300x47.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"81\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-12.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-12.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-12-300x43.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<p>Observamos que las tablas del esquema original y del clonado son iguales, adem\u00e1s, se han heredado tanto owner como resto de propiedades. Como suced\u00eda en el caso de la clonaci\u00f3n de tablas, <em>automatic_clustering<\/em> est\u00e1 desactivado en las tablas del esquema clonado.<\/p>\n<p>A continuaci\u00f3n, vamos a comprobar que los <em>internal stage<\/em> del esquema original no se han clonado en el nuevo esquema<\/p>\n<h4><strong>SHOW STAGES IN HISTORICAL;<\/strong><\/h4>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"571\" height=\"27\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-13.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-13.png 571w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-13-300x14.png 300w\" sizes=\"(max-width: 571px) 100vw, 571px\"><figcaption><\/figcaption><\/figure>\n<h4><strong>SHOW STAGES IN HISTORICAL_CLON;<\/strong><\/h4>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"43\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-14.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-14.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-14-300x23.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<h2>Clonaci\u00f3n usando time travel<\/h2>\n<p>Como suced\u00eda con el clonado de tablas, Snowflake tambi\u00e9n permite realizar el clonado de bases de datos y esquemas usando la opci\u00f3n de time travel.<\/p>\n<p>En este caso vamos a realizar la clonaci\u00f3n de la base de datos en un tiempo anterior a la clonaci\u00f3n del esquema \u201cHISTORICAL\u201d que hemos realizado anteriormente.<\/p>\n<h4><strong>CREATE DATABASE WEATHER_CLONE CLONE WEATHER at (offset =&gt; -60*60);<\/strong><\/h4>\n<h4><strong>SHOW SCHEMAS IN WEATHER;<\/strong><\/h4>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"88\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-15.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-15.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-15-300x47.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<h4><strong>SHOW SCHEMAS IN WEATHER_CLONE;<\/strong><\/h4>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"72\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-16.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-16.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-16-300x38.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<p>Podemos comprobar en la base de datos clonada que no se encuentra el esquema que hemos clonado anteriormente.<\/p>\n<p><strong>Secuencias y <em>foreign key:<\/em><\/strong><\/p>\n<p><strong>&nbsp;<\/strong>Como se coment\u00f3 anteriormente en el clonado de tablas, si se clona un esquema que contiene una tabla con una columna con un valor por defecto de una secuencia o una foreign key y est\u00e1n en el mismo esquema o base de datos, la referencia de la secuencia apuntar\u00e1 a la misma referencia en el esquema o base de datos clonada.<\/p>\n<p>Se ha a\u00f1adido al esquema \u201cHISTORICAL\u201d una tabla \u201cevent_temperature\u201d que contiene una secuencia y una <em>foreign key<\/em> a otra tabla. Se realiza la clonaci\u00f3n:<\/p>\n<h4><strong>CREATE SCHEMA HISTORICAL_CLON_2 CLONE HISTORICAL;<\/strong><\/h4>\n<p>Si se observa la definici\u00f3n de la <em>table<\/em>, podemos comprobar c\u00f3mo se ha cambiado la referencia tanto de la secuencia como de la<em> foreign key.<\/em><\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"567\" height=\"153\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-17.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-17.png 567w, https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/zero-copy-17-300x81.png 300w\" sizes=\"(max-width: 567px) 100vw, 567px\"><figcaption><\/figcaption><\/figure>\n<h2>Consideraciones del clonado de esquemas y bases de datos<\/h2>\n<ul>\n<li>Para el clonado de esquemas y bases de datos hay que tener en cuenta las mismas consideraciones observadas en la parte de las tablas.<\/li>\n<li>Cuando se clona una base de datos o un esquema que contiene tareas, las tareas del clon se suspenden de forma predeterminada.<\/li>\n<li>La clonaci\u00f3n es r\u00e1pida, pero no instant\u00e1nea, especialmente para objetos grandes. Por tanto, si se ejecutan comandos de DDL en los objetos de origen mientras la operaci\u00f3n de clonaci\u00f3n est\u00e1 en curso, es posible que los cambios no sean reflejados en objeto clonado.<\/li>\n<\/ul>\n<h2>Conclusiones<\/h2>\n<p>Como vimos tambi\u00e9n en los art\u00edculos anteriores, Snowflake nos ofrece muchas caracter\u00edsticas avanzadas, es muy importante comprender el funcionamiento de cada una de ellas para poder sacar el m\u00e1ximo partido siendo este el objetivo principal de esta serie de art\u00edculos. En este caso, comprender correctamente el clonado de datos nos va a ayudar a poder utilizar esta caracter\u00edstica de manera correcta cuando sea necesario como puede ser en la creaci\u00f3n de entornos de prueba o en la realizaci\u00f3n de snapshot.<\/p>\n<p>Finalmente, hay que destacar que Snowflake nos ofrece un potente mecanismo de clonado de objetos, permiti\u00e9ndonos la clonaci\u00f3n de una forma sencilla, apenas incurriendo en costes y sin duplicaci\u00f3n de datos. Estas caracter\u00edsticas pueden ser muy importantes cuando vayamos a seleccionar un datawarehouse para nuestro entorno analitico.<\/p>\n<h6><strong>Navegaci\u00f3n<\/strong><\/h6>\n<p><a href=\"\/#intro\">Introducci\u00f3n<\/a><\/p>\n<p><a href=\"\/#objetivo\">\u00bfQu\u00e9 es Zero-Copy Clone?<br \/>\n<\/a><\/p>\n<p><a href=\"\/#escalabilidad\">\u00bfC\u00f3mo funciona?<br \/>\n<\/a><\/p>\n<p><a href=\"\/#coste\">\u00bfQu\u00e9 coste tiene?<\/a><\/p>\n<p><a href=\"\/#tabla\">\u00bfC\u00f3mo se puede clonar una tabla?<br \/>\n<\/a><\/p>\n<p><a href=\"\/#time\">Clonaci\u00f3n usando time travel<br \/>\n<\/a><\/p>\n<p><a href=\"\/#consideraciones\">Consideraciones del clonado de tablas<br \/>\n<\/a><\/p>\n<p><a href=\"\/#clonacion\">\u00bfC\u00f3mo realizar la clonaci\u00f3n de Esquemas y Base de datos?<\/a><\/p>\n<p><a href=\"\/#travel\">Clonaci\u00f3n usando time travel<br \/>\n<\/a><\/p>\n<p><a href=\"\/#bbdd\">Consideraciones del clonado de esquemas y bases de datos<br \/>\n<\/a><\/p>\n<p><a href=\"\/#conclusiones\">Conclusiones<\/a><\/p>\n<p><a href=\"\/#autores\">Autores<\/a><\/p>\n<h5>\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\n<p><a href=\"\/\" role=\"button\"><br \/>\nDESCUBRE BLUETAB<br \/>\n<\/a><\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/roberto-garc%C3%ADa-parra-1b914128\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/roberto-garc%C3%ADa-parra-1b914128\/\" target=\"_blank\" rel=\"noopener\">Roberto Garc\u00eda Parra<\/a><\/h4>\n<p>Technical Delivery Manager<\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/gabriel-gallardo-ruiz-9042a0212\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/gabriel-gallardo-ruiz-9042a0212\/\" target=\"_blank\" rel=\"noopener\">Gabriel Gallardo Ruiz<\/a><\/h4>\n<p>Enterprise Architect<\/p>\n<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/p>\n<h5>DATA STRATEGY<\/h5>\n<p><\/a><a href=\"\/soluciones\/data-strategy\/\">\t\t\t\t\t\t<\/a><br \/>\n<a href=\"\/soluciones\/data-fabric\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-fabric\/\"><\/p>\n<h5>DATA FABRIC<\/h5>\n<p><\/a><a href=\"\/soluciones\/data-fabric\/\">\t\t\t\t\t\t<\/a><br \/>\n<a href=\"\/soluciones\/augmented-analytics\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/augmented-analytics\/\"><\/p>\n<h5>AUGMENTED ANALYTICS<\/h5>\n<p><\/a><a href=\"\/soluciones\/augmented-analytics\/\">\t\t\t\t\t\t<\/a><\/p>\n<p>Te puede interesar<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Roberto Garc\u00eda Parra Technical Delivery Manager Gabriel Gallardo Ruiz Enterprise Architect Introducci\u00f3n C\u00f3mo continuaci\u00f3n a la serie de art\u00edculos que estamos haciendo sobre las funcionalidades avanzadas que se derivan de la forma en la que se almacenan los datos en Snowflake, presentamos este nuevo art\u00edculo sobre el Zero-copy clone, que permite mediante diferentes operaciones a [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":20825,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7,37,8,9],"tags":[],"class_list":["post-14912","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-es","category-interes","category-practices","category-tech"],"acf":[],"jetpack_featured_media_url":"https:\/\/beta.bluetab.net\/wp-content\/uploads\/2023\/03\/8.png","_links":{"self":[{"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/posts\/14912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/comments?post=14912"}],"version-history":[{"count":0,"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/posts\/14912\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/media\/20825"}],"wp:attachment":[{"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/media?parent=14912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/categories?post=14912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beta.bluetab.net\/en\/wp-json\/wp\/v2\/tags?post=14912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}