> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по формату Arrow

# Arrow

| Вход | Выход | Псевдоним |
| ---- | ----- | --------- |
| ✔    | ✔     |           |

<div id="description">
  ## Описание
</div>

[Apache Arrow](https://arrow.apache.org/) включает два встроенных формата столбцового хранения.
ClickHouse поддерживает чтение и запись в этих форматах.
`Arrow` — это формат Apache Arrow в «файловом режиме», предназначенный для произвольного доступа к данным в памяти.

<div id="data-types-matching">
  ## Соответствие типов данных
</div>

В таблице ниже показаны поддерживаемые типы данных и их соответствие [типам данных](/docs/ru/reference/data-types/index) ClickHouse в запросах `INSERT` и `SELECT`.

| Тип данных Arrow (`INSERT`)             | Тип данных ClickHouse                                                                                        | Тип данных Arrow (`SELECT`) |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------ | --------------------------- |
| `BOOL`                                  | [Bool](/docs/ru/reference/data-types/boolean)                                                                     | `BOOL`                      |
| `UINT8`, `BOOL`                         | [UInt8](/docs/ru/reference/data-types/int-uint)                                                                   | `UINT8`                     |
| `INT8`                                  | [Int8](/docs/ru/reference/data-types/int-uint)/[Enum8](/docs/ru/reference/data-types/enum)                             | `INT8`                      |
| `UINT16`                                | [UInt16](/docs/ru/reference/data-types/int-uint)                                                                  | `UINT16`                    |
| `INT16`                                 | [Int16](/docs/ru/reference/data-types/int-uint)/[Enum16](/docs/ru/reference/data-types/enum)                           | `INT16`                     |
| `UINT32`                                | [UInt32](/docs/ru/reference/data-types/int-uint)                                                                  | `UINT32`                    |
| `INT32`                                 | [Int32](/docs/ru/reference/data-types/int-uint)                                                                   | `INT32`                     |
| `UINT64`                                | [UInt64](/docs/ru/reference/data-types/int-uint)                                                                  | `UINT64`                    |
| `INT64`                                 | [Int64](/docs/ru/reference/data-types/int-uint)                                                                   | `INT64`                     |
| `FLOAT`, `HALF_FLOAT`                   | [Float32](/docs/ru/reference/data-types/float)                                                                    | `FLOAT32`                   |
| `DOUBLE`                                | [Float64](/docs/ru/reference/data-types/float)                                                                    | `FLOAT64`                   |
| `DATE32`                                | [Date32](/docs/ru/reference/data-types/date32)                                                                    | `UINT16`                    |
| `DATE64`                                | [DateTime](/docs/ru/reference/data-types/datetime)                                                                | `UINT32`                    |
| `TIMESTAMP`                             | [DateTime64](/docs/ru/reference/data-types/datetime64)                                                            | `TIMESTAMP`                 |
| `TIME32`, `TIME64`                      | [Time64](/docs/ru/reference/data-types/time64)                                                                    | `TIME32`, `TIME64`          |
| `STRING`, `BINARY`                      | [String](/docs/ru/reference/data-types/string)                                                                    | `BINARY`                    |
| `STRING`, `BINARY`, `FIXED_SIZE_BINARY` | [FixedString](/docs/ru/reference/data-types/fixedstring)                                                          | `FIXED_SIZE_BINARY`         |
| `DECIMAL`                               | [Decimal](/docs/ru/reference/data-types/decimal)                                                                  | `DECIMAL`                   |
| `DECIMAL256`                            | [Decimal256](/docs/ru/reference/data-types/decimal)                                                               | `DECIMAL256`                |
| `LIST`                                  | [Array](/docs/ru/reference/data-types/array)                                                                      | `LIST`                      |
| `STRUCT`                                | [Tuple](/docs/ru/reference/data-types/tuple)                                                                      | `STRUCT`                    |
| `MAP`                                   | [Map](/docs/ru/reference/data-types/map)                                                                          | `MAP`                       |
| `UINT32`                                | [IPv4](/docs/ru/reference/data-types/ipv4)                                                                        | `UINT32`                    |
| `FIXED_SIZE_BINARY`, `BINARY`           | [IPv6](/docs/ru/reference/data-types/ipv6)                                                                        | `FIXED_SIZE_BINARY`         |
| `FIXED_SIZE_BINARY`, `BINARY`           | [Int128/UInt128/Int256/UInt256](/docs/ru/reference/data-types/int-uint)                                           | `FIXED_SIZE_BINARY`         |
| `DURATION`                              | [Interval](/docs/ru/reference/data-types/special-data-types/interval) (Nanosecond/Microsecond/Millisecond/Second) | `DURATION`                  |
| `INT64`                                 | [Interval](/docs/ru/reference/data-types/special-data-types/interval) (Minute/Hour/Day/Week/Month/Quarter/Year)   | `INT64`                     |

Массивы могут быть вложенными и могут иметь тип `Nullable` в качестве аргумента. Типы `Tuple` и `Map` также могут быть вложенными.

Тип `DICTIONARY` поддерживается в запросах `INSERT`, а для запросов `SELECT` есть настройка [`output_format_arrow_low_cardinality_as_dictionary`](/docs/ru/reference/settings/formats#output_format_arrow_low_cardinality_as_dictionary), которая позволяет выводить тип [LowCardinality](/docs/ru/reference/data-types/lowcardinality) как тип `DICTIONARY`. Обратите внимание, что в словаре `LowCardinality` могут быть неиспользуемые значения, из-за чего при выводе в Arrow `DICTIONARY` тоже могут появляться неиспользуемые значения.

Неподдерживаемые типы данных Arrow:

* `JSON`
* `ENUM`.

Типы данных столбцов таблицы ClickHouse не обязаны совпадать с типами данных соответствующих полей Arrow. При вставке данных ClickHouse интерпретирует типы данных в соответствии с таблицей выше, а затем [приводит](/docs/ru/reference/functions/regular-functions/type-conversion-functions#CAST) данные к типу данных, заданному для столбца таблицы ClickHouse.

<div id="example-usage">
  ## Пример использования
</div>

В примере ниже используется набор данных `forex`, доступный в
[Песочнице ClickHouse](https://sql.clickhouse.com).

<div id="selecting-data">
  ### Выборка данных
</div>

Мы выбираем курсы `EUR/USD` за один день из Песочницы ClickHouse и сохраняем их
в локальный файл `forex_eurusd.arrow`. Мы отправляем запрос к песочнице через HTTP-
интерфейс, где хост — `sql-clickhouse.clickhouse.com`, а пользователь —
`demo` (без пароля):

```bash theme={null}
curl "https://sql-clickhouse.clickhouse.com:8443/?user=demo&database=forex" \
    --data-binary "
        SELECT
            concat(base, '.', quote) AS base_quote,
            datetime AS last_update,
            CAST(bid, 'Float32') AS bid,
            CAST(ask, 'Float32') AS ask,
            ask - bid AS spread
        FROM forex
        WHERE base = 'EUR' AND quote = 'USD'
            AND datetime >= '2020-01-01' AND datetime < '2020-01-02'
        ORDER BY datetime ASC
        FORMAT Arrow
        SETTINGS output_format_arrow_compression_method='zstd'" > forex_eurusd.arrow
```

<div id="reading-data">
  ### Чтение файла
</div>

Теперь мы можем прочитать локальный файл Arrow с помощью
[`clickhouse-local`](/docs/ru/concepts/features/tools-and-utilities/clickhouse-local), используя
табличную функцию [`file`](/docs/ru/reference/functions/table-functions/file). Файл
самоописывающийся, поэтому формат `Arrow` автоматически определяет схему:

```bash theme={null}
clickhouse-local --query "
    SELECT *
    FROM file('forex_eurusd.arrow', Arrow)
    ORDER BY last_update ASC
    LIMIT 5
    FORMAT PrettyCompact"
```

```response title="Response" theme={null}
   ┌─base_quote─┬─────────────last_update─┬─────bid─┬─────ask─┬────────────────spread─┐
1. │ EUR.USD    │ 2020-01-01 17:00:00.065 │  1.1212 │ 1.12172 │ 0.0005199909210205078 │
2. │ EUR.USD    │ 2020-01-01 17:00:10.447 │  1.1212 │ 1.12192 │ 0.0007200241088867188 │
3. │ EUR.USD    │ 2020-01-01 17:00:10.498 │ 1.12117 │ 1.12161 │ 0.0004400014877319336 │
4. │ EUR.USD    │ 2020-01-01 17:00:12.579 │  1.1212 │ 1.12161 │ 0.0004100799560546875 │
5. │ EUR.USD    │ 2020-01-01 17:00:12.630 │  1.1212 │ 1.12172 │ 0.0005199909210205078 │
   └────────────┴─────────────────────────┴─────────┴─────────┴───────────────────────┘
```

<div id="inserting-data">
  ### Вставка данных
</div>

Чтобы загрузить файл Arrow в таблицу ClickHouse, передайте его в `clickhouse-client`,
указав `FORMAT Arrow`:

```bash theme={null}
cat forex_eurusd.arrow | clickhouse-client --query="INSERT INTO some_table FORMAT Arrow"
```

<div id="format-settings">
  ## Настройки формата
</div>

| Настройка                                                                    | Описание                                                                                                                                                                                                                                                                          | По умолчанию |
| ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| `input_format_arrow_allow_missing_columns`                                   | Разрешить отсутствие столбцов при чтении входных форматов Arrow                                                                                                                                                                                                                   | `1`          |
| `input_format_arrow_case_insensitive_column_matching`                        | Игнорировать регистр при сопоставлении столбцов Arrow со столбцами ClickHouse                                                                                                                                                                                                     | `0`          |
| `input_format_arrow_import_nested`                                           | Устаревшая настройка, ничего не делает.                                                                                                                                                                                                                                           | `0`          |
| `input_format_arrow_skip_columns_with_unsupported_types_in_schema_inference` | Пропускать столбцы с неподдерживаемыми типами при определении схемы для формата Arrow                                                                                                                                                                                             | `0`          |
| `input_format_arrow_use_native_reader`                                       | Использовать встроенное средство чтения ClickHouse для форматов `Arrow` и `ArrowStream` вместо библиотеки Apache Arrow. Установите `0`, чтобы использовать средство чтения из библиотеки Apache Arrow.                                                                            | `1`          |
| `output_format_arrow_compression_method`                                     | Метод сжатия для выходного формата Arrow. Поддерживаемые кодеки: lz4\_frame, zstd, none (без сжатия)                                                                                                                                                                              | `lz4_frame`  |
| `output_format_arrow_fixed_string_as_fixed_byte_array`                       | Использовать тип Arrow FIXED\_SIZE\_BINARY вместо Binary для столбцов FixedString                                                                                                                                                                                                 | `1`          |
| `output_format_arrow_low_cardinality_as_dictionary`                          | Включить вывод типа LowCardinality как типа Arrow Dictionary                                                                                                                                                                                                                      | `0`          |
| `output_format_arrow_string_as_string`                                       | Использовать тип Arrow String вместо Binary для столбцов String                                                                                                                                                                                                                   | `1`          |
| `output_format_arrow_unsupported_types_as_binary`                            | Выводить типы, у которых нет эквивалента в Arrow (например, `BFloat16`, `AggregateFunction`), как необработанные бинарные данные. Если `false`, такой тип вызывает исключение. Применяется как к встроенному средству записи, так и к средству записи из библиотеки Apache Arrow. | `1`          |
| `output_format_arrow_use_64_bit_indexes_for_dictionary`                      | Всегда использовать 64-битные целые числа для индексов словаря в формате Arrow                                                                                                                                                                                                    | `0`          |
| `output_format_arrow_use_native_writer`                                      | Использовать встроенное средство записи ClickHouse для форматов `Arrow` и `ArrowStream` вместо библиотеки Apache Arrow. Установите `0`, чтобы использовать средство записи из библиотеки Apache Arrow.                                                                            | `1`          |
| `output_format_arrow_use_signed_indexes_for_dictionary`                      | Использовать знаковые целые числа для индексов словаря в формате Arrow                                                                                                                                                                                                            | `1`          |
