1

我有一个 100GB 的数据文件,其中包含几个星期的传感器读数。时间戳没有严格的时间顺序,我想将数据批量加载到 QuestDB 中。该顺序不是完全随机的,但是在某些行迟到 3 分钟的情况下,最多存在迟到 3 分钟的偏差。有没有一种有效的方法可以像这样进行批量加载并确保数据同时按时间顺序排列?

4

1 回答 1

1

最有效的方法是分三步进行

  1. 导入无序数据集,您可以通过 curl 执行此操作:

    curl -F data=@unordered-data.csv 'http://localhost:9000/imp'
    
  2. 使用导入数据的架构创建一个表并应用分区策略。如果时间戳的自动检测失败,则该 timestamp列可能会被强制转换:timestamp

    CREATE TABLE ordered AS (
    SELECT
      cast(timestamp AS timestamp) timestamp,
      col1,
      col2
    FROM 'unordered-data.csv' WHERE 1 != 1
    ) timestamp(timestamp) PARTITION BY DAY;
    
  3. 将无序记录插入分区表并提供 alagbatch大小:

    INSERT batch 100000 lag 180000000 INTO ordered
    SELECT
      cast(timestamp AS timestamp) timestamp,
      col1,
      col2
    FROM 'unordered-data.csv';
    

要确认表格是有序的,isOrdered()可以使用该函数:

select isOrdered(timestamp) from ordered
是有序的
真的

有关以这种方式加载数据的更多信息,请参阅CSV 导入文档

  • lag在您的情况下可能约为 3 分钟,这是记录的预期迟到
  • batch是一次批处理的记录数
于 2021-05-28T15:48:13.550 回答