# DDL script file

### :map: Overview

A SQL workflow is a sequence of tasks that feed tables in parallel or sequentially. The DDL file gives instructions to create a destination table.

### ⎨⎬ Creation task

Once the SQL queries are ready, you need to use one or several DDL files to create the destination BigQuery tables that will contain the output data.

### :video\_camera: DDL script video

```
{
	"bq_table_description": "Iowa Liquor aggregation by store for 2019's sales",
	"bq_table_clustering_fields": ["store_number"],
	"bq_table_timepartitioning_field": "isoweek_monday",
	"bq_table_schema": [{
			"name": "isoweek_monday",
			"type": "DATE",
			"description": "Unique number assigned to the store who ordered the liquor."
		},
		{
			"name": "isoweek_number",
			"type": "INTEGER",
			"description": "Name of store who ordered the liquor."
		},
		{
			"name": "store_number",
			"type": "STRING",
			"description": "Unique number assigned to the store who ordered the liquor."
		},
		{
			"name": "store_name",
			"type": "STRING",
			"description": "Name of store who ordered the liquor."
		},
		{
			"name": "sale_dollars",
			"type": "FLOAT",
			"description": "sum of the 2019's sales for the store"
		},
		{
			"name": "volume_sold_liters",
			"type": "FLOAT",
			"description": "sum of the volume sold in 2019 for the store in liters"
		},
		{
			"name": "p_vodka",
			"type": "FLOAT",
			"description": "ratio of the sale for the vodka category"
		},
		{
			"name": "p_whisky",
			"type": "FLOAT",
			"description": "ratio of the sale for the whisky category"
		},
		{
			"name": "p_rum",
			"type": "FLOAT",
			"description": "ratio of the sale for the rum category"
		},
		{
			"name": "p_liqueur",
			"type": "FLOAT",
			"description": "ratio of the sale for the liqueur category"
		},
		{
			"name": "p_tequila",
			"type": "FLOAT",
			"description": "ratio of the sale for the tequila category"
		},
		{
			"name": "p_schnapps",
			"type": "FLOAT",
			"description": "ratio of the sale for the schnapps category"
		},
		{
			"name": "p_gin",
			"type": "FLOAT",
			"description": "ratio of the sale for the gin category"
		},
		{
			"name": "p_cocktail",
			"type": "FLOAT",
			"description": "ratio of the sale for the cocktail category"
		},
		{
			"name": "p_brandy",
			"type": "FLOAT",
			"description": "ratio of the sale for the brandy category"
		},
		{
			"name": "p_spirit",
			"type": "FLOAT",
			"description": "ratio of the sale for the spirit category"
		},
		{
			"name": "p_special",
			"type": "FLOAT",
			"description": "ratio of the sale for the special category"
		}
	]
}
```

### **Parameters**

| Parameter                                                                                                          | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>bq\_table\_description</strong></p><p>type: string</p><p>mandatory</p>                                  | Description of the BigQuery table.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| <p><strong>bq\_table\_schema</strong></p><p>type: array</p><p>mandatory</p>                                        | <p>BigQuery table schema. It contains a list of fields corresponding to the number of columns it will contain.</p><p>Each field described has three attributes:</p><ul><li><strong>name</strong></li><li><a href="#data-types"><strong>type</strong></a></li><li><strong>description</strong></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| <p><strong>bq\_table\_clustering\_fields</strong></p><p>type: array</p><p>optional</p>                             | <p>List of fields used when clustering is enabled.</p><p>The table data will be automatically organized based on the contents of the fields you specify. Their order determines the sort order of the data.</p><p>If this parameter is set, time partitioning will be automatically enabled on the table. If you don't set partitioning parameters, default values will be used.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| <p><strong>bq\_table\_timepartitioning\_field</strong></p><p>type: string</p><p>optional</p>                       | <p>If this parameter is set, the table will be partitioned by this field.</p><p>If not, the table will be partitioned by pseudo column <strong>\_PARTITIONTIME</strong>.</p><p>The field must be a top-level <strong>TIMESTAMP</strong> or <strong>DATE</strong> field. Its mode must be <strong>NULLABLE</strong> or <strong>REQUIRED</strong>.</p><p>(Refer to <a href="https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.table.TimePartitioning.html#google.cloud.bigquery.table.TimePartitioning">BigQuery documentation</a> for more information.)</p><p>Note: You can set this parameter to a field that equals to <strong>DATE('')</strong>. Then, if you relaunch an execution with a partition, and if <strong>default\_write\_disposition</strong> is set to "WRITE\_APPEND" in the JSON configuration file, Tailer will check if the corresponding partition already exists in the table:</p><ul><li>If it does, it will delete it, and replace it with the current execution data.</li><li>If not, it will add them.</li></ul> |
| <p><strong>bq\_table\_timepartitioning\_expiration\_ms</strong></p><p>type: integer</p><p>optional</p>             | <p>Number of milliseconds for which to keep the storage for a partition.</p><p>(Refer to <a href="https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.table.TimePartitioning.html#google.cloud.bigquery.table.TimePartitioning">BigQuery documentation</a> for more information.)</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| <p><strong>bq\_table\_timepartitioning\_require\_partition\_filter</strong></p><p>type: boolean</p><p>optional</p> | <p>If set to true, queries over the partitioned table require a partition filter that can be used for partition elimination to be specified.</p><p>(Refer to <a href="https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.table.Table.html#google.cloud.bigquery.table.Table.require_partition_filter">BigQuery documentation</a> for more information.)</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |

### Data types

Tailer Platform supports the following data types.

#### Numeric types

| Name      | Description                                                                                                                                                                                                                                                                                                    |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `int64`   | <p>Integers are numeric values that do not have fractional components.</p><p>They range from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.</p>                                                                                                                                                      |
| `float64` | Floating point values are approximate numeric values with fractional components.                                                                                                                                                                                                                               |
| `numeric` | <p>This data type represents decimal values with 38 decimal digits of precision and 9 decimal digits of scale. (Precision is the number of digits that the number contains. Scale is how many of these digits appear after the decimal point.)</p><p>It is particularly useful for financial calculations.</p> |

#### Boolean type

| Name      | Description                                                                                                                                                      |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `boolean` | This data type supports the `true`, `false`, and `null` values. It can perform some basic conversions, such as `'true'`, `'True'`, `True`, or 1 becoming `true`. |

#### String type

| Name     | Description                                                                                                                                                                                  |
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `string` | <p>Variable-length character data.</p><p>When converting data from string to a different data type, makes sure to use <code>safe\_cast</code> when you're unsure about the data quality.</p> |

#### Bytes type

| Name    | Description                                                                                                        |
| ------- | ------------------------------------------------------------------------------------------------------------------ |
| `bytes` | Variable-length binary data. This data type is rarely used but can be useful for characters with unusual encoding. |

#### Time types

{% hint style="info" %}
Only the `date`, `datetime` and `timestamp` data types (not `time`) allow table partitioning.
{% endhint %}

{% hint style="info" %}
Time zone management being difficult with BigQuery, prefer the UTC format.
{% endhint %}

| Name        | Description                                                                                                                                                          |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `date`      | This data type represents a calendar date. It includes the year, month, and day.                                                                                     |
| `time`      | This data type represents a time, as might be displayed on a watch, independent of a specific date. It includes the hour, minute, second, and subsecond.             |
| `datetime`  | This data type represents a date and time, as they might be displayed on a calendar or clock. It includes the year, month, day, hour, minute, second, and subsecond. |
| `timestamp` | This data type represents an absolute point in time, with microsecond precision.                                                                                     |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tailer.ai/tutorial-create-a-first-data-pipeline/transform-data-with-tables-to-tables/table-to-table-sql-and-ddl-files-1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
