Skip to main content

静态文件的 SQL 查询工具和库

项目描述

描述

Squawk 是一个库和命令行工具,用于针对结构化/半结构化静态文件运行 SQL 查询。(例如 Apache 日志、csv 文件、tcpdump 输出)。

执照

BSD

见许可证

目标

Squawk 的目的是使查询日志文件或其他结构化文件中的数据更容易。Squawk 所做的一切都可以通过组合各种 unix 工具来完成,但 Squawk 使表达更复杂的关系变得更加容易。它绝不是一个数据库,也不打算这样使用。它只是一个报告工具。

Squawk 可以从命令行用于临时查询,也可以用作库作为更深入的报告工具的一部分。

地位

仍处于重大发展阶段。API 保证会发生变化。

要求

支持的 SQL 功能

  • 聚合:计数、最小值、最大值、平均值、总和

  • 通过...分组

  • ORDER BY(单列)

  • 限制

  • 抵消

  • 在哪里

  • 列别名

  • FROM 中的子查询

从标准 SQL 出发

  • FROM 中的表列表使用空格而不是逗号作为分隔符。这使得在命令行上指定文件更容易。(例如 FROM access.log* )

解析器

  • 常见的访问文件格式(nginx、apache)

  • CSV

输出格式

  • 控制台的基本表格(如大多数数据库命令行工具)

  • JSON

  • CSV

例子

命令行上的 SQL 查询:

$ squawk "SELECT COUNT(1) AS n, status FROM access.log GROUP BY status ORDER BY n DESC"
n   | status
----------------------------------------
381353      | 200
180668      | 302
17976       | 404
12952       | 301
10836       | 304
735 | 403
420 | 206
376 | 416
123 | 400
46  | 500
5   | 502
3   | 408
3   | 405
1   | 504

通过 API 进行基于 SQL 的查询:

query = Query(
    "SELECT COUNT(1) AS n, remote_addr"
    " FROM file"
    " WHERE status = 200"
    "  AND remote_addr != '-'"
    " GROUP BY remote_addr"
    " ORDER BY n DESC"
    " LIMIT 10")
source = AccessLogParser("access.log")
output_console(query(source))

# or

query = Query(
    "SELECT COUNT(1) AS n, remote_addr"
    " FROM file"
    " WHERE status = 200"
    "  AND remote_addr != '-'"
    " GROUP BY remote_addr"
    " ORDER BY n DESC"
    " LIMIT 10")
source = AccessLogParser("access.log")
for row in query(source):
    print row

代码生成查询:

source = AccessLogParser("access.log")
filtered = Filter(source, lambda row:row['status'] == 200)
group_by = GroupBy(filtered, group_by=["remote_addr"], columns=[
    lambda:Column('remote_addr'),
    lambda:CountAggregate(None, 'count(1)')])
order_by = OrderBy(group_by, 'count(1)', True)
limit = LimitOffset(order_by, 10)
for row in limit:
    print row

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

squawk-0.4.tar.gz (9.2 kB 查看哈希)

已上传 source