我正在使用SQLite日志解析器来处理以下形式的一些Apache日志:
X.Y.Z.W - userID1 [01/Jan/2014:06:31:22 -0400] "GET /url1 HTTP/1.1" 200 11366400 "redirecturl1" "user agent1"
X2.Y2.Z2.W2 - userID1 [01/Jan/2014:07:31:22 -0400] "GET /url2 HTTP/1.1" 200 11366400 "redirecturl2" "user agent2"
Etc...
我想与这些日志进行一些比较,因此我创建了一个辅助表(urlcompare)来将它们与以下内容进行比较:
CREATE TABLE urlcompare (id INTEGER PRIMARY KEY, Request TEXT NOT NULL, RequestName TEXT NOT NULL);
INSERT INTO urlcompare VALUES (null, '/url1', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url2', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url3', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url4', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url5', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url6', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url7', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url8', 'TOTAL');
在SQLite脚本上,我加载了我的日志文件:
load logfile
然后我尝试从与urlcompare中的url匹配的日志中选择url,(表“logs”包含以SQLite形式解析日志文件):
SELECT user, MIN(datetime(Date, 'utc')) AS Mintime FROM urlcompare LEFT JOIN logs ON urlcompare.Request=logs.Request GROUP BY user ORDER BY urlcompare.id ASC;
我得到了结果和错误:
Use of uninitialized value $" in join or string at /usr/bin/asql line 593.
注意:如果我用内部联接替换左连接,我会得到相同的结果而没有错误/警告。但是,我有一些区域需要将日志文件与网址中的网址进行比较table(表A)并在日志文件中显示表A中的所有url及其“hits”(即我需要显示0次点击的url)。因此,我需要“表A LEFT JOIN日志”,在这些情况下,如何解决问题而不会出现此错误?
答案 0 :(得分:0)
当我离开表格
时,我想我理解了这个问题FROM tableA LEFT JOIN TableB ON TableA.attributeC = TableB.attributeC
LEFT JOIN关键字返回左表(tableA)中的所有行,右表(tableB)中的匹配行。 当没有匹配时,右侧的结果为NULL。
所以当我尝试从tableB中检索没有匹配的参数时,我得到一个“null”......