r4j4h / php-druid-query
围绕 Druid 查询的实验性 PHP 包装器
Requires
- php: >=5.3.0
- guzzle/guzzle: ~3.9
Requires (Dev)
- phing/phing: ~2
- phploc/phploc: ~2
- phpmd/phpmd: ~2
- phpunit/phpunit: ~4
This package is not auto-updated.
Last update: 2024-09-28 16:03:13 UTC
README
PHP 包装器,用于执行对 Druid 的 HTTP 请求。通常这将是用于查询,但也可以用于其他目的(如 摄取)。
概览
包装器位于 DruidFamiliar
命名空间中。Druid 本身是以 D&D 角色的精神命名的,而这个角色可以有一个伙伴 - 一个精神上相连的动物伙伴。这个包装器在某种意义上就像是 Druid 的伙伴,因此得名。
我认为仓库名应该反映命名空间以保持清晰,目前它是 php-druid-query
,而命名空间是 DruidFamiliar
。这将是一个相当大的改动,并将留待以后进行。如果您对项目或命名空间的命名有其他建议,请在此之前自由提出。
变更日志
0.2.1
- 添加了
DruidTime
/Interval
类,以便更容易处理各种时间输入到与 Druid 兼容的时间输出。
0.2.0 主要重构
- 查询和响应处理分离。所有接口都重命名和重新设计。
IDruidConnection
现在是IDruidQueryExecutor
。IDruidQuery
分割成IDruidQueryGenerator
、IDruidQueryParameters
和IDruidQueryResponseHandler
。BaseQuery
不再需要,许多类似的类已被弃用或删除。DruidNodeConnection
现在是DruidNodeDruidQueryExecutor
。
0.1.0 初始发布
- 为早期分享而做的快速草图。
典型用法
总的来说,这个包装器的目的是通过封装 Druid 的 HTTP
特性和查询配置中的分析语法来简化查询的执行。
- 创建一个连接,配置为连接到 Druid 端点。
- 为所需的查询创建一个查询生成器对象。
- 创建一个查询参数对象,配置所需的查询参数。
- 创建一个结果处理器来格式化结果(否则使用
DoNothingResponseHandler
) - 将连接、查询、参数和响应处理器组合在一起执行,从结果处理器获取结果。
从接口上看,这看起来像
- 创建一个配置为连接到 Druid 端点的
IDruidQueryExecutor
。 - 创建一个
IDruidQueryGenerator
。 - 创建一个配置了参数的
IDruidQueryParameters
。 - 创建一个
IDruidQueryResponseHandler
。 - 使用
IDruidQueryGenerator
、IDruidQueryParameters
和IDruidQueryResponseHandler
运行IDruidQueryExecutor
的executeQuery
函数,从IDruidQueryResponseHandler
获取结果。
从实现的角度来看,这可以看起来像
- 创建一个配置为连接到 Druid 端点的
DruidNodeDruidQueryExecutor
。 - 创建一个
SegmentMetadataDruidQuery
。 - 创建一个配置了参数的
SegmentMetadataDruidQueryParameters
。 - 创建一个
SegmentMetadataResponseHandler
。 - 使用在前面步骤中创建的类运行
DruidNodeDruidQueryExecutor
的executeQuery
函数,从SegmentMetadataResponseHandler
获取结果。
如何安装
目前还没有标记版本。为了准备好它到来时的版本,已经设置了分支别名。
- 稳定分支:
~1.0@dev
- 尖端:
~1.1@dev
安装时建议使用Composer。如果您已经安装了它,那么在composer.json中的以下说明应该足以让您开始
{ "require": { "r4j4h/php-druid-query": "~1.0@dev" } }
一旦安装,运行composer install
和composer update
应该就可以工作了。
运行这些命令后,需要引入Composer的自动加载器,然后您就可以开始了,或者说就像它的树环一样(糟糕的德鲁伊引用)
require 'vendor/autoload.php';
$yay = new \DruidFamiliar\Query\TimeBoundaryDruidQuery('my-cool-data-source');
- 请参考上面的典型用法部分。
如何测试
一旦composer install
完成,从命令行终端中,在根目录下运行
vendor/bin/phing
或者
vendor/bin/phpunit tests
生成文档
从根目录,在命令行终端中运行:php vendor/bin/phing docs
。
示例
示例位于\examples文件夹。
它们从_examples-config.php
中共享连接信息。根据您的Druid实例的连接信息进行修改。
目前大部分都是通过CLI运行设计的,但如果一个运行PHP的服务器在浏览器中提供服务,它们也可以在浏览器中工作。
输出HTML的那些应该将查询结果打印到HTML中
它如何工作以及如何扩展
请参考此图,了解其底层的概述。
一般来说,要添加对新查询的支持,您只需创建一个新类,该类实现了IDruidQuery
。
您想在哪里创建新类,可以是这个仓库的分支,或者在外部使用这个仓库的接口。这由您决定。 :)
参考
A.1 不依赖于Packagist.org的composer.json示例
{ "repositories": [ { "type": "vcs", "url": "git@github.com:r4j4h/php-druid-query" } ], "require": { "r4j4h/php-druid-query": "~1.0@dev" } }