2

我已经在 QuestDB 中导入了一个演示数据集,我可以从控制台成功查询它。我正在使用 Grafana 构建仪表板来测试可视化。

我的 QuestDB 安装在端口 9000 上运行,我可以毫无问题地导入它:

curl -F data=@weather.csv http://localhost:9000/imp

我正在运行以下失败的查询:

SELECT timestamp as time,
       avg(visMiles) AS average_visibility
FROM 'weather.csv'
WHERE $__timeFilter(timestamp)
SAMPLE BY $__interval
LIMIT 1000

我得到的错误是

pq: unknown function name: between(TIMESTAMP,STRING,STRING)

我正在使用他们的示例中提供的数据集。

4

1 回答 1

4

QuestDB 依赖于在表创建期间指定的指定时间戳。如果将 curl 请求作为 URL 参数提供给一个名为“timestamp”的列,这不会导致错误:

curl -F data=@weather.csv http://localhost:9000/imp?timestamp=timestamp

另一种选择是在SELECT操作期间,timestamp()函数可以动态指定一个。如果您使用 curl 导入并且未设置指定的时间戳,则有两种选择:

  1. 修改您的查询以timestamp()在您要指定的列上使用:

    SELECT timestamp as time,
           avg(visMiles) AS average_visibility
    FROM (‘weather.csv’ timestamp(timestamp))
    WHERE $__timeFilter(timestamp)
    SAMPLE BY $__interval
    LIMIT 1000
    
  2. 创建一个新表,它是原始数据集的副本,但在创建过程中指定了时间戳。ORDER BY之所以使用,是因为演示数据集具有无序的时间戳条目:

    create table temp_table as (select * from ‘weather.csv’ order by timestamp) timestamp(timestamp);
    

    而不是查询您的原始数据集,而是使用temp_table

    SELECT timestamp as time,
      avg(visMiles) AS average_visibility
    FROM temp_table
    WHERE $__timeFilter(timestamp)
    SAMPLE BY $__interval
    LIMIT 1000
    

如果您需要有关使用指定时间戳的更多信息,QuestDB概念/时间戳文档页面有更多详细信息。

编辑:这个主题还有更多资源,例如Grafana 与 QuestDB 的指南GitHub 存储库与 docker-compose

于 2021-01-07T10:49:35.060 回答