我的问题是我无法使用 Influx Line Protocol (ILP) 将数据写入 Quest DB,因为我已经创建了一个带有模式的表。如果我有一个空表(即没有架构),那么我可以执行架构并且架构是自动创建的。
我的问题是:
- 为什么会这样?
- 我怎样才能让它工作(如果可能的话)?
下面我描述了我的工作(QuestDB server 5.0.6
从 docker 容器开始):
- 创建表
CREATE TABLE my_table(
location SYMBOL,
car_brand SYMBOL,
ts TIMESTAMP,
kmph FLOAT,
age INT
) timestamp(ts) PARTITION BY MONTH;
- 然后在 Python 中我尝试写入表
import time
import socket
HOST = 'localhost'
PORT = 9009
# For UDP, change socket.SOCK_STREAM to socket.SOCK_DGRAM
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((HOST, PORT))
sock.send('my_table,location=london,car_brand=vw kmph=281.14000000,age=2 1420701827750051000\n'.encode())
except socket.error as e:
print("Got error: %s" % (e))
sock.close()
这会产生两个问题:
- 它不会向表中写入任何内容(在此之后表中没有任何行)并且不会引发任何错误
- 如果它无法写入,我预计会出现错误。
然后我想也许它与指定的时间戳/分区有关,所以我创建了一个新表:
CREATE TABLE my_table_v2(
location SYMBOL,
car_brand SYMBOL,
ts TIMESTAMP,
kmph FLOAT,
age INT
);
写入它会产生相同的结果 - 没有写入任何内容。
最后我创建了一个空表(无模式)我尝试过这样(但它不起作用)
CREATE TABLE my_empty_table();
所以我做了一个这样的解决方法;
CREATE TABLE my_empty_table(smth INT);
然后删除列:
ALTER TABLE my_empty_table
DROP COLUMN smth;
然后当我将数据写入空表时 - 一切都按预期工作......</p>
理想情况下,我想定义架构,然后写入表,理想情况下,如果它无法写入,我想以某种方式捕获它。