华为云用户手册

  • 角色管理命令简介 此章节主要介绍用角色管理SQL基本语法和使用说明。 创建角色,role_name:指新建角色名称。 CREATE role IF NOT EXISTS 'role_name' ON CLUSTER default_cluster; 给角色赋予权限。 授予全部创建(库、表)权限。 GRANT CREATE ON *.* TO role1 ON CLUSTER default_cluster; 授予test_db库下创建表权限。 GRANT CREATE TABLE ON test_db.* TO role1; 授予全部删除(库、表)权限。 GRANT DROP ON test_db.* TO role1; 删除角色。 DROP ROLE 'role_name' ON CLUSTER default_cluster; 查询用户的权限和角色。 查询用户权限。 show grants for all; 查询角色权限。 show grants for role1; 父主题: ClickHouse角色管理
  • 用户管理命令简介 此章节主要介绍用户管理SQL基本语法和使用说明。 创建用户。 CREATE USER name IF NOT EXISTS ON CLUSTER default_cluster IDENTIFIED WITH sha256_password BY 'password'; 指定IP。 CREATE USER name HOST IP '127.0.0.x' IDENTIFIED WITH sha256_password BY 'password'; 修改用户密码。 ALTER USER name IF EXISTSON CLUSTER default_cluster IDENTIFIED WITH sha256_password BY 'password'; 给用户分配角色。 GRANT role1, role2 TO new_user ON CLUSTER default_cluster; 撤销分配角色。 REVOKE role1 FROM user ON CLUSTER default_cluster; 删除用户。 DROP USER IF EXISTS ‘name1’ ON CLUSTER default_cluster; 父主题: ClickHouse用户管理
  • 查看权限 登录 表格存储服务 管理控制台。 单击管理控制台左上角的,选择区域。 单击左侧集群管理,显示当前集群列表,选择需要操作的集群,进入用户管理页面。 单击操作列“查看权限”,弹出用户权限页面。 表2 查看权限 参数 说明 用户名 新建的用户名。 全局权限 查询、插入、更改、创建、删除。 各级权限 数据库和表:创建的数据库和表。 高危权限:创建表、删除表。 普通权限:查询、插入、更改。 组件支持查看账户对数据库的操作权限。
  • 前提条件 当集群状态处于“服务中”,且没有任何任务操作(如:节点扩容、磁盘扩容等)时,可以执行变更操作。 规格变更只支持从小规格变更为大规格,如果要大规格更改为小规格,建议新建小规格集群,采用数据迁移进行切换。 一次只支持变更一种类型的节点规格(计算节点、ZooKeeper节点),且变更完成后只生效所选类型的节点规格。 规格变更过程中,整个集群不可用,变更结束前不能再次变更。 规格变更过程中系统不可用。
  • Doris冷热分离命令简介 此章节主要介绍CloudTable Doris冷热分离的使用命令。Doris集群基本命令使用请参见Doris MySQL命令简介。 创建数据迁移策略(STORAGE POLICY) CREATE STORAGE POLICY testPolicy PROPERTIES( "storage_resource" = "hot_to_cold", "cooldown_ttl" = "1d" ); 参数说明: storage_resource:指定策略使用的storage resource名称,且值指定为hot_to_cold。 cooldown_ttl:热数据持续时间。从数据分片生成时开始计算,经过指定时间后转为冷数据。支持的格式: 1d:1天、 1h:1小时、 50000:50000秒、0:0秒,表示数据立即转为冷数据。注意:cooldown_ttl的值不得低于6h。 cooldown_datetime:热数据转为冷数据时间,不能与cooldown_ttl同时存在,如:2023-06-08 00:00:00。 创建含数据迁移策略的Doris Table 创建数据库test_db。 CREATE DATABASE IF NOT EXISTS test_db; 创建test_tbl1。 CREATE TABLE IF NOT EXISTS test_db.test_tbl1 ( `timestamp` DATETIME NOT NULL COMMENT "日志时间", `type` INT NOT NULL COMMENT "日志类型", `error_code` INT COMMENT "错误码", `error_msg` VARCHAR(1024) COMMENT "错误详细信息", `op_id` BIGINT COMMENT "负责人id", `op_time` DATETIME COMMENT "处理时间" ) DISTRIBUTED BY HASH(`type`) BUCKETS 10 PROPERTIES ( "storage_policy" = "testPolicy", "replication_num" = "3" ); storage_policy:存储策略是使用冷热分离功能的入口,用户在建表或使用Doris过程中,给表或分区关联上Storage policy,即可以使用冷热分离功能。 已存在的数据表关联迁移策略Storage policy。 创建数据表test_tbl2。 CREATE TABLE IF NOT EXISTS test_db.test_tbl2 ( `timestamp` DATETIME NOT NULL COMMENT "日志时间", `type` INT NOT NULL COMMENT "日志类型", `error_code` INT COMMENT "错误码", `error_msg` VARCHAR(1024) COMMENT "错误详细信息", `op_id` BIGINT COMMENT "负责人id", `op_time` DATETIME COMMENT "处理时间" ) DISTRIBUTED BY HASH(`type`) BUCKETS 10 PROPERTIES ( "replication_num" = "3" ); 数据表关联/修改迁移策略Storage policy。 ALTER TABLE test_db.test_tbl2 set ("storage_policy" = "testPolicy"); 向含数据迁移策略的数据表插入数据。 insert into test_db.test_tbl1 values ('2024-03-26 10:35:00', 1, 404, 'Resource Not Found', 998756, '2024-03-26 10:36:00'); 删除数据迁移策略(STORAGE POLICY)。 DROP STORAGE POLICY testPolicy; 删除数据迁移策略前,请检查关联该策略的所有表是否都已经删除,否则删除数据迁移策略会失败。 删除含数据迁移策略的数据表后,为了保证数据的安全,冷数据在obs桶最多保留时间25小时,且数据保留期间会计费。 父主题: Doris冷热分离
  • 背景 在数据分析的实际场景中,冷热数据面临着不同的查询频次及响应速度要求。而随着历史数据的不断增多,如果我们将所有数据存储在本地,将造成大量的资源浪费。冷热分离特性可将冷热数据分开存储,将冷热数据分别存储在成本不同的存储介质上。热数据提高时效数据的查询速度和响应能力,冷数据降低存储成本。我们还可以根据实际业务需求进行灵活的配置和调整,以满足不同场景的要求。冷热分离一般适用于以下需求场景: 数据存储周期长:面对历史数据的不断增加,存储成本也随之增加。 冷热数据访问频率及性能要求不同:热数据访问频率高且需要快速响应,而冷数据访问频率低且响应速度要求不高。
  • 原理介绍 创建表:CloudTable Doris通过文件系统在本地数据目录创建目录。 写数据:调用文件系统相关功能,生成文件到本地数据目录下。 合并数据:定期读取数据文件rowset,判断数据时间戳和时间线。如果当前时间减去写入时间小于TTL设置的值,则文件不移动。如果当前时间减去写入时间大于TTL设置的值,则会在系统后台执行并调用OBS SDK数据写入OBS,随后将本地文件删除。 查询数据:用户在表上进行对应的查询时,Doris会根据对应Partition使用的Policy信息找到对应的OBS并行文件系统的相关路径,并根据不同Tablet下的Rowset信息下载查询所需的数据到本地进行运算。
  • 使用限制 Thrift Server支持的语言:Python、C++。 Thrift Server功能不支持冷热分离、热点自愈和二级索引。 只有非安全集群支持Thrift Server。 Thrift Server只在Core节点中部署。 Thrift Server服务扩容依赖Core节点扩容。 开启用户认证后,不允许开启Thrift Server。 开启Thrift Server后,用IP连接Thrift Server节点,如果Thrift Server进程故障会影响Thrift Server的业务。 Thrift Serve特性仅支持HBase 2.4.14及以上版本。
  • 手动迁移数据 前提条件:存在分区数据表数据大于50GB。 步骤一:创分布式表和本地表 使用SSH工具访问目标集群。请参见ClickHouse手动安装客户端。 进入命令窗口创建数据库。 CREATE DATABASE IF NOT EXISTS test_fetch on cluster default_cluster; 使用数据库。 USE test_fetch; 创建本地表。 CREATE TABLE IF NOT EXISTS test_fetch.example_table on cluster default_cluster (d DateTime, a Int) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_fetch/example_table', '{replica}') PARTITION BY toYYYYMM(d) ORDER BY d; 创建分布式表。 CREATE TABLE IF NOT EXISTS test_fetch.example_table_dist ON CLUSTER default_cluster (d DateTime, a Int) ENGINE = Distributed('default_cluster', 'test_fetch', 'example_table', rand()); 在分片1分别给分布式表和本地表插入数据。此时各个分片都包含202306 202307 202308的数据,仅分片1包含202309 2023010的数据。 INSERT INTO test_fetch.example_table_dist select '2023-06-20',rand64() from numbers(1000); INSERT INTO test_fetch.example_table_dist select '2023-07-20',rand64() from numbers(1000); INSERT INTO test_fetch.example_table_dist select '2023-08-20',rand64() from numbers(1000); INSERT INTO test_fetch.example_table select '2023-09-20',rand64() from numbers(1000); INSERT INTO test_fetch.example_table select '2023-10-20',rand64() from numbers(1000); 步骤二:fetch partition进行分片间数据迁移(将数据从分片1迁移到分片2) 选择迁移的分片和表数据分区。 SELECT partition AS `分区名称`, formatReadableSize(sum(data_uncompressed_bytes)) AS `未压缩大小`, formatReadableSize(sum(data_compressed_bytes)) AS `压缩后大小`, sum(rows) AS `总行数` FROM system.parts WHERE (active = 1) AND (database = 'test_fetch') AND (table = 'example_table') GROUP BY partition ORDER BY partition DESC; 运行结果展示。 ┌─分区名称─┬─未压缩大小─┬─压缩后大小─┬─总行数─┐ │ 202308 │ 3.81 KiB │ 1.98 KiB │ 488 │ │ 202307 │ 4.12 KiB │ 2.14 KiB │ 527 │ │ 202306 │ 3.88 KiB │ 2.02 KiB │ 496 │ └──────────┴────────────┴────────────┴────────┘ 在目标分片的任意节点使用fetch partition获取分区数据,然后attach分区获取源分片中202309的分区并拉取当前分片。 ALTER TABLE test_fetch.example_table FETCH PARTITION '202309' FROM '/clickhouse/tables/1/test_fetch/example_table/'; '/clickhouse/tables/1/test_fetch/example_table/ 参数中的1代表分片1,可以根据实际调整。 将源分片获取的数据加载到当前分片。 ALTER TABLE test_fetch.example_table ATTACH PARTITION '202309'; 迁移执行时,目标分区节点如果提示detached分区已存在,可以查询detached_parts确认分区是否存在。如果已存在且为冗余数据或脏数据,可以删除。如需保留,可以跳过此分区,迁移其他分区。 SELECT * FROM system.detached_parts WHERE table = 'example_table' AND partition_id = '202309'; ALTER TABLE test_fetch.example_table DROP DETACHED PARTITION '202309' SETTINGS allow_drop_detached = 1; 步骤三:验证结果。 数据行数、数据内容采样检查。 SELECT count() FROM test_fetch.example_table WHERE toYYYYMM(d) = '202309'; SELECT * FROM test_fetch.example_table WHERE toYYYYMM(d) = '202309' order by a limit 10; 结果展示: 去重数据,删除源分片对应分区。 方法一:连接源节点分片删除数据分区。 ALTER TABLE test_fetch.example_table DROP PARTITION '202309'; 方法二:detach数据。 ALTER TABLE test_fetch.example_table DETACH PARTITION '202309'; 如果提示分区数据大于50G无法删除,执行设置以下参数,再次操作删除。 set max_table_size_to_drop=0; set max_partition_size_to_drop=0; 删除源分片分区后,查询源分片中的分布式表、目标分片中本地表。 SELECT count() FROM test_fetch.example_table_dist WHERE toYYYYMM(d) = '202309'; SELECT count() FROM test_fetch.example_table WHERE toYYYYMM(d) = '202309';
  • 注意事项 存在分区大于50GB的表不支持页面操作迁移,需要手工迁移。 迁移表需要非空,且设置唯一分区字段。空表或多字段分区在创建任务时无法选择。 冷热分离表涉及热盘数据和冷盘数据迁移,如果对冷数据查询频次不高或者冷数据查询性能要求不高,可以无需迁移。后续新扩容节点的热数据盘使用率会随着业务数据写入,慢慢接近旧节点的热数据盘使用率。如果需要频繁查询冷数据,且对冷数据查询有性能要求,可以迁移冷热分离表,迁移过程中冷数据迁移速率慢。 每个数据表只能绑定一个任务。一个集群仅支持一个执行中的任务。 本地表的数据库必须为atomic(默认)或ordinary,且表类型为Mergetree家族系列引擎的表(包括非复制表和复制表,不支持物化视图表)。 本地表副本关系和cluster一致,有分布式表作为分片之间的关系。 数据迁移过程中原表默认为只读状态。 数据迁移的时候数据首先会保存在临时表中,执行的时候用迁移的数据表替换原表,该过程中可能读取到错误的数据,切换时间为秒级。 数据迁移过程中可能由于集群问题导致此过程暂停,根据报错修复集群继续执行任务。 数据迁移的时候,源节点和重分布节点必须存在相同表,这样才可以进行数据迁移。 单节点不支持数据迁移。
  • 新建数据迁移任务自动迁移 前提:存在分区数据表数据小于50GB。 登录 表格存储 服务管理控制台。 单击管理控制台左上角的,选择区域。 进入集群管理页面,选择集群进入集群详情页面。 单击数据迁移进入数据迁移管理页面。 表1 数据迁移参数说明 参数 说明 任务ID/名称 新建迁移任务ID/名称。 逻辑集群 选取的逻辑集群名称。 源节点 数据存放的节点。 重分布节点 数据分布的节点。 状态/进度 数据分布的状态/进度。 状态:初始化、运行中、已完成。 创建时间 创建数据任务的时间。 执行开始时间 启动数据任务的时间。 更新时间 修改数据任务的时间。 操作 启动:启动数据任务。 修改:修改任务信息。 取消:取消迁移任务。 详情:任务详情页面。 删除:删除任务。 单击左上角“新建任务”。 用户自定义任务名称(以字母开头)。 选择逻辑集群。 选择迁移百分比。 选择源节点。 选择重分布节点。 选择迁移的数据表。 选择后单击确定,完成新建任务。 单击操作列“启动”,任务启动。
  • 连接客户端 安全集群创建后,打开详情页面,下载证书。 下载证书后,自定义存放路径。 连接集群。 ./mysql -uadmin -h集群内网地址 -P端口 --ssl-ca={path}/certificate.crt --ssl-mode=VERIFY_CA -ppassword 内网地址:所连接集群的内网地址。 path:证书存放的路径。 端口:FE上的mysql server端口9030。 password:指创建集群时设置的密码。 {path}/certificate.crt:存放下载证书的路径。 开启https后需要使用mysql8及以上客户端。
  • 下载安全证书 安全集群创建后,打开详情页面,下载证书。 下载证书后,自定义存放路径。 通过https协议执行样例sql。 curl -X POST -H 'Content-Type: text/plain' --cacert {path}/certificate.crt -uadmin https://host:port/api/query_schema/internal/test_db -d@1.sql 参数描述: certificate.crt:指下载的证书。 -uadmin:集群的用户名,默认admin。 host:port:host指的是内网地址,port指的是https协议端口。 test_db:指定数据库名称。 1.sql:指写入sql语句的文件。 path:证书存放的路径。
  • 打开安全和非安全通道步骤 登录表格存储服务管理控制台。 单击管理控制台左上角的,选择区域。 单击右上角的购买集群按钮,进入“购买集群”页面。 配置好参数,单击“立即购买”。 进入“规格详情”页面,确认集群规格订单信息,单击“提交”,成功提交集群创建任务。 集群创建成功后,进入详情页面打开“同时开启安全通道和非安全通道”按钮,弹出确认框,确认无误后,单击“确定”。 在详情页面开启安全通道后,集群会重启。 安全通道和非安全通道同时开启后无法关闭。
  • HTTPS连接步骤 安全集群创建后,打开详情页面,下载证书。 下载证书后,自定义存放路径。 通过https协议执行样例sql。 echo 'select 1' | curl -H 'X-ClickHouse-User: user' -H 'X-ClickHouse-Key: password' --cacert /clickhouse/client/client/bin/certificate.crt 'https://host:port/?' --data-binary @- select 1:执行的sql语句。 user:用户名。 password:创集群时创建的密码。 /clickhouse/client/client/bin/certificate.crt:指证书存放路径。 host、port:host指的是内网地址,port指的是https协议端口。
  • 打开安全通道操作步骤 登录表格存储服务管理控制台。 单击管理控制台左上角的,选择区域。 进入集群管理页面单击右上角的购买集群按钮,进入“购买集群”页面。 完成其他配置后,查看安全通道加密按钮是否开启,默认开启。 图1 安全通道 关闭https会给企业服务带来风险。 创建集群开启https选项,后续无法关闭。 创建集群未开启https选项,后续无法开启。 配置好参数,单击“立即购买”。 进入“规格详情”页面,确认集群规格订单信息,单击“提交”,成功提交集群创建任务,集群创建成功后,进入详情页面查看通道开启状态。
  • JDBC连接 public void run() throws InterruptedException { final ClickHouseProperties clickHouseProperties = new ClickHouseProperties(); // 认证用的密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量CK_PASSWORD String password = System.getenv("CK_PASSWORD"); clickHouseProperties.setSslRootCertificate("/etc/ssl/certificate.crt"); clickHouseProperties.setSsl(true); clickHouseProperties.setSslMode("strict"); clickHouseProperties.setUser("test"); clickHouseProperties.setPassword(password); clickHouseProperties.setSocketTimeout(2 * 3600 * 1000); final BalancedClickhouseDataSource dataSource = new BalancedClickhouseDataSource("xxxx.mycloudtable.com:8443/default?ssl=true", clickHouseProperties); try { final ClickHouseConnection conn = dataSource.getConnection(); conn.createStatement().executeQuery("select now()"); } catch (Throwable e) { e.printStackTrace(); } } clickHouseProperties.setSslRootCertificate("/etc/ssl/certificate.crt");中的/etc/ssl/certificate.crt指存放证书路径。
  • 运行中的慢SQL查询操作步骤 登录表格存储服务管理控制台。 在集群列表中找到所要查看的集群并单击“集群名称”,进入详情页。 在左侧导航树,单击“慢查询管理”,进入运行中慢查询页面。 可通过对慢查询运行时长、时间范围、用户、远程IP以及SQL语句的调整来实现数据的筛选以及结束运行中的SQL的命令。 表1 运行中慢sql查询参数说明 参数 参数说明 查询编号 查询每一个SQL命令的ID。 执行开始时间 SQL语句执行开始时间。 执行结束时间 SQL语句执行结束时间。 数据库 使用的数据库。 SQL语句 执行的SQL语句。 运行时长(ms) SQL执行时长。 状态 SQL运行的状态。 用户 提交SQL的用户。 远程IP 用户提交SQL使用的客户端地址。 操作 进行停止查询等操作。
  • Doris慢查询使用命令 查询慢查询功能是否开启。 ADMIN show FRONTEND CONFIG like 'query_history_enable'; 开启慢查询功能。 ADMIN set FRONTEND CONFIG ("query_history_enable" = "true"); 关闭慢查询功能。 ADMIN set FRONTEND CONFIG ("query_history_enable" = "false");
  • 已完成的慢SQL查询操作步骤 登录表格存储服务管理控制台。 在集群列表中找到所要查看的集群并单击“集群名称”,进入详情页。 在左侧导航树,单击“慢查询管理”,进入已完成的慢查询页面。 可通过对慢查询运行时长、时间范围、状态、用户、远程IP以及SQL语句的调整来实现数据的筛选。 表2 已完成慢sql查询参数说明 参数 参数说明 查询编号 查询每一个SQL命令的ID。 执行开始时间 SQL语句执行开始时间。 执行结束时间 SQL语句执行结束时间。 数据库 使用的数据库。 SQL语句 执行的SQL语句。 运行时长(ms) SQL执行时长。 状态 SQL运行的状态。 用户 提交SQL的用户。 远程IP 用户提交SQL使用的客户端地址。
  • 角色管理命令简介 此章节主要介绍用角色管理SQL基本语法和使用说明。 创建角色 CREATE Role role_name; role_name:指新建角色名称。 给角色赋予权限。 授予指定库表的权限给角色。 GRANT LOAD_PRIV ON ctl1.db1.* TO ROLE 'my_role'; 授予指定资源的使用权限给角色。 GRANT USAGE_PRIV ON RESOURCE 'spark_resource' TO ROLE 'my_role'; 删除角色。 DROP ROLE role1; 查询当前用户的权限和角色。 SHOW GRANTS; 父主题: Doris角色管理
  • 用户管理命令简介 此章节主要介绍用户管理SQL基本语法和使用说明。 创建用户。 CREATE USER命令用于创建一个Doris用户(无角色)。 CREATE USER 'Jack' IDENTIFIED BY 'password'; 表1 参数说明 参数 说明 Jack 设置的用户名。 password 指创建的用户密码。 可通过命令指定IP。 CREATE USER 'jack02' @'192.168.%' identified by '123456' DEFAULT ROLE 'default_role'; CREATE USER命令用于创建一个Doris用户(分配系统默认角色)。 CREATE USER 'jeo' IDENTIFIED BY 'password' DEFAULT ROLE 'default_role'; 修改用户密码。 ALTER USER命令用于修改用户密码。 ALTER USER 'Jack' IDENTIFIED BY "password"; 给用户分配角色。 给用户分配角色。 GRANT 'role1','role2' TO 'jack'@'%'; 表2 参数说明 参数 说明 role 代表创建的角色。 jack 代表新建的用户名。 撤销分配给用户的角色。 REVOKE 'role1' FROM 'candy'; 删除用户。 DROP USER'Jack'; 父主题: Doris用户管理
  • 查看权限 登录表格存储服务管理控制台。 单击管理控制台左上角的,选择区域。 单击左侧集群管理,显示当前集群列表,选择需要操作的集群,进入用户管理页面。 单击操作列“查看权限”,弹出用户权限页面。 表2 查看权限 参数 说明 用户名 新建的用户名。 全局权限 查询、插入、更改、创建、删除。 各级权限 数据库和表:创建的数据库和表。 高危权限:创建表、删除表。 普通权限:查询、插入、更改。 组件支持查看账户对数据库的操作权限。
  • 基于索引查询 在具有索引的用户表中,可以使用SingleColumnValueFilter来查询数据。当查询条件可以命中索引时,查询速度远快于原表查询。 索引的命中规则如下: 多个AND条件查询。 当用于查询的列至少包含索引第一个列时,使用索引会提高查询性能。 例如,为C1、C2和C3创建组合索引。 该索引在以下情况下生效: Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2)AND Filter_Condition(IndexCol3) Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2) Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol3) Filter_Condition(IndexCol1) 该索引在下列情况下不生效: Filter_Condition(IndexCol2)AND Filter_Condition(IndexCol3) Filter_Condition(IndexCol2) Filter_Condition(IndexCol3) 当在查询中使用“索引列和非索引列”进行过滤时,使用索引可提高查询性能。当非索引列命中覆盖列时,查询性能最优;如果有需经常查询的非索引列,建议定义为覆盖列。例如: Filter_Condition(IndexCol1)AND Filter_Condition(NonIndexCol1) Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2)AND Filter_Condition(NonIndexCol1) 当多个列用于查询时,只能为组合索引中的最后一列指定值范围,而其他列只能设置为指定值。 例如,为C1、C2和C3创建组合索引。在范围查询中,只能为C3设置数值范围,过滤条件为“C1 = XXX,C2 = XXX,C3 = 数值范围”。 多个OR条件查询。 例如,为C1、C2和C3创建组合索引。 仅对索引列首个字段进行进行过滤时(支持范围过滤),使用索引可提高查询性能。 Filter_Condition(IndexCol1)OR Filter_Condition(IndexCol1)OR Filter_Condition(IndexCol1) 对非索引和非索引列进行过滤时,无法命中索引,查询性能不会提高。 Filter_Condition(IndexCol1)OR Filter_Condition(NonIndexCol1) 组合查询时,最外层包含OR条件时无法命中索引,查询性能不会提高。 Filter_Condition(IndexCol1)OR Filter_Condition(NonIndexCol1) (Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2))OR(Filter_Condition(NonIndexCol1)) 减少OR条件使用,尤其是OR条件+范围条件,命中索引的情况下也会造成查询大范围查询,速度较慢。
  • 全局二级索引API 使用全局索引的API都在类“org.apache.hadoop.hbase.hindex.global.GlobalIndexAdmin”中,相关接口介绍如下: 操作 接口 描述 添加索引 addIndices() 将索引添加到没有数据的表中。调用此接口会将用户指定的索引添加到表中,但会跳过生成索引数据。该接口的使用场景为用户想要在具有大量预先存在用户数据的表上批量添加索引,然后使用GlobalTableIndexer工具来构建索引数据。 addIndicesWithData() 将索引添加到有数据的表中。此方法将用户指定的索引添加到表中,并会对已经存在的用户数据创建对应的索引数据,也可先调用该方法生成索引再在存入用户数据的同时生成索引数据。当数据表中存在大量数据时,不建议使用此接口。 删除索引 dropIndices() 仅删除索引,索引元数据与索引数据均会被删除,在此操作之后,索引不能用于scan/filter操作。 索引状态修改 alterGlobalIndicesUnusable() 禁用用户指定的索引,使其不再可用于scan/filter操作。 alterGlobalIndicesActive() 启用用户指定的索引,使其可用于scan/filter操作。 alterGlobalIndicesInactive() 禁用用户指定的索引,且放弃生成索引数据,不再可用于scan/filter操作,通常用于索引修复流程。 查看已创建的索引 listIndices() 可用于列出给定表中的所有索引。 父主题: 配置HBase全局二级索引
  • 索引状态介绍 索引状态反映了索引当前的使用情况,全局二级索引支持以下五种状态: ACTIVE:索引正常,可以正常读写。 UNUSABLE:索引被禁用,索引数据会正常写入,查询时无法使用这个索引。 INACTIVE:索引异常,索引数据与数据表不一致,跳过生成这个索引的索引数据,查询数据时无法使用这个索引。 BUILDING:索引数据正常批量生成,索引数据生成工具执行结束会自动转换到ACTIVE状态,此状态下可以正常读写。 DROPPING:索引正在被删除,跳过生成这个索引的索引数据,查询数据时无法使用这个索引。 基于工具的索引状态修改,支持图1所示的状态转换。 图1 索引状态转换图
  • 使用方法 在HBase客户端执行以下命令可删除某个索引: hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.index='table' -Dindexnames.to.drop='idx1#idx2' 相关参数介绍如下: tablename.to.index:表示需删除的索引所在的表名称。 indexnames.to.drop:表示需要删除的索引名称,可以同时指定多个,用#号分隔。
  • 使用方法 在HBase客户端执行以下命令可索引的定义及状态: hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.show='table' 相关参数介绍如下: tablename.to.show:表示需查看相关索引定义的数据表名称。 查询结果如图1所示,会打印索引列定义、覆盖列定义、TTL、预分区信息、索引状态等: 图1 索引查询结果
  • 场景介绍 使用HBase二级索引可以加速带Filter的条件查询,支持HIndex(本地索引,即Local Secondary Index )和全局二级索引(Global Secondary Index)。全局二级索引相较于本地索引(HIndex),查询性能更好,适合读时延要求高的场景。 HBase全局二级索引,使用独立的索引表存储索引数据。当给定的查询条件可以命中索引时,可以将对数据表的全表查询转换为对索引表的精确范围查询,提升查询速度。开启全局二级索引特性后,应用侧代码无需特殊修改,简单易用。 HBase全局二级索引支持以下重点特性: 复合索引 支持指定多个列作为索引列(支持跨列族)。 覆盖索引 支持指定多个列/列族作为覆盖列/列族冗余存储到索引表中,用于支持索引查询中对非索引列的快速查询。 索引TTL 支持索引表TTL,用于支持数据表开启TTL的场景,为了保障与数据表的一致性,索引表TTL将自动继承数据表索引列和覆盖列的TTL,不支持手动指定。 索引在线变更 支持索引在线创建、删除和修改状态,不影响数据表读写。 索引在线修复 当查询命中的索引数据无效时,可以触发索引修复,保障最终查询结果正确。 索引工具 支持索引一致性检查、索引修复、索引创建/删除/修改状态、索引数据重建等功能。
  • Clickhouse命令简介 本章节主要介绍常用的ClickHouse组件命令。安装ClickHouse客户端后,加载环境变量,可使用以下命令。 连接ClickHouse集群。 非安全集群连接命令 ./clickhouse client --host 集群内网地址 --port 9000 --user admin --password password 安全集群连接命令,详细操作请参见安全集群连接步骤 ./clickhouse client --host 集群内网地址 --port 9440 --user admin --password password --secure --config-file /root/config.xml 创建数据库。 create database demo; 使用数据库。 use demo; 查看当前使用数据库。 select currentDatabase(); 创建数据表。 create table demo_t(uid Int32,name String,age UInt32,gender String)engine = TinyLog; 查看表结构。 desc demo_t; 插入数据。 insert into demo_t values(1,'Candy','23','M'),(2,'cici','33','F'); 查看表。 select * from demo_t; 查看数据库和表。 查看数据库。 show databases; 查看表。 show tables; 删除数据库和表。 删除表。 drop table demo_t; 删除数据表前,需确认此数据表是否应用中,以免引起不必要的麻烦。 删除数据表后可在24小时内恢复,超过24小时无法恢复。恢复命令如下: set allow_experimental_undrop_table_query = 1; UNDROP TABLE 数据表名; 删除数据库。 drop database demo; 父主题: 连接ClickHouse集群
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全