本文介绍如何在 PHP 开发环境连接并访问 ByteHouse 云数仓。
推荐使用 PHP v7.3及以上 版本。
推荐使用 HTTP 方式,并使用 smi2/phpClickHouse v1.5.0 及以上版本。
本章节介绍通过基于 hyperf 3.1 框架,使用 smi2/phpClickHouse 程序连接 ByteHouse 的基本用法,您可以在程序 Github 主页或者 Packagist 获取最新的文档和发布版本信息。
安装 smi2/phpclickhouse,并安装 hyperf 3.1 框架。
composer require smi2/phpclickhouse // 安装 hyperf 3.1 框架 // https://hyperf.wiki/3.1/#/zh-cn/quick-start/install composer create-project hyperf/hyperf-skeleton
使用 PHP Driver 连接 ByteHouse 前,您需要获取 ByteHouse 连接信息。ByteHouse 企业版当前支持应用通过 IAM 子用户或数据库用户连接至 ByteHouse,常用连接信息获取方式说明如下,更多连接信息说明请参见获取集群连接信息。
参数 | 使用 IAM 子用户连接 | 使用数据库用户连接 |
|---|---|---|
Host | 您可以通过集群管理 > 集群列表 > 集群名称 > 基本信息路径,在网络信息模块,查看到当前集群的私网或公网连接地址(即 Host 地址)。 | |
port | 使用 HTTP 协议,端口号固定为 8123。 | |
username | 在 ByteHouse 企业版控制台上,单击右上角 ByteHouse 企业版个人中心,单击账号管理,查看并复制集群连接账号名。 | 在 ByteHouse 企业版控制台上,通过权限管理 > 用户 > 用户列表路径,在列表中查看并复制数据库用户名称。 |
password | ByteHouse 企业版集群连接密码。在 ByteHouse 企业版控制台上,单击右上角 ByteHouse 企业版个人中心,单击账号管理,查看并复制集群连接密码。 | |
ByteHouse 企业版 IAM 子用户和数据库用户的差别说明如下:
子用户 | 数据库用户 | |
|---|---|---|
定义 | 由火山引擎主用户使用访问控制服务(IAM)创建的用户。 | ByteHouse 中创建的数据库级别的用户。 |
作用范围 | 集群或引擎级别 | 数据库级别 |
登录方式 |
| API、连接驱动、命令行、生态工具连接 |
适用场景 | 适用于需控制台操作、跨产品统一管控等场景。 | 适用于需要精细管理数据库内数据访问和操作权限的场景。 |
更多 IAM 用户和数据库用户的介绍请参见:权限模型、子用户管理、数据库用户管理。
可参考下面代码样例连接到 ByteHouse,使用前,请使用获取 ByteHouse 连接信息中获取的连接信息填写 $user、$password、$host 字段中 host、username、password 的参数值。
<?php declare(strict_types=1); /** * This file is part of Hyperf. * * @link https://www.hyperf.io * @document https://hyperf.wiki * @contact group@hyperf.io * @license https://github.com/hyperf/hyperf/blob/master/LICENSE */ namespace App\Controller; use ClickHouseDB\Client; class IndexController extends AbstractController { public function queryBH() { $user = $this->request->input('user', 'Hyperf'); // 填写用户名 $password = $this->request->input('password', ''); // 填写密码 $host = $this->request->input('host', ''); // 填写 Host $query = $this->request->input('query', 'select * from system.clusters'); // sql语句 $config = [ 'host' => "$host", 'port' => '8123', 'username' => "{$user}", 'password' => "$password", 'https' => false ]; $db = new Client($config); $db->database('default'); $db->setTimeout(10); // 10 seconds $db->setConnectTimeOut(5); // 5 seconds $statement = $db->select($query); $json = json_encode($statement->rows()); //返回查询数组 return [ 'query' => "{$query}", 'result' => "$json" ]; } }
参数说明:
$query 的示例演示了执行 select * from system.clusters 查询,如需查询其他内容,请替换为对应的 SQL 语句。更多示例请查看官方 GitHub 仓库。$db->database 的参数值指定了查询的数据库,如需查询其他数据库,您可以替换为对应的数据库名称。$db->setTimeout 的参数值指定了查询超时时间,单位为秒,您可以按需调整该参数值。$db->setConnectTimeOut 的参数值指定了连接超时时间,单位为秒,您可以按需调整该参数值。