# json_columns

## Description

One JSON object mapping each column name to an array of values. Column arrays must have compatible row counts. json_columns_sql_defaults selects SQL defaults for omitted fields.

Input and output. Select it with `FORMAT json_columns`. Names ignore ASCII case; use the snake_case name shown here.

Each object key names a column, and its value is an array containing that column's rows. Corresponding positions across the arrays form one SQL row.

Column lengths must agree. Omitted target columns follow json_columns_sql_defaults and their declarations. Use json_each_row when the source provides objects per row rather than arrays per column.

```text
SELECT expressions FORMAT json_columns;
INSERT INTO table [(columns)] [SETTINGS ...] FORMAT json_columns
<data>
```

## Example usage

```sql
SELECT CAST(7 AS Int64) AS id, 'Ada' AS name FORMAT json_columns;
```

```text
{
    "id": [7],
    "name": ["Ada"]
}
```

## Format settings

Use a statement `SETTINGS` clause; these options are not persisted by `SET`.

| Setting                     | Type     | Default | Meaning                                                                                                   |
| --------------------------- | -------- | ------- | --------------------------------------------------------------------------------------------------------- |
| `ignore_unknown_fields`     | `Bool`   | `0`     | Skip input keys and header names that match no target column instead of failing.                          |
| `json_columns_sql_defaults` | `Bool`   | `1`     | Evaluate SQL DEFAULT expressions for omitted input columns; off supplies only their native type defaults. |
| `snappy_mode`               | `String` | `basic` | Read Snappy client files as basic (Hadoop blocks) or framed (standard streaming format).                  |
