2017 © Pedro Peláez
 

library druid-php

image

pixelfederation/druid-php

  • Friday, June 16, 2017
  • by pixelfederation
  • Repository
  • 4 Watchers
  • 24 Stars
  • 754 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 15 Forks
  • 2 Open issues
  • 9 Versions
  • 42 % Grown

The README.md

Druid PHP driver

This library provider a Druid PHP Driver., (*1)

License

Instalation

Installation of this library uses composer. For composer documentation, please refer to getcomposer.org., (*2)

Put the following into your composer.json, (*3)

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

Current State

Currently this driver supports GroupBy, TopN and Timeseries aggregation types, and Search query type. Everybody is welcome to create pull requests to implement some of the missing things., (*4)

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., (*5)

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, (*6)

./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, (*7)

TODO

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

The Versions