#clickhouse
Вопрос:
Могу ли я с помощью некоторых внутренних функций ch преобразовать этот формат даты и времени 5/11/2021 13:10:25 в ГГГГ-ММ-ДД чч:мм:сс ? Мне очень трудно это выяснить. Я попробовал следующее: replaceRegexpOne(toString(START_TIME), ‘d{2}/d{2}/d{4}’, ‘(2)-(1)-(3)’)
Но получил:
RROR: мусор после даты и времени: «375291300» ОШИБКА: дата и время должны быть в формате ГГГГ-ММ-ДД чч:мм:сс или NNNNNNNNNN (метка времени unix, ровно 10 цифр).
: (в строке 1) , Трассировка стека (при копировании этого сообщения всегда включайте строки ниже):
- DB::Исключение::Исключение(std::__1::базовая строка<символ, std::__1::char_traits, std::__1::распределитель > constamp;, int, bool) @ 0x8b770fa в /usr/bin/clickhouse
- DB::throwAtAssertionFailed(символ const*, DB::ReadBufferamp;) @ 0x8bcd437 в /usr/bin/clickhouse
- ? @ 0x105329db в /usr/bin/clickhouse
- DB::CSVRowInputFormat::readRow(std::__1::vector<COW<DB::IColumn>::mutable_ptr<DB::IColumn><DB::IColumn>, std::__1::распределитель<DB::IColumn><КОРОВА<DB::IColumn>::изменяемый ip-адрес<DB:: IColumn><DB:: IColumn> <DB::IColumn>> <DB::IColumn>>>amp;, DB::Расширение строкиamp;) @ 0x10532b2e в /usr/bin/clickhouse
- DB::IRowInputFormat::генерировать() @ 0x1051ccc8 в /usr/bin/clickhouse
- DB::ISource::tryGenerate() @ 0x104a97d5 в /usr/bin/clickhouse
- БД::источник::работа() @ 0x104a93ba в /usr/бин/clickhouse
- DB::ParallelParsingInputFormat::Внутренний анализатор::getChunk() @ 0x10567dde в /usr/bin/clickhouse
- DB::ParallelParsingInputFormat::Функция синтаксического анализа потоков(std::__1::shared_ptr<DB::ThreadGroupStatus>, длинный без знака) @ 0x1056737e в /usr/bin/clickhouse
- ThreadPoolImpl::рабочий(std::__1::__список_итератор<ThreadFromGlobalPool, пустота*>) @ 0x8bb9ed8 в /usr/bin/clickhouse
- ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl::scheduleImpl(std::__1::функция<void ()>, int, std::__1::необязательно)::’lambda1′()<void ()>>(voidamp;amp;, void ThreadPoolImpl::scheduleImpl(std::__1::функция<void ()>><void ()>, int, std::__1::необязательно)::’лямбда-1′()amp;amp;…)::’лямбда'()::оператор()() @ 0x8bbb89f в /usr/bin/clickhouse
- ThreadPoolImplstd::__1::поток::рабочий(std::__1::__список_итератор<std::__1::поток, пустота*>) @ 0x8bb741f в /usr/bin/clickhouse
- ? @ 0x8bba943 в файле /usr/bin/clickhouse
- start_thread @ 0x9609 в файле /usr/lib/x86_64-linux-gnu/libpthread-2.31.итак
- клонировать @ 0x122293 в /usr/lib/x86_64-linux-gnu/libc-2.31.so (версия 21.6.6.51 (официальная сборка)) (Я не могу показать всю трассировку стека из-за личных данных)
Ответ №1:
SELECT parseDateTimeBestEffort('5/11/2021 13:10:25')
┌─parseDateTimeBestEffort('5/11/2021 13:10:25')─┐
│ 2021-11-05 13:10:25 │
└───────────────────────────────────────────────┘
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-date_time_input_format
Вы можете задать date_time_input_format=best_effort
в сеансе, запросе или профиле пользователя. Это позволит анализировать текстовые форматы CSV/TSV/JSON*,…
Комментарии:
1. Спасибо! Я добавил date_time_input_format=best_efort указал, что это синтаксический анализ(toString(START_TIME)) в запрос на вставку, и вставка прошла успешно!