我有几个gigabites的arducopter二元飞行日志。每个日志都是一系列消息。
MessageType1: param1, param2, param3
MessageType2: param3, param4, param5, param6
...
日志是自我描述的,因为第一次消息出现在日志中时它会告诉参数的名称是什么。
MessageType1: timestamp, a, b
MessageType1: value 1, value 2, value 3
MessageType2: timestamp, c, d, e
MessageType1: value 4, value 5, value 6
MessageType1: value 7, value 8, value 9
MessageType2: value 10, value 11, value 12, value 13
我编写了一个python脚本,它将日志分开并为sqlite数据库中的每种消息类型创建表,其中消息类型是表名,参数名是列名。
表MessageType1
| Flight Index | Timestamp | a | b |
|--------------|-----------|-------|---------|
| ... | | | |
| "Flight 1" | 111 | 14725 | 10656.0 |
| "Flight 1" | 112 | 57643 | 10674.0 |
| "Flight 1" | 113 | 57157 | 13674.0 |
| ... | | | |
| "Flight 2" | 111 | 56434 | 16543.7 |
| "Flight 2" | 112 | 56434 | 16543.7 |
表MessageType2
| Flight Index | Timestamp | c | d | e |
|--------------|-----------|-------|---------|--------|
| ... | | | | |
| "Flight 1" | 111 | 14725 | 10656.0 | 462642 |
| "Flight 1" | 112 | 57643 | 10674.0 | 426428 |
| "Flight 1" | 113 | 57157 | 13674.0 | 642035 |
| ... | | | | |
| "Flight 2" | 111 | 56434 | 16543.7 | 365454 |
| "Flight 2" | 112 | 56434 | 16543.7 | 754632 |
| ... | | | | |
对于单个日志,这个数据库足够好,但我想添加几个日志。几个相同类型日志的含义消息将放入一个表中。
在这种情况下,我添加了一个专栏" Flight Index"这是我想要的,但是:
我正在考虑将航班索引添加为整数,只是在处理日志时迭代该数字,并且如果数据库存在,则采用表的最后一行并使用其索引+ 1.这是最优还是存在SQL本机方式经营?
我一般做错了,因为我没有SQL经验吗?
编辑:添加了第二个表格,表明消息没有相同数量的参数和示例消息。
答案 0 :(得分:1)
你可以用两张表来实现这个目标
表1
Flights
Flight name, Flight number, date, device, etc. (any other data points make sense)
"Flight 1", 1, 1/1/2018,...
"Flight 2", 2, 1/2/2018,...
表2
Flight_log
Flight_number, timestamp, parameter1, parameter2,
1,111,14725,10656.0
1,112,57643,10674.0
1,113,57157,13674.0
...
2,111,56434,16543.7
2,112,56434,16543.7
在加载Flight_logs表之前,你应该在Flights表中有一个条目,你可以进行"查找"从Flight表中获取Flight_number
答案 1 :(得分:0)
在阅读data normalization之后,我最终获得了以下数据库。
这可以最大限度地减少表格数量。我可以为每个列完成35个表(每个消息一个)和正确的参数,但是如果消息中的参数发生更改,这将使数据库更加脆弱。
编辑:在datamodler修复后替换了图像。