{"id":4928,"date":"2025-09-10T14:28:56","date_gmt":"2025-09-10T21:28:56","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/"},"modified":"2025-09-10T14:28:56","modified_gmt":"2025-09-10T21:28:56","slug":"clone-couchbase-clusters","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/","title":{"rendered":"How to Clone Couchbase Clusters for CI\/CD On-Demand Ephemeral Environments"},"content":{"rendered":"\n<p><span>Continuous Integration and Continuous Deployment are now common software development practices. In the world of databases, this translates into needing on-demand, stateful, ephemeral environments.\u00a0\u00a0<\/span><\/p>\n\n\n\n<p><span>Provisioning a stateless environment is not tied to any particular source of data. All that is needed is to run the code you want to test in your CI environment. This is the basis of most CI\/CD tools and won\u2019t be covered in this article.\u00a0<\/span><\/p>\n\n\n\n<p><span>The slightly harder part comes from the dependencies the application needs to be tested properly, which is often referred to as external services. Couchbase being one of them. There are different ways to get those, through Docker containers for instance, or hosted in your test infrastructure, or some external as a Service solution. It does not really matter as long as they are available while running your test. Good practices would be to use Environment Variables to refer to those instances.\u00a0<\/span><\/p>\n\n\n\n<p><span>Assuming these services are running, like a Couchbase Free Tier instance or a Docker container, the next step is to make sure that they are configured correctly, and seeded with the data needed for the test.<\/span><\/p>\n\n\n\n<p><span>A while ago, I posted about using <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/automate-couchbase-tests-github-actions\/\" target=\"_blank\" rel=\"noopener\"><span>Couchbase Shell in GitHub actions<\/span><\/a><span>. This will tell you the basics about using Couchbase Shell with GitHub Actions, but this can be applied to most CI\/CD solutions as well. Today, I want to go further and show you some useful scripts to clone a cluster or elements of a cluster for your on demand environments.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span>Using Couchbase Shell to clone environments<\/span><\/h2>\n\n\n\n<p><span>When using Couchbase Shell, the first thing that comes to mind when wanting to do something is, is there a function for that? As of now we don\u2019t have a function to clone something. Most of the available functions reflect our APIs capabilities and we have no cloning APIs today. But, we have the ability to write scripts, which means we can make our own!<\/span><\/p>\n\n\n\n<p><span>The first thing that comes to mind when managing databases is often to recreate the structure and schemas. As Couchbase is Schemaless, this will only consist of the existing buckets, scopes, collections, and indexes in the source cluster. The first step is to export that structure so it can be reimported later. This function will list every bucket, then inner scopes and collections, and add them to an array. Then it will list all indexes and add them to the output JSON.\u00a0<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]# Exports all buckets, scopes, collections and indexes<br \/>\n# for the given cluster<br \/>\ndef export-cluster-struct [<br \/>\n\u00a0\u00a0\u00a0\u00a0source: string # The cluster to export<br \/>\n] {<br \/>\n\u00a0\u00a0\u00a0\u00a0mut export = []<br \/>\n \u00a0\u00a0\u00a0let buckets = buckets\u00a0 &#8211;clusters $source # List the buckets of the given cluster<br \/>\n\u00a0\u00a0\u00a0\u00a0for bucket in $buckets {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mut scope_structs = []<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let scopes = scopes &#8211;clusters $source &#8211;bucket $bucket.name<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for scope in $scopes {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let collections = (collections &#8211;clusters $source &#8211;bucket $bucket.name &#8211;scope $scope.scope | reject -i cluster)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$scope_structs ++= [{\u00a0<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scope: $scope.scope,\u00a0<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0collections: $collections\u00a0<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# Merge the scopes with the bucket object and add it to the export array<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let buc = ( $bucket | merge {scopes: $scope_structs } )<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$export ++= [ $buc ]<br \/>\n\u00a0\u00a0\u00a0\u00a0}<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0let indexes = query indexes &#8211;definitions &#8211;disable-context &#8211;clusters $source<br \/>\n\u00a0\u00a0\u00a0\u00a0let output = {\u00a0<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0buckets: $export,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0indexes: $indexes<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0return $output<br \/>\n}[\/crayon]<\/p>\n\n\n\n<p><span>This works because under the hood, Couchbase Shell is using Nushell, a new type of shell that is portable (meaning it works the same way on Linux, Windows, or OS X, which is great for CI\/CD scripts having to support different OS), and that considers any structure data as a DataFrame, making the manipulation of JSON extremely easy.<\/span><\/p>\n\n\n\n<p><span>To try it out, run <\/span><i><span>cbsh<\/span><\/i><span>, then source the file containing the function. For me it\u2019s <\/span><i><span>ci_scripts.nu<\/span><\/i><span>. I have a cluster already configured in my cbsh config, called <\/span><i><span>local<\/span><\/i><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]Laurent Doguin at local in travel-sample.inventory._default<br \/>\n&gt; source ci-scripts.nu<br \/>\nLaurent Doguin at local in travel-sample.inventory._default<br \/>\n&gt; export-cluster-struct local | save local-cluster-export.json<br \/>\n[\/crayon]<\/p>\n\n\n\n<p><span>Now if you open <\/span><i><span>local-cluster-export.json<\/span><\/i><span>, you will get the structure of your cluster:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;js&#8221; decode=&#8221;true&#8221;]{<br \/>\n\u00a0\u00a0&#8220;buckets&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;couchbase&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;min_durability_level&#8221;: &#8220;none&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;ram_quota&#8221;: 209715200,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;flush_enabled&#8221;: false,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cloud&#8221;: false,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scopes&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collections&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;airport&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;airline&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;route&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;landmark&#8221;,<br \/>\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;hotel&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;tenant_agent_00&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collections&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;users&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;bookings&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;tenant_agent_01&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collections&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;users&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;bookings&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;tenant_agent_02&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collections&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;users&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;bookings&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;tenant_agent_03&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collections&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;users&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;bookings&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;tenant_agent_04&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collections&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;users&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;bookings&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collections&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;inherited&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_system&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collections&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_query&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_mobile&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;max_expiry&#8221;: &#8220;&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0],<br \/>\n\u00a0\u00a0&#8220;indexes&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_system&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_query&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;#primary&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE PRIMARY INDEX `#primary` ON `travel-sample`.`_system`.`_query`&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_airportname&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_airportname` ON `travel-sample`(`airportname`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_city&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_city` ON `travel-sample`(`city`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_faa&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_faa` ON `travel-sample`(`faa`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_icao&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_icao` ON `travel-sample`(`icao`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;airline&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_airline_primary&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE PRIMARY INDEX `def_inventory_airline_primary` ON `travel-sample`.`inventory`.`airline` WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;airport&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_airport_airportname&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_inventory_airport_airportname` ON `travel-sample`.`inventory`.`airport`(`airportname`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;airport&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_airport_city&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_inventory_airport_city` ON `travel-sample`.`inventory`.`airport`(`city`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;airport&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_airport_faa&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_inventory_airport_faa` ON `travel-sample`.`inventory`.`airport`(`faa`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;airport&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_airport_primary&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE PRIMARY INDEX `def_inventory_airport_primary` ON `travel-sample`.`inventory`.`airport` WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0 \u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;hotel&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_hotel_city&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_inventory_hotel_city` ON `travel-sample`.`inventory`.`hotel`(`city`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;hotel&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_hotel_primary&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE PRIMARY INDEX `def_inventory_hotel_primary` ON `travel-sample`.`inventory`.`hotel` WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;landmark&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_landmark_city&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_inventory_landmark_city` ON `travel-sample`.`inventory`.`landmark`(`city`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;landmark&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_landmark_primary&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE PRIMARY INDEX `def_inventory_landmark_primary` ON `travel-sample`.`inventory`.`landmark` WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;route&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_route_primary&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE PRIMARY INDEX `def_inventory_route_primary` ON `travel-sample`.`inventory`.`route` WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;route&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_route_route_src_dst_day&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_inventory_route_route_src_dst_day` ON `travel-sample`.`inventory`.`route`(`sourceairport`,`destinationairport`,(distinct (array (`v`.`day`) for `v` in `schedule` end))) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;route&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_route_schedule_utc&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_inventory_route_schedule_utc` ON `travel-sample`.`inventory`.`route`(array (`s`.`utc`) for `s` in `schedule` end) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;inventory&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;route&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_inventory_route_sourceairport&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_inventory_route_sourceairport` ON `travel-sample`.`inventory`.`route`(`sourceairport`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_name_type&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_name_type` ON `travel-sample`(`name`) WHERE (`_type` = &#8220;User&#8221;) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_primary&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE PRIMARY INDEX `def_primary` ON `travel-sample` WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_route_src_dst_day&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_route_src_dst_day` ON `travel-sample`(`sourceairport`,`destinationairport`,(distinct (array (`v`.`day`) for `v` in `schedule` end))) WHERE (`type` = &#8220;route&#8221;) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_schedule_utc&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_schedule_utc` ON `travel-sample`(array (`s`.`utc`) for `s` in `schedule` end) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_sourceairport&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_sourceairport` ON `travel-sample`(`sourceairport`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;bucket&#8221;: &#8220;travel-sample&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;scope&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;collection&#8221;: &#8220;_default&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;def_type&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;status&#8221;: &#8220;Ready&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;storage_mode&#8221;: &#8220;memory_optimized&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;replicas&#8221;: 0,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;definition&#8221;: &#8220;CREATE INDEX `def_type` ON `travel-sample`(`type`) WITH {\u00a0 &#8220;defer_build&#8221;:true }&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cluster&#8221;: &#8220;local&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0]<br \/>\n}[\/crayon]<\/p>\n\n\n\n<p><span>I have deleted that bucket for the purpose of this test, to reimport it later: <\/span><i><span>buckets drop travel-sample<\/span><\/i><span>.<\/span><\/p>\n\n\n\n<p><span>The next logical step is to have a function that takes this file as input and recreate the complete structure in another cluster:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]# Import all buckets, scopes and collections structure<br \/>\n# in the given cluster<br \/>\ndef import-cluster-struct [<br \/>\n\u00a0\u00a0\u00a0\u00a0destination: string # The cluster to import<br \/>\n] {<br \/>\n\u00a0\u00a0\u00a0\u00a0let structure = $in # Assigning the piped structure to a variable<br \/>\n\u00a0\u00a0\u00a0\u00a0let buckets = $structure.buckets<br \/>\n\u00a0\u00a0\u00a0\u00a0for bucket in $buckets {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$bucket | _create-bucket-definition $destination<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for scope in ($bucket.scopes | where not ( $it.scope | str starts-with &#8220;_&#8221; ) ) {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print $&#8221;Create scope ($destination)_($bucket.name)_($scope.scope)&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scopes create &#8211;clusters $destination &#8211;bucket $bucket.name $scope.scope<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for col in $scope.collections {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print $&#8221;Create collection ($destination)_($bucket.name)_($scope.scope)_($col.collection)&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0collections create &#8211;clusters $destination &#8211;bucket $bucket.name &#8211;scope\u00a0 $scope.scope $col.collection<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0let indexes = $structure.indexes<br \/>\n\u00a0\u00a0\u00a0\u00a0$indexes | _create-indexes $destination # Nushell allows you to use other functions you created<br \/>\n}<\/p>\n<p>def _create-indexes [<br \/>\n\u00a0\u00a0\u00a0\u00a0destination: string # the cluster where to create indexes<br \/>\n] {<br \/>\n\u00a0\u00a0\u00a0\u00a0let indexes = $in<br \/>\n\u00a0\u00a0\u00a0\u00a0for index in $indexes {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print $&#8221;Recreating index ($index.name) on cluster ($destination) with: &#8220;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print $index.definition<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0query $index.definition &#8211;disable-context &#8211;clusters $destination<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n}[\/crayon]<\/p>\n\n\n\n<p><span>Now to run that function:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]Laurent Doguin at local in travel-sample.inventory._default<br \/>\n&gt; open local-cluster-export.json | import-cluster-struct capella<br \/>\nLaurent Doguin at local in travel-sample.inventory._default<br \/>\n&gt; open local-cluster-export.json | import-cluster-struct local<br \/>\nCreate Bucket local_travel-sample with 200 quota, type couchbase, 0 replicas, none durability, 0 expiry<br \/>\nCreate scope local_travel-sample_inventory<br \/>\nCreate collection local_travel-sample_inventory_airport<br \/>\nCreate collection local_travel-sample_inventory_airline<br \/>\nCreate collection local_travel-sample_inventory_route<br \/>\nCreate collection local_travel-sample_inventory_landmark<br \/>\nCreate collection local_travel-sample_inventory_hotel<br \/>\nCreate scope local_travel-sample_tenant_agent_00<br \/>\nCreate collection local_travel-sample_tenant_agent_00_users<br \/>\nCreate collection local_travel-sample_tenant_agent_00_bookings<br \/>\nCreate scope local_travel-sample_tenant_agent_01<br \/>\nCreate collection local_travel-sample_tenant_agent_01_users<br \/>\nCreate collection local_travel-sample_tenant_agent_01_bookings<br \/>\nCreate scope local_travel-sample_tenant_agent_02<br \/>\nCreate collection local_travel-sample_tenant_agent_02_users<br \/>\nCreate collection local_travel-sample_tenant_agent_02_bookings<br \/>\nCreate scope local_travel-sample_tenant_agent_03<br \/>\nCreate collection local_travel-sample_tenant_agent_03_users<br \/>\nCreate collection local_travel-sample_tenant_agent_03_bookings<br \/>\nCreate scope local_travel-sample_tenant_agent_04<br \/>\nCreate collection local_travel-sample_tenant_agent_04_users<br \/>\nCreate collection local_travel-sample_tenant_agent_04_bookings<br \/>\nRecreating index #primary on cluster local with:\u00a0<br \/>\nCREATE PRIMARY INDEX `#primary` ON `travel-sample`.`_system`.`_query`<br \/>\nRecreating index def_airportname on cluster local with:<br \/>\nCREATE INDEX `def_airportname` ON `travel-sample`(`airportname`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_city on cluster local with:<br \/>\nCREATE INDEX `def_city` ON `travel-sample`(`city`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_faa on cluster local with:<br \/>\nCREATE INDEX `def_faa` ON `travel-sample`(`faa`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_icao on cluster local with:<br \/>\nCREATE INDEX `def_icao` ON `travel-sample`(`icao`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_airline_primary on cluster local with:<br \/>\nCREATE PRIMARY INDEX `def_inventory_airline_primary` ON `travel-sample`.`inventory`.`airline` WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_airport_airportname on cluster local with:<br \/>\nCREATE INDEX `def_inventory_airport_airportname` ON `travel-sample`.`inventory`.`airport`(`airportname`) WITH {\u00a0 &#8220;defer_build&#8221;:true }Recreating index def_inventory_airport_city on cluster local with:<br \/>\nCREATE INDEX `def_inventory_airport_city` ON `travel-sample`.`inventory`.`airport`(`city`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_airport_faa on cluster local with:<br \/>\nCREATE INDEX `def_inventory_airport_faa` ON `travel-sample`.`inventory`.`airport`(`faa`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_airport_primary on cluster local with:\u00a0<br \/>\nCREATE PRIMARY INDEX `def_inventory_airport_primary` ON `travel-sample`.`inventory`.`airport` WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_hotel_city on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_inventory_hotel_city` ON `travel-sample`.`inventory`.`hotel`(`city`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_hotel_primary on cluster local with:\u00a0<br \/>\nCREATE PRIMARY INDEX `def_inventory_hotel_primary` ON `travel-sample`.`inventory`.`hotel` WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_landmark_city on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_inventory_landmark_city` ON `travel-sample`.`inventory`.`landmark`(`city`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_landmark_primary on cluster local with:\u00a0<br \/>\nCREATE PRIMARY INDEX `def_inventory_landmark_primary` ON `travel-sample`.`inventory`.`landmark` WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_route_primary on cluster local with:\u00a0<br \/>\nCREATE PRIMARY INDEX `def_inventory_route_primary` ON `travel-sample`.`inventory`.`route` WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_route_route_src_dst_day on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_inventory_route_route_src_dst_day` ON `travel-sample`.`inventory`.`route`(`sourceairport`,`destinationairport`,(distinct (array (`v`.`day`) for `v` in `schedule` end))) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_route_schedule_utc on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_inventory_route_schedule_utc` ON `travel-sample`.`inventory`.`route`(array (`s`.`utc`) for `s` in `schedule` end) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_inventory_route_sourceairport on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_inventory_route_sourceairport` ON `travel-sample`.`inventory`.`route`(`sourceairport`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_name_type on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_name_type` ON `travel-sample`(`name`) WHERE (`_type` = &#8220;User&#8221;) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_primary on cluster local with:\u00a0<br \/>\nCREATE PRIMARY INDEX `def_primary` ON `travel-sample` WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_route_src_dst_day on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_route_src_dst_day` ON `travel-sample`(`sourceairport`,`destinationairport`,(distinct (array (`v`.`day`) for `v` in `schedule` end))) WHERE (`type` = &#8220;route&#8221;) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_schedule_utc on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_schedule_utc` ON `travel-sample`(array (`s`.`utc`) for `s` in `schedule` end) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_sourceairport on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_sourceairport` ON `travel-sample`(`sourceairport`) WITH {\u00a0 &#8220;defer_build&#8221;:true }<br \/>\nRecreating index def_type on cluster local with:\u00a0<br \/>\nCREATE INDEX `def_type` ON `travel-sample`(`type`) WITH {\u00a0 &#8220;defer_build&#8221;:true }[\/crayon]<\/p>\n\n\n\n<p><span>And there you have it, functions that allow you to export and import the data structure from one cluster to another. While this is a good starting point, there are still questions about how to reimport data, or about granularity. Also, you may not want to export and import a complete cluster.<\/span><\/p>\n\n\n\n<p><span>Filtering buckets to import is fairly easy as Nushell allows you to filter dataframes:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; wrap=&#8221;true&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]Laurent Doguin at local in travel-sample.inventory._default<br \/>\n&gt; open local-cluster-export.json | { buckets: ( $in.buckets | where name == &#8216;travel-sample&#8217;), indexes :( $in.indexes | where bucket == &#8216;travel-sample&#8217;) }[\/crayon]<\/p>\n\n\n\n<p><span>This will recreate a JSON object containing only a bucket named <\/span><i><span>travel-sample<\/span><\/i><span> and indexes for this bucket.<\/span><\/p>\n\n\n\n<p><span>From there you should be all set to manage basic cluster structure. What about the data? There are different ways you can import data with cbsh, as it covers most key\/value operations as well as any INSERT\/UPSERT queries. And then we have the <\/span><a href=\"https:\/\/couchbase.sh\/docs\/#_doc_import\" target=\"_blank\" rel=\"noopener\"><span><em>doc import<\/em>\u00a0command<\/span><\/a><span>. Its usage is fairly straightforward, all you need is a list of rows with an identified id field. This can be anything that can be turned into a dataframe for Nushell (XML, CSV, TSV, Parquet, and more). And of course, it can be a JSON file from a Couchbase SQL++ query. This is an example that will save a query result to a file and import that file back to a collection:\u00a0<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]# Save file content to filename<br \/>\nlet filename = $&#8221;temp_($src_bucket)_($src_scope)_($src_collection).json&#8221;<br \/>\nlet query = &#8220;SELECT meta().id as meta_id, meta().expiration as expiration, c.* FROM `&#8221; + $src_bucket + &#8220;`.&#8221; + $src_scope + &#8220;.&#8221; + $src_collection + &#8221; c&#8221;<br \/>\nquery &#8211;disable-context &#8211;clusters $p.src $query | save -f $filename<\/p>\n<p># Import the file content and print the results<br \/>\nprint $&#8221;Import collection content from ($src)_($src_bucket)_($src_scope)_($src_collection) to ($dest)_($dest_bucket)_($dest_scope)_($dest_collection)&#8221;<br \/>\nprint ( doc import &#8211;bucket $p.dest_bucket &#8211;scope $p.dest_scope &#8211;collection $p.dest_collection &#8211;clusters $p.dest &#8211;id-column meta_id $filename )[\/crayon]<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><span>That\u2019s one particular example but the whole point of using scripting language is to make them your own. You will find a more complete example in <\/span><a href=\"https:\/\/gist.github.com\/ldoguin\/3056802101cb6fafd13a9d45c150a08a\" target=\"_blank\" rel=\"noopener\"><span>this GitHub Gist<\/span><\/a><span>. It has support for environment variables for source and destination and you can decide to either clone all buckets of a cluster, a specific bucket, scope, or collection.<\/span><\/p>\n\n\n\n<p><span>Don\u2019t hesitate to drop us a comment here or on <\/span><a href=\"https:\/\/discord.gg\/jK4SRkHj\" target=\"_blank\" rel=\"noopener\"><span>Discord<\/span><\/a><span>, we are always looking for suggestions to improve the global Couchbase experience.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Continuous Integration and Continuous Deployment are now common software development practices. In the world of databases, this translates into needing on-demand, stateful, ephemeral environments.\u00a0\u00a0 Provisioning a stateless environment is not tied to any particular source of data. All that is needed is to run the code you want to test in your CI environment. This [&hellip;]<\/p>\n","protected":false},"author":49,"featured_media":4927,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[136,54],"tags":[283],"ppma_author":[110],"class_list":["post-4928","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","tag-database-migration"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to Clone Couchbase Clusters for CI\/CD On-Demand Ephemeral Environments - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"We share scripts and a practical approach to clone all buckets of a cluster, a specific bucket, scope, or collection, from one Couchbase cluster to another.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Clone Couchbase Clusters for CI\/CD On-Demand Ephemeral Environments\" \/>\n<meta property=\"og:description\" content=\"We share scripts and a practical approach to clone all buckets of a cluster, a specific bucket, scope, or collection, from one Couchbase cluster to another.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-10T21:28:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-cloning-couchbase-clusters.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Laurent Doguin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"How to Clone Couchbase Clusters for CI\\\/CD On-Demand Ephemeral Environments\",\"datePublished\":\"2025-09-10T21:28:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/\"},\"wordCount\":3068,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-cloning-couchbase-clusters.png\",\"keywords\":[\"database migration\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/\",\"name\":\"How to Clone Couchbase Clusters for CI\\\/CD On-Demand Ephemeral Environments - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-cloning-couchbase-clusters.png\",\"datePublished\":\"2025-09-10T21:28:56+00:00\",\"description\":\"We share scripts and a practical approach to clone all buckets of a cluster, a specific bucket, scope, or collection, from one Couchbase cluster to another.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-cloning-couchbase-clusters.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-cloning-couchbase-clusters.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/clone-couchbase-clusters\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Clone Couchbase Clusters for CI\\\/CD On-Demand Ephemeral Environments\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/author\\\/laurent-doguin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Clone Couchbase Clusters for CI\/CD On-Demand Ephemeral Environments - The Couchbase Blog","description":"We share scripts and a practical approach to clone all buckets of a cluster, a specific bucket, scope, or collection, from one Couchbase cluster to another.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/","og_locale":"en_US","og_type":"article","og_title":"How to Clone Couchbase Clusters for CI\/CD On-Demand Ephemeral Environments","og_description":"We share scripts and a practical approach to clone all buckets of a cluster, a specific bucket, scope, or collection, from one Couchbase cluster to another.","og_url":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/","og_site_name":"The Couchbase Blog","article_published_time":"2025-09-10T21:28:56+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-cloning-couchbase-clusters.png","type":"image\/png"}],"author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"Laurent Doguin","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"How to Clone Couchbase Clusters for CI\/CD On-Demand Ephemeral Environments","datePublished":"2025-09-10T21:28:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/"},"wordCount":3068,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-cloning-couchbase-clusters.png","keywords":["database migration"],"articleSection":["Best Practices and Tutorials","Couchbase Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/","url":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/","name":"How to Clone Couchbase Clusters for CI\/CD On-Demand Ephemeral Environments - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-cloning-couchbase-clusters.png","datePublished":"2025-09-10T21:28:56+00:00","description":"We share scripts and a practical approach to clone all buckets of a cluster, a specific bucket, scope, or collection, from one Couchbase cluster to another.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-cloning-couchbase-clusters.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-cloning-couchbase-clusters.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/clone-couchbase-clusters\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Clone Couchbase Clusters for CI\/CD On-Demand Ephemeral Environments"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"Laurent Doguin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/author\/laurent-doguin\/"}]}},"acf":[],"authors":[{"term_id":110,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=4928"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4928\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/4927"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=4928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=4928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=4928"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=4928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}