You need to enable JavaScript to run this app.
ByteHouse 企业版

ByteHouse 企业版

复制全文
使用驱动程序
PHP Driver
复制全文
PHP Driver

本文介绍如何在 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 

获取 ByteHouse 连接信息

使用 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 中创建的数据库级别的用户。

作用范围

集群或引擎级别

数据库级别

登录方式

  • ByteHouse 企业版控制台
  • API、连接驱动、命令行、生态工具连接

API、连接驱动、命令行、生态工具连接

适用场景

适用于需控制台操作、跨产品统一管控等场景。

适用于需要精细管理数据库内数据访问和操作权限的场景。

更多 IAM 用户和数据库用户的介绍请参见:权限模型子用户管理数据库用户管理

基本用法

连接到 ByteHouse 并查询

可参考下面代码样例连接到 ByteHouse,使用前,请使用获取 ByteHouse 连接信息中获取的连接信息填写 $user$password$host 字段中 hostusernamepassword 的参数值。

<?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 的参数值指定了连接超时时间,单位为秒,您可以按需调整该参数值。
最近更新时间:2025.12.22 16:16:49
这个页面对您有帮助吗?
有用
有用
无用
无用