微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

访问 InfluxDB 2.0 记录中的多个字段

如何解决访问 InfluxDB 2.0 记录中的多个字段

我是 InfluxDB 2.0 的新手,正在构建一个时间序列数据库,我在其中存储每个点的多个字段(XAUUSD 货币的价格值)。

虽然我能够按预期存储它;当我获取记录时,我似乎无法获取每条记录可访问的所有字段。

这是我如何将一些虚拟数据写入数据库代码片段:

from datetime import datetime
import time
import influxdb_client
from influxdb_client.client.write_api import SYNCHRONOUS
import random

token = "XXX"
org = "Trader"
bucket = "Master"
url="http://localhost:8086"

client = influxdb_client.InfluxDBClient(
    url=url,token=token,org=org
)

write_api = client.write_api(write_options=SYNCHRONOUS)
while True:
    p = influxdb_client.Point("D1").tag("currency","XAUUSD").field("open",random.randint(900,1100)).field("close",1100)).time(datetime.utcNow(),influxdb_client.WritePrecision.NS)
    write_api.write(bucket=bucket,org=org,record=p)
    time.sleep(1)

我正在尝试将数据读回:

query_api = client.query_api()
query = ' from(bucket:"Master")\
|> range(start: -5h)\
|> filter(fn:(r) => r._measurement == "D1")\
|> filter(fn: (r) => r.currency == "XAUUSD")\
|> filter(fn:(r) => r["_field"] == "close" or r["_field"] == "open")'

result = client.query_api().query(org=org,query=query)

for table in result:
  for record in table.records:
    results.append((record.get_field(),record.get_value()))

print(results)

问题是;每行结果如下:

{'result': '_result','table': 1,'_start': datetime.datetime(2021,5,4,8,58,35,12587,tzinfo=tzutc()),'_stop': datetime.datetime(2021,13,'_time': datetime.datetime(2021,12,56,86095,'_value': 961,'_field': 'open','_measurement': 'D1','currency': 'XAUUSD'}

并且它没有显示两个字段;打开和关闭(它们显示为单独的行,其中一个条目的 _field 为“打开”,同一条目的第二个条目为“关闭”。

有没有办法让结果行在一个结果中包含两个字段值而不是 2;每个领域1个?因为如果我添加更多字段,我将不得不找到一种方法来组合 n 行以获得相同的价格变动。

我曾尝试阅读 InfluxDB 文档,但所有示例都只显示一个 _field 值,而不是多个。

网上有一些答案将 pivot 与正则表达式一起使用,但我认为这不适合我的情况,例如 MysqL 中的简单查询是这样的:

SELECT open,close FROM XAUUSD WHERE interval="D1";

关于如何使用 InfluxDB 解决这个“简单”任务的任何想法或帮助,或者我只是使用了错误的工具来完成这项工作?

解决方法

我也有同样的问题。
This link helped me.

将字段透视为列
使用 pivot() 将 mem_used 和 mem_total 字段转换为列。 输出包括 mem_used 和 mem_total 列,每个列都有值 对应_time。

query = ' from(bucket:"Master")\
|> range(start: -5h)\
|> filter(fn:(r) => r._measurement == "D1")\
|> filter(fn: (r) => r.currency == "XAUUSD")\
|> filter(fn:(r) => r["_field"] == "close" or r["_field"] == "open")\
|> pivot(rowKey: ["_time"],columnKey: ["_field"],valueColumn: "_value")'  # <- Add this

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。