PHP code example of simpod / clickhouse-client

1. Go to this page and download the library: Download simpod/clickhouse-client library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

simpod / clickhouse-client example snippets




use Nyholm\Psr7\Factory\Psr17Factory;
use SimPod\ClickHouseClient\Client\PsrClickHouseClient;
use SimPod\ClickHouseClient\Client\Http\RequestFactory;
use SimPod\ClickHouseClient\Param\ParamValueConverterRegistry;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpClient\Psr18Client;

$psr17Factory = new Psr17Factory;

$clickHouseClient = new PsrClickHouseClient(
    new Psr18Client(
        HttpClient::create([
            'base_uri' => 'http://localhost:8123',
            'headers' => [
                'X-ClickHouse-User' => 'default',
                'X-ClickHouse-Key' => '',
            ],
            'query' => ['database' => 'default'],
        ]),
    ),
    new RequestFactory(
        new ParamValueConverterRegistry(),
        $psr17Factory,
        $psr17Factory,
        $psr17Factory
    ),
);



use Psr\Http\Client\ClientInterface;
use Psr\Log\LoggerInterface;
use SimPod\ClickHouseClient\Client\Http\RequestFactory;
use SimPod\ClickHouseClient\Client\PsrClickHouseClient;
use SimPod\ClickHouseClient\Logger\PsrLogger;

/** @var ClientInterface $psr18Client */
/** @var RequestFactory $requestFactory */
/** @var LoggerInterface $logger */
$clickHouseClient = new PsrClickHouseClient(
    $psr18Client,
    $requestFactory,
    new PsrLogger($logger),
);



use SimPod\ClickHouseClient\Client\ClickHouseClient;
use SimPod\ClickHouseClient\Format\JsonEachRow;
use SimPod\ClickHouseClient\Output;
use SimPod\ClickHouseClient\Settings\ArraySettingsProvider;

/** @var ClickHouseClient $client */
/** @var Output\JsonEachRow $output */
$output = $client->select(
    'SELECT * FROM table',
    new JsonEachRow(),
    new ArraySettingsProvider(['force_primary_key' => 1])
);



use SimPod\ClickHouseClient\Client\ClickHouseClient;
use SimPod\ClickHouseClient\Format\JsonEachRow;
use SimPod\ClickHouseClient\Output;
use SimPod\ClickHouseClient\Settings\ArraySettingsProvider;

/** @var ClickHouseClient $client */
/** @var Output\JsonEachRow $output */
$output = $client->selectWithParams(
    'SELECT * FROM table WHERE name = :name',
    ['name' => 'Alice'],
    new JsonEachRow(),
    new ArraySettingsProvider(['force_primary_key' => 1])
);



use SimPod\ClickHouseClient\Client\ClickHouseClient;

/** @var ClickHouseClient $client */
$client->insert('table', $data, $columnNames);



use Amp\Http\Client\HttpClientBuilder;
use Amp\Http\Client\Psr7\PsrAdapter;
use Nyholm\Psr7\Factory\Psr17Factory;
use SimPod\ClickHouseClient\Client\Http\RequestFactory;
use SimPod\ClickHouseClient\Client\PsrClickHouseAsyncClient;
use SimPod\ClickHouseClient\Format\JsonEachRow;
use SimPod\ClickHouseClient\Param\ParamValueConverterRegistry;

$psr17Factory = new Psr17Factory();

$client = new PsrClickHouseAsyncClient(
    HttpClientBuilder::buildDefault(),
    new RequestFactory(
        new ParamValueConverterRegistry(),
        $psr17Factory,
        $psr17Factory,
        $psr17Factory,
        'http://localhost:8123?database=default',
    ),
    new PsrAdapter($psr17Factory, $psr17Factory),
    [
        'X-ClickHouse-User' => 'default',
        'X-ClickHouse-Key' => '',
    ],
);

$output = $client->select('SELECT 1 AS data', new JsonEachRow())->await();



use SimPod\ClickHouseClient\Sql\SqlFactory;
use SimPod\ClickHouseClient\Sql\ValueFormatter;

$sqlFactory = new SqlFactory(new ValueFormatter());

$sql = $sqlFactory->createWithParameters(
    'SELECT :param',
    ['param' => 'value']
);



use SimPod\ClickHouseClient\Client\PsrClickHouseClient;
use SimPod\ClickHouseClient\Format\JsonEachRow;

$client = new PsrClickHouseClient(...);

$output = $client->selectWithParams(
    'SELECT {p1:String}',
    ['p1' => 'value'],
    new JsonEachRow(),
);



use SimPod\ClickHouseClient\Client\Http\RequestFactory;
use SimPod\ClickHouseClient\Client\PsrClickHouseClient;
use SimPod\ClickHouseClient\Exception\UnsupportedParamValue;
use SimPod\ClickHouseClient\Param\ParamValueConverterRegistry;
use DateTimeInterface;

$paramValueConverterRegistry = new ParamValueConverterRegistry([
    'datetime' => static fn (mixed $v, mixed ...$unused) => $v instanceof DateTimeInterface
        ? $v->format('c')
        : throw UnsupportedParamValue::type($v),
]);

$client = new PsrClickHouseClient(..., new RequestFactory($paramValueConverterRegistry, ...));



use SimPod\ClickHouseClient\Sql\Expression;

Expression::new("UUIDStringToNum('6d38d288-5b13-4714-b6e4-faa59ffd49d8')");



use SimPod\ClickHouseClient\Sql\ExpressionFactory;
use SimPod\ClickHouseClient\Sql\ValueFormatter;

$expressionFactory = new ExpressionFactory(new ValueFormatter());

$expression = $expressionFactory->templateAndValues(
    'UUIDStringToNum(%s)',
    '6d38d288-5b13-4714-b6e4-faa59ffd49d8'
);



use SimPod\ClickHouseClient\Snippet\CurrentDatabase;

$currentDatabaseName = CurrentDatabase::run($client);