本文汇总了使用 StarRocks 时的其他常见问题。
VARCHAR(32) 和 STRING 都是变长数据类型。当储存相同长度的数据时,VARCHAR(32) 和 STRING 占用的储存空间相同。
相同。
将文件字符集视为 GBK 进行字符集转换,步骤如下:
-
例如,一个名为 origin 的文件乱码,用以下命令查看到其字符集为 ISO-8859-1。
file --mime-encoding origin.txt origin.txt:iso-8859-1
-
使用
iconv
命令将文件的字符集转换为 UTF-8。iconv -f iso-8859-1 -t utf-8 origin.txt > origin_utf-8.txt
-
若转换后得到的文件还存在乱码,那么将文件的字符集视为 GBK,再转换成 UTF-8。
iconv -f gbk -t utf-8 origin.txt > origin_utf-8.txt
在 StarRocks 中,VARCHAR(n) 中的n代表字节数,而在 MySQL 中,VARCHAR(n) 中的 n 代表字符数。根据 UTF-8,1 个汉字等于 3 个字节。当 StarRocks 和 MySQL 将 n 定义成相同数字时,MySQL 保存的字符数是 StarRocks 的 3 倍。
不可以,仅支持 DATE, DATETIME 和 INT 数据类型。
执行 SHOW DATA 语句查看数据所占存储空间以及数据量、副本数量和行数。
说明:数据导入非实时更新,在导入后 1 分钟左右可以查看到最新的数据。
运行如下代码调整数据库配额:
ALTER DATABASE example_db SET DATA QUOTA 10T;
StarRocks 2.2 及以上版本可以通过主键 (Primary Key) 模型实现部分字段更新。StarRocks 1.9 及以上版本可以通过主键 (Primary Key) 模型实现全部字段更新。更多信息,参见 StarRocks 2.2 版本的主键模型。
执行 SWAP WITH 语句实现原子替换表和原子替换分区功能。SWAP WITH 语句要比 INSERT OVERWRITE 语句更安全。原子替换前可以先检查数据,以便核对替换后的数据和替换前的数据是否相同。
-
原子替换表:例如,有一张表名为
table1
。如果要用另一张表原子替换table1
,操作如下:-
创建一张新表名为
table2
。create table2 like table1;
-
使用 Stream Load、Broker Load、或 Insert Into 等方式将
table1
的数据导入到新表table2
中。 -
原子替换
table1
与table2
。ALTER TABLE table1 SWAP WITH table2;
这样做,数据就会精准的导入到
table1
中。 -
-
原子替换分区:例如,有一个表名为
table1
。如果想要原子替换table1
中的分区数据,操作如下:-
创建临时分区。
ALTER TABLE table1 ADD TEMPORARY PARTITION tp1 VALUES LESS THAN("2020-02-01");
-
将
table1
中的分区数据导入到临时分区。 -
原子替换分区。
ALTER TABLE table1 REPLACE PARTITION (p1) WITH TEMPORARY PARTITION (tp1);
-
该错误是 BDBJE 的漏洞导致的,将 BDBJE 升级到 1.17 或更高版本可修复此问题。
msg:Broker list path exception
path=hdfs://172.31.3.136:9000/user/hive/warehouse/zltest.db/student_info/*, broker=TNetworkAddress(hostname:172.31.4.233, port:8000)
和 StarRocks 的技术支持确认 namenode 的地址和端口是否正确以及您是否有权限访问 namenode 的地址和端口。
msg:get hive partition meta data failed: java.net.UnknownHostException: emr-header-1.cluster-242
确认有网络连接并给每个 BE 机器传一份集群里的 host 文件。
Apache Hive™ 的元数据会缓存在 StarRocks 的 FE 中,但是 StarRocks 更新元数据有两个小时的时间差。在 StarRocks 完成更新之前,如果在 Apache Hive™ 表中插入新数据或更新数据,那么 BE 扫描的 HDFS 中的数据和 FE 获得的数据不一致就会发生这个错误。
MySQL [bdp_dim]> select * from dim_page_func_s limit 1;
ERROR 1064 (HY000): HdfsOrcScanner::do_open failed. reason = Invalid ORC postscript length
解决方案有以下两种:
- 将 StarRocks 升级到 2.2 或更高版本。
- 手动刷新 Apache Hive™ 表。更多信息,参见更新缓存。
MySQL 5.7 版本默认的认证方式为 mysql_native_password,如使用 MySQL 8.0 版本默认的认证方式 caching_sha2_password 来进行认证会导致连接报错。
解决方案有以下两种:
-
设置 root 用户
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
-
修改 my.cnf 文件
vim my.cnf [mysqld] default_authentication_plugin=mysql_native_password
执行 DROP TABLE 语句删表后需等待磁盘空间释放。如果想要快速释放磁盘空间可以使用 DROP TABLE FORCE 语句。执行 DROP TABLE FORCE 语句删除表时不会检查该表是否存在未完成的事务,而是直接将表删除。建议谨慎使用 DROP TABLE FORCE 语句,因为使用该语句删除的表不能恢复。
执行select current_version();
命令或者CLIsh bin/show_fe_version.sh
命令查看版本。
元数据信息都保存在 FE 的内存中。可以参考 Tablet 的数量来设置 FE 的内存大小。一千万个 Tablet 内存使用在 20 GB左右。FE 的内存最多可设置为 20 GB。
StarRocks 是多线程计算,查询时间即为查询最慢的线程所用的时间。
不支持。
建议根据业务场景或模拟业务场景测试 StarRocks 的并发量级。在部分客户的并发量级最高达到 20,000 QPS 或 30,000 QPS。
第一次查询读盘跟磁盘性能相关。第一次查询后系统的页面缓存生效,后续查询会先扫描页面缓存,所以速度有所提升。
StarRocks 支持单节点部署,所以 BE 最小配置个数是 1 个。BE 需要支持 AVX2 指令集,所以推荐部署 BE 的机器配置在 8 核 16 GB及以上。建议正常应用环境配置 3 个 BE。
创建一个新用户,然后通过给该用户授予表查询权限进行数据权限控制。
因为报告信息只汇报给主 FE,只有主 FE 可以查看报告信息。同时,如果通过 StarRocks Manager 查看 profile, 必须确保 FE 配置项 enable_collect_query_detail_info
为 true
。
可以通过 show create table xxx
命令查看。
StarRocks 2.1 及更高版本支持为函数指定默认值。低于 StarRocks 2.1 的版本仅支持为函数指定常量。