我有一个 Java 程序,它通过 NoSQL API 将行写入我的 GridDB 表。我正确地捕获了错误,并在日志中看到数据通过多路输入存储到我的容器中,但是当我进入 CLI 查看数据内容时,容器完全是空的?
首先,容器的外观如下:
gs[public]> showcontainer LOG_agent_intrusion_exploit
Database : public
Name : LOG_agent_intrusion_exploit
Type : COLLECTION
Partition ID: 22
DataAffinity: -
Partitioned : true
Partition Type : INTERVAL
Partition Column : timestamp
Partition Interval Value : 30
Partition Interval Unit : DAY
Expiration Type : PARTITION
Expiration Time : 30
Expiration Time Unit : DAY
Columns:
No Name Type CSTR RowKey
------------------------------------------------------------------------------
0 timestamp TIMESTAMP(3) NN
1 username STRING
2 incomingIP STRING
3 serverIP STRING
4 mtu INTEGER
5 statusCode INTEGER
6 cacheHit STRING
7 method STRING
8 url STRING
9 urlPrefix STRING
10 urlSuffix STRING
11 httpVersion STRING
12 service STRING
13 riskLevel STRING
14 headerContentType STRING
15 bytesReceived INTEGER
16 bytesSent INTEGER
17 headerAgent STRING
18 url2 STRING
19 url2Prefix STRING
20 url2Suffix STRING
21 meta1 STRING
22 meta2 STRING
23 meta3 STRING
24 meta4 STRING
我的日志解析器正在创建一个以容器名称作为键名的哈希图,收集所有行,然后使用 store.multiPut 推送到 GridDB。对于此功能,我正在执行一个简单的 try/catch 块,它通常会捕获 GridDB 错误。
快速片段:
for (RawLog log : logs) {
try {
System.out.println(log.logtype + "~~~~~~");
System.out.println("configs.get(log.logtype)" + configs.get(log.logtype));
Row row = lp.patternMatcher(proc_container, log, configs.get(log.logtype));
if (row != null) {
proc_logs.add(row);
System.out.println("parsing this row: " + row);
} else
System.out.println("Could not parse " + log);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Could not parse " + log);
}
}
containerRowsMap.put(proc_container, proc_logs);
}
try {
db.store.multiPut(containerRowsMap);
} catch (Exception e) {
System.out.println("Error with inserting data");
e.printStackTrace();
}
因此,在这种情况下,似乎数据应该在我的表中,但是当我运行一个简单的查询时select * from LOG_agent_intrusion_exploit;
,我得到零行。
我尝试放弃多输入并一次插入一行,但得到的结果完全相同。