smi2/phpclickhouse
PHP client for ClickHouse with an easy, fluent API. Supports queries and inserts, result sets, bindings, and connection configuration for fast analytics workflows. Suitable for Laravel and standalone PHP apps needing reliable ClickHouse access.
$state1 = $db->selectAsync('SELECT 1 as ping');
$state2 = $db->selectAsync('SELECT 2 as ping');
// Execute all queued queries
$db->executeAsync();
// Access results
print_r($state1->rows());
print_r($state2->fetchOne('ping'));
$file_data_names = [
'/tmp/clickHouseDB_test.1.data',
'/tmp/clickHouseDB_test.2.data',
'/tmp/clickHouseDB_test.3.data',
'/tmp/clickHouseDB_test.4.data',
'/tmp/clickHouseDB_test.5.data',
];
$stat = $db->insertBatchFiles(
'summing_url_views',
$file_data_names,
['event_time', 'site_key', 'site_id', 'views', 'v_00', 'v_55']
);
The queue must be empty before calling insertBatchFiles. If you mix async selects with batch inserts without executing first, you'll get an exception:
$select = $db->selectAsync('SELECT * FROM summing_url_views LIMIT 1');
$insert = $db->insertBatchFiles('summing_url_views', ['/tmp/clickHouseDB_test.1.data'], ['event_time']);
// Exception: 'Queue must be empty, before insertBatch, need executeAsync'
Always call $db->executeAsync() before starting batch inserts.
Compress CSV files on the fly with zlib.deflate:
$db->settings()->max_execution_time(200);
$db->enableHttpCompression(true);
$result_insert = $db->insertBatchFiles('summing_url_views', $file_data_names, [...]);
foreach ($result_insert as $fileName => $state) {
echo $fileName . ' => ' . json_encode($state->info_upload()) . PHP_EOL;
}
See speed test in example/exam08_http_gzip_batch_insert.php.
How can I help you explore Laravel packages today?