0

YQL SHOW TABLES有 CSV 和 HTML。Apache 访问日志的表呢?

4

3 回答 3

1

现在有一个正则表达式表

http://developer.yahoo.com/yql/console/?q=select%20*%20from%20regex%20where%20expression%20%3D%20%22(.*)%22%20and%20text%3D% 22test%22&env=http%3A%2F%2Fdatatables.org%2Falltables.env

如果您的日志格式有正则表达式,则可以使用该表来解析它。

于 2009-09-01T05:04:20.833 回答
0

Apache 日志实际上具有可自定义的格式,因此我假设您的意思是通用日志格式或默认值之一。如果我们添加这样的内容,它可能会使用基于正则表达式的行阅读器,然后您可以将其应用于 apache 日志。谢谢你的建议。

于 2009-06-29T16:31:34.993 回答
0

这是一个常见的日志解析表的开始。原样的代码会在空白处盲目拆分,这并不准确,但这是一个开始。您可能希望传入日志文件的 url,在换行符上拆分条目,然后解析每一行。

<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
    <meta>
        <author></author>
        <sampleQuery>select * from {table}</sampleQuery>
    </meta>
    <bindings>
        <select itemPath="" produces="XML">
            <inputs>
                <key id="url" type="xs:string" paramType="variable"/>
            </inputs>
            <execute><![CDATA[

                    //http://en.wikipedia.org/wiki/Common_Log_Format
            var entry = '208.240.243.170 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326';

            var names = ['IP', 'RFC 1413', 'userid', 'date', 'request', 'status', 'size'];
            var values = entry.split(' ');

            var resp = {};

            for (var i in names) {
                var name = names[i];
                resp[name] = values[i];
            }

            response.object = resp;

      ]]></execute>
        </select>
    </bindings>
</table>

你可以像这样运行它:使用“http://{your domain}/table.xml”作为表;从表中选择 *

然后,您可以通过 ip 扩展它查找地理数据:使用“http://{your domain}/table.xml”作为表;select * from pidgets.geoip where ip in(从表中选择 IP)

于 2010-07-11T03:10:46.483 回答