kafkiansky / phpclick
ClickHouse 异步 PHP 客户端。
0.1.0
2024-06-30 15:09 UTC
Requires
- php: ^8.1
- amphp/http-client: ^5.1
- kafkiansky/binary: ^0.3.0
Requires (Dev)
- ergebnis/composer-normalize: ^2.43
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.2
- squizlabs/php_codesniffer: ^2.2
This package is auto-updated.
Last update: 2024-08-30 16:12:58 UTC
README
此包可以作为 Composer 依赖项安装。
composer require kafkiansky/phpclick
此包需要 PHP 8.2 或更高版本。
用法
从内存
此客户端设计用于在 ClickHouse 中大批量插入。使用 RowBinary
模式进行插入。这意味着您必须知道表列的类型及其顺序。
例如,让我们看看以下表 DDL
CREATE TABLE IF NOT EXISTS logs ( `LogName` String CODEC(ZSTD(1)), `LogTime` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `LogAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `LogUserId` Nullable(Int64) ) ENGINE = MergeTree() ORDER BY (LogName, toUnixTimestamp(LogTime)) ;
您可以直接使用 Row
从内存中插入
<?php declare(strict_types=1); require_once __DIR__.'/vendor/autoload.php'; use Kafkiansky\PHPClick; $client = new PHPClick\Client('http://127.0.0.1:8124/'); $client->insert( PHPClick\Query::string('INSERT INTO test.logs (LogName, LogTime, LogAttributes, LogUserId)'), PHPClick\Batch::fromRows( PHPClick\Row::columns( PHPClick\Column::string('users'), PHPClick\Column::dateTime64(new \DateTimeImmutable()), PHPClick\Column::map( [PHPClick\Column::string('x'), PHPClick\Column::string('y')], ), PHPClick\Column::nullable( PHPClick\Column::int64(13), ), ), PHPClick\Row::columns( PHPClick\Column::string('users'), PHPClick\Column::dateTime64(new \DateTimeImmutable()), PHPClick\Column::map( [PHPClick\Column::string('x'), PHPClick\Column::string('y')], ), PHPClick\Column::nullable(), ), ), );
从资源
或者将数据累积到文件中,然后从文件中粘贴数据
<?php declare(strict_types=1); require_once __DIR__.'/vendor/autoload.php'; use Kafkiansky\PHPClick; PHPClick\rowsToFile( __DIR__.'/click.log', // or resource PHPClick\Row::columns( PHPClick\Column::string('users'), PHPClick\Column::dateTime64(new \DateTimeImmutable()), PHPClick\Column::map( [PHPClick\Column::string('x'), PHPClick\Column::string('y')], ), PHPClick\Column::nullable( PHPClick\Column::int64(13), ), ), PHPClick\Row::columns( PHPClick\Column::string('users'), PHPClick\Column::dateTime64(new \DateTimeImmutable()), PHPClick\Column::map( [PHPClick\Column::string('x'), PHPClick\Column::string('y')], ), PHPClick\Column::nullable(), ), ); $client = new PHPClick\Client('http://127.0.0.1:8124/'); $logHandle = fopen(__DIR__.'/click.log', 'r'); try { $client->insert( PHPClick\Query::string('INSERT INTO test.logs (LogName, LogTime, LogAttributes, LogUserId)'), PHPClick\Batch::fromStream($logHandle), ); } finally { if (\is_resource($logHandle)) { \fclose($logHandle); } }
查询构建器
您可以使用简单的查询构建器(仅插入)而不是查询字符串
<?php declare(strict_types=1); require_once __DIR__.'/vendor/autoload.php'; use Kafkiansky\PHPClick; $client = new PHPClick\Client('http://127.0.0.1:8124/'); $client->insert( PHPClick\Query::builder('test.logs')->columns( 'LogName', 'LogTime', 'LogAttributes', 'LogUserId', ), PHPClick\Batch::fromRows(/* rows here */), );
类型
以下列出了所有可用的 ClickHouse 类型
测试
$ composer test
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。