【问题标题】:How to import a CSV file with a column with YYYYMMDD to a DATE column in ClickHouse如何将带有 YYYYMMDD 列的 CSV 文件导入 ClickHouse 中的 DATE 列
【发布时间】:2020-04-12 18:10:51
【问题描述】:

我想将带有YYYYMMDD 列的CSV 文件导入到ClickHouse 中的DATE 列。 CSVcontent: 20191231 的样本。我意识到ClickHouse 仅在CSV 中导入DATE 列,如果它的格式与YYYY-MM-DD 相同(仅在年、月和日之间使用“-”)。我无法更改存储在http server 中的CSV 文件的格式。 请让我知道一种简单的方法或命令,可以从http server 导入数百个带有YYYYMMDDCSV 文件,或者我可以在哪里更改我的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' 查询。

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    需要依赖parseDateTimeBestEffort函数:

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

    然后使用input-table函数需要更改数据上传方式来修复相关字段:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 2018-08-29
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多