Skip to content

themaric/druid-php

This branch is 10 commits behind pixelfederation/druid-php:master.

Folders and files

NameName
Last commit message
Last commit date
Jan 10, 2017
Jan 18, 2017
Jan 12, 2017
Feb 3, 2016
May 9, 2016
May 17, 2016
May 17, 2016
Feb 3, 2016
Jan 10, 2017
Jul 13, 2016
May 17, 2016
May 16, 2016

Repository files navigation

Druid PHP driver

This library provider a Druid PHP Driver.

Instalation

Installation of this library uses composer. For composer documentation, please refer to getcomposer.org.

Put the following into your composer.json

{
    "require": {
        "pixelfederation/druid-php": "dev-master"
    }
}

Current State

Currently this driver supports GroupBy, TopN and Timeseries aggregation types. Everybody is welcome to create pull requests to implement some of the missing things.

Also, some unit tests are bound to running on our internal Druid instance, there is plan to change it to docker container with some testing data.

Usage

Average aggregation

<?php

use Druid\Druid;
use Druid\Driver\Guzzle\Driver;
use Druid\Query\AbstractQuery;
use Druid\Query\Component\Granularity\PeriodGranularity;

$druid = new Druid(
    new Driver(),
    [
        'scheme' => 'http',
        'host' => 'localhost',
        'port' => '9999',
        'path' => '/druid/v2',
        'proxy' => 'tcp://127.0.0.1:8080', // default null
        'timeout' => 3.7, // in seconds - default null
    ]
);

$queryBuilder = $druid->createQueryBuilder(AbstractQuery::TYPE_GROUP_BY); // or AbstractQuery::TYPE_TIMESERIES

$queryBuilder->setDataSource('kpi_registrations_v1');
$queryBuilder->addInterval(new \DateTime('2000-01-01'), new \DateTime());

$granularity = new PeriodGranularity('P1D', 'UTC');
$queryBuilder->setGranularity($granularity);

$queryBuilder->addAggregator($queryBuilder->aggregator()->count('count_rows'));
$queryBuilder->addAggregator($queryBuilder->aggregator()->doubleSum('sum_rows', 'event_count_metric'));
$queryBuilder->addAggregator($queryBuilder->aggregator()->hyperUnique('registrations', 'registrations'));

// Only include for GroupBy queries
$queryBuilder->addDimension('project', 'project');

$queryBuilder->addPostAggregator(
    $queryBuilder->postAggregator()->arithmeticPostAggregator(
        'average',
        '/',
        [
            $queryBuilder->postAggregator()->fieldAccessPostAggregator('sum_rows', 'sum_rows'),
            $queryBuilder->postAggregator()->fieldAccessPostAggregator('count_rows', 'count_rows')
        ]
    )
);

$response = $druid->send($queryBuilder->getQuery());

Contribution

If you'd like to contribtue, we strongly recommend to run

./bin/setup-dev

from the project directory. This script will set up a commit hook, which checks the PSR/2 coding standards using PHPCS and also runs PHP linter and PHP Mess Detector PHPMD

TODO

  1. Query types
    • Metadata Queries
      • Time Boundary
      • Segment Metadata
      • Datasource Metadata
  2. Components
    • Data source
      • query
    • Aggregations
      • Cardinality aggregator

About

Druid driver for PHP

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 99.1%
  • Shell 0.9%