diff --git a/docs/ru/formats/csv.md b/docs/ru/formats/csv.md index 59edd09fbc6..a1d0dee45c9 100644 --- a/docs/ru/formats/csv.md +++ b/docs/ru/formats/csv.md @@ -1,3 +1,5 @@ + + # CSV Формат comma separated values ([RFC](https://tools.ietf.org/html/rfc4180)). diff --git a/docs/ru/formats/csvwithnames.md b/docs/ru/formats/csvwithnames.md index a9f08b826db..1755713ee6e 100644 --- a/docs/ru/formats/csvwithnames.md +++ b/docs/ru/formats/csvwithnames.md @@ -1,3 +1,5 @@ + + # CSVWithNames Выводит также заголовок, аналогично `TabSeparatedWithNames`. diff --git a/docs/ru/formats/index.md b/docs/ru/formats/index.md index e9ae4a583a1..84a3bbbad12 100644 --- a/docs/ru/formats/index.md +++ b/docs/ru/formats/index.md @@ -3,3 +3,29 @@ # Форматы Формат определяет, в каком виде данные отдаются вам (пишутся, форматируются сервером) при SELECT-е и в каком виде принимаются (читаются, парсятся сервером) при INSERT-е. + +Поддерживаемые форматы данных: + +- [TabSeparated](tabseparated.md#tabseparated) +- [TabSeparatedRaw](tabseparatedraw.md#tabseparatedraw) +- [TabSeparatedWithNames](tabseparatedwithnames.md#tabseparatedwithnames) +- [TabSeparatedWithNamesAndTypes](tabseparatedwithnamesandtypes.md#tabseparatedwithnamesandtypes) +- [CSV](csv.md#csv) +- [CSVWithNames](csvwithnames.md#csvwithnames) +- [Values](values.md#values) +- [Vertical](vertical.md#vertical) +- [VerticalRaw](verticalraw.md#verticalraw) +- [JSON](json.md#json) +- [JSONCompact](jsoncompact.md#jsoncompact) +- [JSONEachRow](jsoneachrow.md#jsoneachrow) +- [TSKV](tskv.md#tskv) +- [Pretty](pretty.md#pretty) +- [PrettyCompact](prettycompact.md#prettycompact) +- [PrettyCompactMonoBlock](prettycompactmonoblock.md#prettycompactmonoblock) +- [PrettyNoEscapes](prettynoescapes.md#prettynoescapes) +- [PrettySpace](prettyspace.md#prettyspace) +- [RowBinary](rowbinary.md#rowbinary) +- [Native](native.md#native) +- [Null](null.md#null) +- [XML](xml.md#xml) +- [CapnProto](capnproto.md#capnproto) diff --git a/docs/ru/formats/json.md b/docs/ru/formats/json.md index e3eae2bd63b..5664e54297f 100644 --- a/docs/ru/formats/json.md +++ b/docs/ru/formats/json.md @@ -1,3 +1,5 @@ + + # JSON Выводит данные в формате JSON. Кроме таблицы с данными, также выводятся имена и типы столбцов, и некоторая дополнительная информация - общее количество выведенных строк, а также количество строк, которое могло бы быть выведено, если бы не было LIMIT-а. Пример: diff --git a/docs/ru/formats/jsoncompact.md b/docs/ru/formats/jsoncompact.md index 10bbd530ffa..efadc42d6e7 100644 --- a/docs/ru/formats/jsoncompact.md +++ b/docs/ru/formats/jsoncompact.md @@ -1,3 +1,5 @@ + + # JSONCompact Отличается от JSON только тем, что строчки данных выводятся в массивах, а не в object-ах. diff --git a/docs/ru/formats/jsoneachrow.md b/docs/ru/formats/jsoneachrow.md index 6efd15936ff..8bf1797b2a3 100644 --- a/docs/ru/formats/jsoneachrow.md +++ b/docs/ru/formats/jsoneachrow.md @@ -1,3 +1,5 @@ + + # JSONEachRow Выводит данные в виде отдельных JSON объектов для каждой строки (newline delimited JSON). diff --git a/docs/ru/formats/native.md b/docs/ru/formats/native.md index e7aa5b323c4..0b047301fbd 100644 --- a/docs/ru/formats/native.md +++ b/docs/ru/formats/native.md @@ -1,3 +1,5 @@ + + # Native Самый эффективный формат. Данные пишутся и читаются блоками в бинарном виде. Для каждого блока пишется количество строк, количество столбцов, имена и типы столбцов, а затем кусочки столбцов этого блока, один за другим. То есть, этот формат является "столбцовым" - не преобразует столбцы в строки. Именно этот формат используется в родном интерфейсе - при межсерверном взаимодействии, при использовании клиента командной строки, при работе клиентов, написанных на C++. diff --git a/docs/ru/formats/null.md b/docs/ru/formats/null.md index ac699e493a7..eba69cf73f6 100644 --- a/docs/ru/formats/null.md +++ b/docs/ru/formats/null.md @@ -1,3 +1,5 @@ + + # Null Ничего не выводит. При этом, запрос обрабатывается, а при использовании клиента командной строки, данные ещё и передаются на клиент. Используется для тестов, в том числе, тестов производительности. diff --git a/docs/ru/formats/pretty.md b/docs/ru/formats/pretty.md index cac5b7ed1da..0f2434230f2 100644 --- a/docs/ru/formats/pretty.md +++ b/docs/ru/formats/pretty.md @@ -1,3 +1,5 @@ + + # Pretty Выводит данные в виде Unicode-art табличек, также используя ANSI-escape последовательности для установки цветов в терминале. diff --git a/docs/ru/formats/prettycompact.md b/docs/ru/formats/prettycompact.md index 5802dfbc1ef..2e10422d7bc 100644 --- a/docs/ru/formats/prettycompact.md +++ b/docs/ru/formats/prettycompact.md @@ -1,3 +1,5 @@ + + # PrettyCompact Отличается от `Pretty` тем, что не рисуется сетка между строками - результат более компактный. diff --git a/docs/ru/formats/prettycompactmonoblock.md b/docs/ru/formats/prettycompactmonoblock.md index 3ac6b4fcd76..8e5ea89aed8 100644 --- a/docs/ru/formats/prettycompactmonoblock.md +++ b/docs/ru/formats/prettycompactmonoblock.md @@ -1,3 +1,5 @@ + + # PrettyCompactMonoBlock -Отличается от `PrettyCompact` тем, что строки (до 10 000 штук) буферизуются и затем выводятся в виде одной таблицы, а не по блокам. +Отличается от [PrettyCompact](prettycompact.md#prettycompact) тем, что строки (до 10 000 штук) буферизуются и затем выводятся в виде одной таблицы, а не по блокам. diff --git a/docs/ru/formats/prettynoescapes.md b/docs/ru/formats/prettynoescapes.md index b33eebe2907..e4320358438 100644 --- a/docs/ru/formats/prettynoescapes.md +++ b/docs/ru/formats/prettynoescapes.md @@ -1,3 +1,5 @@ + + # PrettyNoEscapes Отличается от Pretty тем, что не используются ANSI-escape последовательности. Это нужно для отображения этого формата в браузере, а также при использовании утилиты командной строки watch. diff --git a/docs/ru/formats/prettyspace.md b/docs/ru/formats/prettyspace.md index 10ba36f6182..60c7bfbdd7e 100644 --- a/docs/ru/formats/prettyspace.md +++ b/docs/ru/formats/prettyspace.md @@ -1,3 +1,5 @@ + + # PrettySpace -Отличается от `PrettyCompact` тем, что вместо сетки используется пустое пространство (пробелы). +Отличается от [PrettyCompact](prettycompact.md#prettycompact) тем, что вместо сетки используется пустое пространство (пробелы). diff --git a/docs/ru/formats/rowbinary.md b/docs/ru/formats/rowbinary.md index 24b3c5c5005..d0d33c696c7 100644 --- a/docs/ru/formats/rowbinary.md +++ b/docs/ru/formats/rowbinary.md @@ -1,3 +1,5 @@ + + # RowBinary Форматирует и парсит данные по строкам, в бинарном виде. Строки и значения уложены подряд, без разделителей. diff --git a/docs/ru/formats/tabseparated.md b/docs/ru/formats/tabseparated.md index 4a2c7ea9abf..a38c418d10d 100644 --- a/docs/ru/formats/tabseparated.md +++ b/docs/ru/formats/tabseparated.md @@ -1,3 +1,5 @@ + + # TabSeparated В TabSeparated формате данные пишутся по строкам. Каждая строчка содержит значения, разделённые табами. После каждого значения идёт таб, кроме последнего значения в строке, после которого идёт перевод строки. Везде подразумеваются исключительно unix-переводы строк. Последняя строка также обязана содержать перевод строки на конце. Значения пишутся в текстовом виде, без обрамляющих кавычек, с экранированием служебных символов. diff --git a/docs/ru/formats/tabseparatedraw.md b/docs/ru/formats/tabseparatedraw.md index f05f5b64f01..a785e353b8b 100644 --- a/docs/ru/formats/tabseparatedraw.md +++ b/docs/ru/formats/tabseparatedraw.md @@ -1,3 +1,5 @@ + + # TabSeparatedRaw Отличается от формата `TabSeparated` тем, что строки выводятся без экранирования. diff --git a/docs/ru/formats/tabseparatedwithnames.md b/docs/ru/formats/tabseparatedwithnames.md index d69fef92d46..51413e3b3d8 100644 --- a/docs/ru/formats/tabseparatedwithnames.md +++ b/docs/ru/formats/tabseparatedwithnames.md @@ -1,3 +1,5 @@ + + # TabSeparatedWithNames Отличается от формата `TabSeparated` тем, что в первой строке пишутся имена столбцов. diff --git a/docs/ru/formats/tabseparatedwithnamesandtypes.md b/docs/ru/formats/tabseparatedwithnamesandtypes.md index 8e024e28259..8a5ded88ffc 100644 --- a/docs/ru/formats/tabseparatedwithnamesandtypes.md +++ b/docs/ru/formats/tabseparatedwithnamesandtypes.md @@ -1,3 +1,5 @@ + + # TabSeparatedWithNamesAndTypes Отличается от формата `TabSeparated` тем, что в первой строке пишутся имена столбцов, а во второй - типы столбцов. diff --git a/docs/ru/formats/tskv.md b/docs/ru/formats/tskv.md index 0f61cab26e8..50d95b928bc 100644 --- a/docs/ru/formats/tskv.md +++ b/docs/ru/formats/tskv.md @@ -1,3 +1,5 @@ + + # TSKV Похож на TabSeparated, но выводит значения в формате name=value. Имена экранируются так же, как строки в формате TabSeparated и, дополнительно, экранируется также символ =. diff --git a/docs/ru/formats/values.md b/docs/ru/formats/values.md index 9214b48b65b..a8037898a31 100644 --- a/docs/ru/formats/values.md +++ b/docs/ru/formats/values.md @@ -1,3 +1,5 @@ + + # Values Выводит каждую строку в скобках. Строки разделены запятыми. После последней строки запятой нет. Значения внутри скобок также разделены запятыми. Числа выводятся в десятичном виде без кавычек. Массивы выводятся в квадратных скобках. Строки, даты, даты-с-временем выводятся в кавычках. Правила экранирования и особенности парсинга аналогичны формату TabSeparated. При форматировании, лишние пробелы не ставятся, а при парсинге - допустимы и пропускаются (за исключением пробелов внутри значений типа массив, которые недопустимы). diff --git a/docs/ru/formats/vertical.md b/docs/ru/formats/vertical.md index 0496defb293..98da1a6686e 100644 --- a/docs/ru/formats/vertical.md +++ b/docs/ru/formats/vertical.md @@ -1,3 +1,5 @@ + + # Vertical Выводит каждое значение на отдельной строке, с указанием имени столбца. Формат удобно использовать для вывода одной-нескольких строк, если каждая строка состоит из большого количества столбцов. diff --git a/docs/ru/formats/verticalraw.md b/docs/ru/formats/verticalraw.md index fb497430fcd..62a62e9cc9d 100644 --- a/docs/ru/formats/verticalraw.md +++ b/docs/ru/formats/verticalraw.md @@ -1,3 +1,5 @@ + + # VerticalRaw Отличается от формата `Vertical` тем, что строки выводятся без экранирования. diff --git a/docs/ru/formats/xml.md b/docs/ru/formats/xml.md index 66535cf7d02..d13524bf417 100644 --- a/docs/ru/formats/xml.md +++ b/docs/ru/formats/xml.md @@ -1,3 +1,5 @@ + + # XML Формат XML подходит только для вывода данных, не для парсинга. Пример: diff --git a/docs/ru/query_language/queries.md b/docs/ru/query_language/queries.md index 8abe5d61b35..58bc73bc44a 100644 --- a/docs/ru/query_language/queries.md +++ b/docs/ru/query_language/queries.md @@ -157,13 +157,17 @@ SELECT a, b, c FROM (SELECT ...) Отсутствует отдельный запрос для удаления представлений. Чтобы удалить представление, следует использовать `DROP TABLE`. + + ## ATTACH -Запрос полностью аналогичен запросу `CREATE`, но +Запрос полностью аналогичен запросу `CREATE`, но: + - вместо слова `CREATE` используется слово `ATTACH`; - запрос не создаёт данные на диске, а предполагает, что данные уже лежат в соответствующих местах, и всего лишь добавляет информацию о таблице в сервер. -После выполнения запроса ATTACH, сервер будет знать о существовании таблицы. -Если таблица перед этим была отсоединена (``DETACH``), т.е. её структура известна, то можно использовать сокращенную форму записи без определения структуры. +После выполнения `ATTACH`, сервер будет знать о существовании таблицы. + +Если таблица перед этим была отсоединена (`DETACH`), т.е. её структура известна, то можно использовать сокращенную форму записи без определения структуры. ```sql ATTACH TABLE [IF NOT EXISTS] [db.]name diff --git a/docs/ru/table_engines/file.md b/docs/ru/table_engines/file.md index e9c221c56a5..8ea50eff6fd 100644 --- a/docs/ru/table_engines/file.md +++ b/docs/ru/table_engines/file.md @@ -1,3 +1,78 @@ -# File(InputFormat) + -Источником данных является файл, хранящий данные в одном из поддерживаемых форматов входных данных (TabSeparated, Native, и т. д.) ... +# File(Format) + +Управляет данными в одном файле на диске в указанном формате. + +Примеры применения: + +- Выгрузка данных из ClickHouse в файл. +- Преобразование данных из одного формата в другой. +- Обновление данных в ClickHouse редактированием файла на диске. + +## Использование движка в сервере ClickHouse + +``` +File(Format) +``` + +`Format` необходимо выбирать из тех, которые ClickHouse может и читать и писать. Полный список поддерживаемых форматов смотрите в разделе [Форматы](../formats/index.md#formats). + +Сервер ClickHouse не позволяет указать путь к файлу, с которым будет работать `File`. Используется путь к хранилищу, определенный параметром [path](../operations/server_settings/settings.md#server_settings-path) в конфигурации сервера. + +При создании таблицы с помощью `File(Format)` сервер ClickHouse создает в хранилище каталог с именем таблицы, а после добавления в таблицу данных помещает туда файл `data.Format`. + +Можно вручную создать в хранилище каталог таблицы, поместить туда файл, затем на сервере ClickHouse добавить ([ATTACH](../query_language/queries.md#queries-attach)) информацию о таблице, соответствующей имени каталога и прочитать из файла данные. + +
+Будьте аккуратны с этой функциональностью, поскольку сервер ClickHouse не отслеживает внешние изменения данных. Если в файл будет производиться запись одновременно со стороны сервера ClickHouse и с внешней стороны, то результат непредсказуем. +
+ +**Пример:** + +**1.** Создадим на сервере таблицу `file_engine_table`: + +```sql +CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated) +``` + +В конфигурации по умолчанию сервер ClickHouse создаст каталог `/var/lib/clickhouse/data/default/file_engine_table`. + +**2.** Вручную создадим файл `/var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated` с содержимым: + +```bash +$cat data.TabSeparated +one 1 +two 2 +``` + +**3.** Запросим данные: + +```sql +SELECT * FROM file_engine_table +``` + +```text +┌─name─┬─value─┐ +│ one │ 1 │ +│ two │ 2 │ +└──────┴───────┘ +``` + +## Использование движка в clickhouse-local + +В [clickhouse-local](../utils/clickhouse-local.md#utils-clickhouse-local) движок в качестве параметра принимает не только формат, но и путь к файлу. В том числе можно указать стандартные потоки ввода/вывода цифровым или буквенным обозначением `0` или `stdin`, `1` или `stdout`. + +**Пример:** + +```bash +$ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table" +``` + +## Особенности использования + +- Поддерживается многопоточное чтение и однопоточная запись. +- Не поддерживается: + - использование операций `ALTER` и `SELECT...SAMPLE`; + - индексы; + - репликация.