---json
{
"aliases": [
{ "path": ":howto:sqlite:tabul_create_table_with_dependencies" }
],
"canonical": ":howto:database:table_create_with_dependencies",
"description": "This howto will show you how to copy the data definition of all SQL tables from a star\/snowflake schema.",
"name": "Duplicate a schema ",
"page_id": "9ufbppuf8y3ivtqt863n1"
}
---
====== Tabul - How to copy the data definition of all tables from a star/snowflake schema ======
===== About =====
This [[..:howto|Howto]] will show you how to copy the [[docs:resource:structure|data definition]] of all [[docs:resource:sql_table|SQL tables]] from a star/snowflake schema by using the [[docs:tabul:data:create|Tabul data create command]].
This command does not copy the data. It just [[docs:op:create|creates]] the structure (ie it performs a SQL ''CREATE'' statement). If you want to copy the data, use the [[docs:tabul:data:transfer|tabul data transfer command]] instead.
===== Steps =====
==== Prerequisites ====
You should have ''Tabulify'' installed on your computer. [[howto:getting_started:1_install]]
==== Select the fact table ====
The trick to copy a star/snowflake schema is:
* to give the fact table (ie the table at the center of the star/snowflake schema) to the [[docs:tabul:data:create|Tabul table create command]]
* and to ask to create it with its dependencies.
==== Create the fact table with its dependencies ====
Delete the target destination
tabul data drop --no-strict-selection *@sqlite
The below command will [[docs:op:create|create]]:
* the table ''store_sales'' from the [[docs:system:tpcds|tpcds]] system. This is the fact table of the tpcds store schema.
* with all its dependencies (all the foreign tables)
* into the [[docs:connection:default|Sqlite Howto connection]] with the prefix ''tpc_'' using the [[docs:resource:logical_name|logical name]] of the source
* with the [[docs:tabul:data:create|tabul data create]] command.
tabul data create --with-dependencies store_sales@tpcds 'tpc_${input_logicalName}@sqlite'
# in bash, you need to escape the $ with \ sign or quote the argument so that it's not seen as a bash variable
Results of the create operation
input target
---------------------------- ---------------------------------
date_dim@tpcds tpc_date_dim@sqlite
household_demographics@tpcds tpc_household_demographics@sqlite
item@tpcds tpc_item@sqlite
income_band@tpcds tpc_income_band@sqlite
customer_demographics@tpcds tpc_customer_demographics@sqlite
customer_address@tpcds tpc_customer_address@sqlite
store_sales@tpcds tpc_store_sales@sqlite
customer@tpcds tpc_customer@sqlite
promotion@tpcds tpc_promotion@sqlite
time_dim@tpcds tpc_time_dim@sqlite
store@tpcds tpc_store@sqlite
==== List the created tables ====
With the [[docs:tabul:data:list|tabul data list]] command, we can list the tables created with the ''tpc'' prefix.
tabul data list -a count tpc*@sqlite
path media_type count
-------------------------- ---------- -----
tpc_customer table 0
tpc_customer_address table 0
tpc_customer_demographics table 0
tpc_date_dim table 0
tpc_household_demographics table 0
tpc_income_band table 0
tpc_item table 0
tpc_promotion table 0
tpc_store table 0
tpc_store_sales table 0
tpc_time_dim table 0
==== Next ====
You can fill them with generated data.
[[howto:sql_schema:fill_schema|How to fill a schema with generated data]]