Борьба с анализом даты и времени

#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) , Трассировка стека (при копировании этого сообщения всегда включайте строки ниже):

  1. DB::Исключение::Исключение(std::__1::базовая строка<символ, std::__1::char_traits, std::__1::распределитель > constamp;, int, bool) @ 0x8b770fa в /usr/bin/clickhouse
  2. DB::throwAtAssertionFailed(символ const*, DB::ReadBufferamp;) @ 0x8bcd437 в /usr/bin/clickhouse
  3. ? @ 0x105329db в /usr/bin/clickhouse
  4. 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
  5. DB::IRowInputFormat::генерировать() @ 0x1051ccc8 в /usr/bin/clickhouse
  6. DB::ISource::tryGenerate() @ 0x104a97d5 в /usr/bin/clickhouse
  7. БД::источник::работа() @ 0x104a93ba в /usr/бин/clickhouse
  8. DB::ParallelParsingInputFormat::Внутренний анализатор::getChunk() @ 0x10567dde в /usr/bin/clickhouse
  9. DB::ParallelParsingInputFormat::Функция синтаксического анализа потоков(std::__1::shared_ptr<DB::ThreadGroupStatus>, длинный без знака) @ 0x1056737e в /usr/bin/clickhouse
  10. ThreadPoolImpl::рабочий(std::__1::__список_итератор<ThreadFromGlobalPool, пустота*>) @ 0x8bb9ed8 в /usr/bin/clickhouse
  11. 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
  12. ThreadPoolImplstd::__1::поток::рабочий(std::__1::__список_итератор<std::__1::поток, пустота*>) @ 0x8bb741f в /usr/bin/clickhouse
  13. ? @ 0x8bba943 в файле /usr/bin/clickhouse
  14. start_thread @ 0x9609 в файле /usr/lib/x86_64-linux-gnu/libpthread-2.31.итак
  15. клонировать @ 0x122293 в /usr/lib/x86_64-linux-gnu/libc-2.31.so (версия 21.6.6.51 (официальная сборка)) (Я не могу показать всю трассировку стека из-за личных данных)

Ответ №1:

https://clickhouse.tech/docs/en/sql-reference/functions/type-conversion-functions/#parsedatetimebesteffort

https://clickhouse.tech/docs/en/sql-reference/functions/type-conversion-functions/#parsedatetimebesteffortUS

 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)) в запрос на вставку, и вставка прошла успешно!