tencent cloud

文档反馈

通过客户端使用腾讯云数据仓库 TCHouse-D

最后更新时间:2024-06-27 10:45:22
    除控制台操作外,您也可基于 JDBC 和 WebUI 两种方式,通过客户端使用腾讯云数据仓库 TCHouse-D。购买创建集群后,从 集群列表 页面单击 集群 ID/名称 可以进入集群详情页,网络信息部分提供两个访问地址:JDBC & HTTP,分别对应了两类客户端。其中:
    JDBC 连接地址适合 JDBC 类客户端,如常用的 MySQL 客户端。
    HTTP 连接地址则用于通过 WebUI 调用集群的 REST API 进行各种操作。
    
    
    

    JDBC 类客户端(MySQL Clinet 等)

    腾讯云数据仓库 TCHouse-D 采用 MySQL 协议进行通信,用户可通过 MySQL Client 或者 MySQL JDBC 连接到集群。选择 MySQL Client 版本时建议采用5.1 之后的版本,因为5.1之前不能支持长度超过 16 个字符的用户名。
    注意:
    只要支持 MySQL JDBC 协议的客户端都可使用,不过可能存在集群返回信息没有被此客户端原样展示的情况。该现象一般不会造成问题,但可能由于部分信息未被展示,造成对操作结果的误判。
    例如,执行 Broker Load 后返回信息中的 Warning 在某些客户端中未被展示,可能会让使用者误以为没有 Warning(即没有被过滤的数据)。
    下面展示通过 MySQL Client 连接到腾讯云数据仓库 TCHouse-D 的基本流程。

    步骤1:创建用户

    1. 购买并创建腾讯云数据仓库TCHouse-D 集群时,需设定 admin 用户的密码。
    
    2. 集群创建后,您可在控制台中便捷查看集群信息,开展新建账户等操作。您可以使用 admin 用户连接集群,也可以新建用户并以子用户连接。
    
    3. 集群运行中,您可在网络联通的环境下使用 MySQL Client 连接到集群。集群详情页中,支持一键复制连接地址,若您希望通过子用户连接或重置密码,均可在控制台中 账户管理 页面操作。
    
    4. 输入以下命令,可登录到集群:
    mysql -h FE_HOST -P9030 -uadmin -p
    说明:
    FE_HOST 是任一 FE 节点的 IP 地址。9030是 fe.conf 中的 query_port 配置。
    5. 登录后,也可以通过以下命令修改 admin 密码:
    SET PASSWORD FOR 'admin' = PASSWORD('your_password');
    6. 创建新用户:
    CREATE USER 'test' IDENTIFIED BY 'test_passwd';
    7. 可通过以下命令,使用新创建用户连接集群:
    mysql -h FE_HOST -P9030 -utest -ptest_passwd
    说明:
    新创建的普通用户默认没有任何权限,您可在控制台 账户管理 页面操作授权。

    步骤2:数据表创建

    1. 创建数据库。 初始可以通过 admin 用户创建数据库:CREATE DATABASE example_db;
    说明:
    所有命令都可以使用 'HELP command;' 查看到详细的语法帮助。如:HELP CREATE DATABASE;
    如果不清楚命令的全名,可以使用 "help 命令某一字段" 进行模糊查询。如键入 'HELP CREATE',可以匹配到 CREATE DATABASE, CREATE TABLECREATE USER 等命令。
    数据库创建完成之后,可以通过 SHOW DATABASES; 查看数据库信息。
    MySQL> SHOW DATABASES;
    +--------------------+
    | Database |
    +--------------------+
    | doris_audit_db__ |
    | example_db |
    | information_schema |
    +--------------------+
    3 rows in set (0.00 sec)
    information_schema 是为了兼容 MySQL 协议而存在,实际中信息可能不是很准确,所以关于具体数据库的信息建议通过直接查询相应数据库而获得。
    2. 账户授权。 example_db 创建完成之后,可以通过 admin 账户将 example_db 读写权限授权给普通账户,如 test。授权之后采用 test 账户登录就可以操作 example_db 数据库了。
    GRANT ALL ON example_db TO test;
    3. 建表。
    首先切换数据库:
    USE example_db;
    使用 CREATE TABLE 命令建立一个表。腾讯云数据仓库 TCHouse-D 支持单分区和复合分区两种建表方式,具体参见 数据分区和分桶。下面以聚合模型为例,分别演示两种分区的建表语句。 单分区 建立一个名字为 table1 的逻辑表。分桶列为 siteid,桶数为 10,表的 schema 如下:
    siteid:类型是 INT(4字节),默认值为10。
    citycode:类型是 SMALLINT(2字节)。
    username:类型是 VARCHAR,最大长度为32,默认值为空字符串。
    pv:类型是 BIGINT(8字节),默认值是0;这是一个指标列,数据会默认做聚合操作,聚合方法是求和(SUM)。
    建表语句如下:
    CREATE TABLE table1
    (
    siteid INT DEFAULT '10',
    citycode SMALLINT,
    username VARCHAR(32) DEFAULT '',
    pv BIGINT SUM DEFAULT '0'
    )
    AGGREGATE KEY(siteid,citycode,username)
    DISTRIBUTED BY HASH(siteid) BUCKETS 10
    PROPERTIES("replication_num" = "1");
    复合分区 建立一个名字为 table2 的逻辑表,表的 schema 如下:
    event_day:类型是 DATE,无默认值。
    siteid:类型是 INT(4字节),默认值为10。
    citycode:类型是 SMALLINT(2字节)。
    username:类型是 VARCHAR,最大长度为32,默认值为空字符串。
    pv:类型是 BIGINT(8字节),默认值是0;这是一个指标列,数据会默认做聚合操作,聚合方法是求和(SUM)。
    使用 event_day 列作为分区列,建立3个分区: p201706、p201707、p201708,每个分区使用 siteid 进行哈希分桶,桶数为10。
    p201706:范围为 [最小值,2017-07-01)
    p201707:范围为 [2017-07-01,2017-08-01)
    p201708:范围为 [2017-08-01,2017-09-01)
    建表语句如下:
    CREATE TABLE table2
    (
    event_day DATE,
    siteid INT DEFAULT '10',
    citycode SMALLINT,
    username VARCHAR(32) DEFAULT '',
    pv BIGINT SUM DEFAULT '0'
    )
    AGGREGATE KEY(event_day, siteid, citycode, username)
    PARTITION BY RANGE(event_day)
    (
    PARTITION p201706 VALUES LESS THAN ('2017-07-01'),
    PARTITION p201707 VALUES LESS THAN ('2017-08-01'),
    PARTITION p201708 VALUES LESS THAN ('2017-09-01')
    )
    DISTRIBUTED BY HASH(siteid) BUCKETS 10
    PROPERTIES("replication_num" = "1");
    表建完之后,可以查看 example_db 中表的信息:
    MySQL> SHOW TABLES;
    +----------------------+
    | Tables_in_example_db |
    +----------------------+
    | table1 |
    | table2 |
    +----------------------+
    2 rows in set (0.01 sec)
    
    MySQL> DESC table1;
    +----------+-------------+------+-------+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+-------------+------+-------+---------+-------+
    | siteid | int(11) | Yes | true | 10 | |
    | citycode | smallint(6) | Yes | true | N/A | |
    | username | varchar(32) | Yes | true | | |
    | pv | bigint(20) | Yes | false | 0 | SUM |
    +----------+-------------+------+-------+---------+-------+
    4 rows in set (0.00 sec)
    
    MySQL> DESC table2;
    +-----------+-------------+------+-------+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-----------+-------------+------+-------+---------+-------+
    | event_day | date | Yes | true | N/A | |
    | siteid | int(11) | Yes | true | 10 | |
    | citycode | smallint(6) | Yes | true | N/A | |
    | username | varchar(32) | Yes | true | | |
    | pv | bigint(20) | Yes | false | 0 | SUM |
    +-----------+-------------+------+-------+---------+-------+
    5 rows in set (0.00 sec)
    注意:
    上述表通过设置 replication_num 建的都是单副本的表,腾讯云数据仓库 TCHouse-D 建议用户采用默认的 3 副本设置,以保证高可用。

    步骤3:数据导入

    腾讯云数据仓库 TCHouse-D 支持多种数据导入方式。具体可以参阅数据导入。这里给出流式导入和 Broker 导入的示例。

    流式导入

    流式导入通过 HTTP 协议向 TCHouse-D 传输数据,可以不依赖其他系统或组件直接导入本地数据。详细语法帮助可以参阅 HELP STREAM LOAD;。 示例1:以 "table1_20170707" 为 Label,使用本地文件 table1_data 导入 table1 表。
    curl --location-trusted -u test:test_passwd -H "label:table1_20170707" -H "column_separator:," -T table1_data http://FE_HOST:8030/api/example_db/table1/_stream_load
    注意:
    FE_HOST 是任一 FE 所在节点 IP,8030 为 fe.conf 中的 http_port。
    可以使用任一 BE 的 IP,以及 be.conf 中的 webserver_port 进行导入。如:BE_HOST:8040。
    本地文件 table1_data 以 ,作为数据之间的分隔,具体内容如下:
    1,1,jim,2
    2,1,grace,2
    3,2,tom,2
    4,3,bush,3
    5,3,helen,3
    示例2:以 "table2_20170707" 为 Label,使用本地文件 table2_data 导入 table2 表。
    curl --location-trusted -u test:test -H "label:table2_20170707" -H "column_separator:|" -T table2_data
    http://127.0.0.1:8030/api/example_db/table2/_stream_load
    本地文件 table2_data|作为数据之间的分隔,具体内容如下:
    2017-07-03|1|1|jim|2
    2017-07-05|2|1|grace|2
    2017-07-12|3|2|tom|2
    2017-07-15|4|3|bush|3
    2017-07-12|5|3|helen|3
    注意:
    采用流式导入建议文件大小限制在 10GB 以内,过大的文件会导致失败重试代价变大。
    每一批导入数据都需要取一个 Label,Label 最好是一个和一批数据有关的字符串,方便阅读和管理。腾讯云数据仓库 TCHouse-D 基于 Label 保证在一个 Database 内,同一批数据只可导入成功一次。失败任务的 Label 可以重用.
    流式导入是同步命令。命令返回成功则表示数据已经导入,返回失败表示这批数据没有导入。

    Broker 导入

    Broker 导入通过部署的 Broker 进程,读取外部存储上的数据进行导入。更多帮助请参阅 HELP BROKER LOAD;。 示例:以 "table1_20170708" 为 Label,将 HDFS 上的文件导入 table1 表。
    LOAD LABEL table1_20170708
    (
    DATA INFILE("hdfs://your.namenode.host:port/dir/table1_data")
    INTO TABLE table1
    )
    WITH BROKER hdfs
    (
    "username"="hdfs_user",
    "password"="hdfs_password"
    )
    PROPERTIES
    (
    "timeout"="3600",
    "max_filter_ratio"="0.1"
    );
    Broker 导入是异步命令。以上命令执行成功只表示提交任务成功。导入是否成功需要通过SHOW LOAD;查看。如:
    SHOW LOAD WHERE LABEL = "table1_20170708";
    返回结果中,State 字段为 FINISHED 则表示导入成功。关于 SHOW LOAD 的更多说明,可以参阅 HELP SHOW LOAD;。 异步的导入任务在结束前可以取消:CANCEL LOAD WHERE LABEL = "table1_20170708";

    步骤4:数据查询

    1. 简单查询:
    MySQL> SELECT * FROM table1 LIMIT 3;
    +--------+----------+----------+------+
    | siteid | citycode | username | pv |
    +--------+----------+----------+------+
    | 2 | 1 | 'grace' | 2 |
    | 5 | 3 | 'helen' | 3 |
    | 3 | 2 | 'tom' | 2 |
    +--------+----------+----------+------+
    3 rows in set (0.01 sec)
    
    MySQL> SELECT * FROM table1 ORDER BY citycode;
    +--------+----------+----------+------+
    | siteid | citycode | username | pv |
    +--------+----------+----------+------+
    | 2 | 1 | 'grace' | 2 |
    | 1 | 1 | 'jim' | 2 |
    | 3 | 2 | 'tom' | 2 |
    | 4 | 3 | 'bush' | 3 |
    | 5 | 3 | 'helen' | 3 |
    +--------+----------+----------+------+
    5 rows in set (0.01 sec)
    2. Join 查询:
    MySQL> SELECT SUM(table1.pv) FROM table1 JOIN table2 WHERE table1.siteid = table2.siteid;
    +--------------------+
    | sum(`table1`.`pv`) |
    +--------------------+
    | 12 |
    +--------------------+
    1 row in set (0.20 sec)
    3. 子查询:
    MySQL> SELECT SUM(pv) FROM table2 WHERE siteid IN (SELECT siteid FROM table1 WHERE siteid > 2);
    +-----------+
    | sum(`pv`) |
    +-----------+
    | 8 |
    +-----------+
    1 row in set (0.13 sec)

    Web UI

    Web UI 基于 JDBC 和 Rest API 能力实现,您可通过在其中进行数据操作和集群管控等功能。要使用 Web UI,可在网络打通环境下输入 https:// fe_ip:8030,当看到如下页面时说明启动成功。
    image-20220822091951739
    
    Web UI 分为 Playgroud、System、Log、QueryProfile、Session、Configuration 几大功能页。
    Playgroud 中提供一个 SQL 查询编辑器,用于执行各种 SQL 命令。左侧以树形结构展示所有数据库和其下的表。双击表名可查看表的元数据和数据样例,单击Data Import后可从本地上传数据。
    
    System 页面可查看集群的各种系统信息。
    
    Log 页面提供了 FE 日志的展示与管理功能。
    
    QueryProfile 页面展示了记录到 Profile 的 SQL,可查看 SQL 整体以及其中各个 Instance 的执行计划及运行数据。
    
    
    Session 页面展示了当前活动的所有会话的信息。
    
    Configuration 页面可查看 FE 的所有配置信息,在配置值一列中提供了过滤功能。
    
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持