Как импортировать файл CSV со столбцом с YYYYMMDD в столбец DATE в ClickHouse - PullRequest
0 голосов
/ 12 апреля 2020

Я хочу импортировать файл CSV со столбцом с YYYYMMDD в столбец DATE в ClickHouse. Образец CSV content: 20191231. Я понял, что ClickHouse импортирует только DATE столбец в CSV, только если он имеет формат YYYY-MM-DD (только с "-" между годом, месяцем и днем). Я не могу изменить формат в файле CSV, который хранится в http server. Пожалуйста, дайте мне знать простой способ или команду для импорта сотен CSV файлов с YYYYMMDD из http server или где я могу изменить конфигурацию на моем clickhouse сервере, чтобы принимать формат YYYYMMDD вместо YYYY-MM-DD?

Я уже добавил новый столбец, импортировал все файлы и обновил таблицу. Смотрите запрос ниже. Поле 'olddatefield' является STRING, а 'newdatefield' является полем DATE.

ALTER TABLE test ADD COLUMN newdatefield Date AFTER olddatefield;

ALTER TABLE test
UPDATE newdatefield = toDate(concat(substring(olddatefield, 1, 4), '-' , substring(olddatefield, 5, 2), '-' , substring(olddatefield, 7, 2)))
WHERE olddatefield = '20191231';

Это работало очень хорошо, но есть тысячи файлов с различными DATES для импорта и Я не хочу редактировать тысячи 'alter table' запросов.

1 Ответ

2 голосов
/ 13 апреля 2020

Нужно полагаться на parseDateTimeBestEffort функцию:

SELECT toDate(parseDateTimeBestEffort('20191231')) AS date
/*
┌───────date─┐
│ 2019-12-31 │
└────────────┘
*/

И затем, используя input -table функцию, нужно изменить способ загрузки данных, чтобы исправить связанное поле (s):

cat data.csv \
  | clickhouse-client --query="INSERT INTO test SELECT toDate(parseDateTimeBestEffort(date)) AS date, id FROM input('date String, id Int32') FORMAT CSV";

data.csv

20191231, 1
20200101, 2
...