Запрос InfluxDB 2.0 из R

#r #influxdb #httr

#r #притокдб #httr

Вопрос:

Я могу получить данные с помощью этого запроса с помощью Node-RED, но мне нужно получить их с помощью R.

Это все, что я успел узнать.

 post.1 <- httr::POST(url=paste0("http://", influx.ip, ":8086/api/v2/signin"),
                     authenticate(influx.user, influx.passwd))
# Authentication seems to work.

influx.query <- 'from(bucket: "nr_meas")
|> range(start: -12h)'

post.2 <- httr::POST(url=paste0("http://", influx.ip, ":8086/api/v2/query"),
                   query=list(org=influx.org),
                   add_headers("Content-Type: application/json",
                               'Accept: application/csv'),
                   body=list(q=influx.query)
                   )
content(post.2)
# $code
# [1] "invalid"
#
# $message
# [1] "failed to decode request body: invalid character '-' in numeric literal"
 

Сохранить из Node-RED не вариант (на другом компьютере).

Каков правильный способ получения данных из InfluxDB в R?

Комментарии:

1. Я не являюсь пользователем influx, но я ожидаю, что во post.1 втором запросе потребуется использовать ту же аутентификацию, что и во втором запросе. Между двумя вызовами нет общего «сеанса» POST . Попробуйте добавить свой authenticate(..) ко второму вызову или посмотрите docs.influxdata.com/influxdb/v2.0/reference/api для использования токенов аутентификации.

2. Спасибо за совет. Я только что попробовал это, а также add_headers(paste0(«Авторизация: токен», influx.token)), но генерируется та же ошибка.

Ответ №1:

Вы могли бы попробовать InfluxDB 2.0 R client:

 library(influxdbclient)

client <- InfluxDBClient$new(
    url = paste0("http://", influx.ip, ":8086"),
    token = "my-token",
    org = influx.org)
                        
data <- client$query('from(bucket: "nr_meas") |> range(start: -12h) |> drop(columns: ["_start", "_stop"])')