Импорт JSON в ClickHouse

Вопрос:Я создаю таблицу с этим выражением: CREATE TABLE event( date Date, src UInt8, channel UInt8, deviceTypeId UInt8, projectId UInt64, shows UInt32, clicks UInt32, spent Float64 ) ENGINE = MergeTree(date, (date, src, channel, projectId), 8192); Необработанные данные выглядят следующим образом: { "date":"2016-03-07T10:00:00+0300","src":2,"channel":18,"deviceTypeId ":101, "projectId":2363610,"shows":1232,"clicks":7,"spent":34.72,"location":"Unknown", ...} ... Файлы с данными, загруженными следующей командой: cat *.data|sed 's/T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]+0300//'| clickhouse-client

Вопрос:

Я создаю таблицу с этим выражением:

CREATE TABLE event( date Date, src UInt8, channel UInt8, deviceTypeId UInt8, projectId UInt64, shows UInt32, clicks UInt32, spent Float64 ) ENGINE = MergeTree(date, (date, src, channel, projectId), 8192);

Необработанные данные выглядят следующим образом:

{ «date»:»2016-03-07T10:00:00+0300″,»src»:2,»channel»:18,»deviceTypeId «:101, «projectId»:2363610,»shows»:1232,»clicks»:7,»spent»:34.72,»location»:»Unknown», …} …

Файлы с данными, загруженными следующей командой:

cat *.data|sed ‘s/T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]+0300//’| clickhouse-client —query=»INSERT INTO event FORMAT JSONEachRow»

исключение clickhouse-client throw:

Code: 117. DB::Exception: Unknown field found while parsing JSONEachRow format: location: (at row 1)

Можно ли пропускать поля из объекта JSON, которые не представлены в описании таблицы?

Лучший ответ:

Последняя версия ClickHouse (v1.1.54023) поддерживает пользовательский параметр input_format_skip_unknown_fields, который позволяет пропускать неизвестные поля для форматов JSONEachRow и TSKV.

Try

clickhouse-client -n —query=»SET input_format_skip_unknown_fields=1; INSERT INTO event FORMAT JSONEachRow;»

Подробнее в документации.

Ответ №1

В настоящее время невозможно пропустить неизвестные поля.

Вы можете создать временную таблицу с дополнительным полем, данными INSERT и затем сделать INSERT SELECT в финальной таблице. Временная таблица может иметь механизм регистрации и INSERT, чтобы эта “промежуточная” таблица работала быстрее, чем в итоговой таблице MergeTree.

Относительно легко добавить возможность пропустить неизвестные поля в коде (что-то вроде установки ‘format_skip_unknown_fields’).

Оцените статью
Добавить комментарий