其他常见问题
本主题提供了对一些常见问题的解答。
VARCHAR (32) 和 STRING 占用相同的存储空间吗?
两者都是可变长度数据类型。当您存储相同长度的数据时,VARCHAR (32) 和 STRING 占用相同的存储空间。
VARCHAR (32) 和 STRING 在数据查询方面的性能相同吗?
是的。
从 Oracle 导入的 TXT 文件在设置字符集为 UTF-8 后仍然出现乱码,为什么?
要解决此问题,请执行以下步骤
-
例如,有一个名为 original 的文件,其文本显示为乱码。此文件的字符集为 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
MySQL 定义的 STRING 的长度与 StarRocks 定义的长度相同吗?
对于 VARCHAR(n),StarRocks 以字节为单位定义“n”,而 MySQL 以字符为单位定义“n”。根据 UTF-8,一个汉字等于三个字节。当 StarRocks 和 MySQL 将“n”定义为相同的数字时,MySQL 保存的字符数是 StarRocks 的三倍。
表的分区字段的数据类型可以是 FLOAT、DOUBLE 或 DECIMAL 吗?
否,仅支持 DATE、DATETIME 和 INT。
如何查看表中数据占用的存储空间?
执行 SHOW DATA 语句以查看相应的存储空间。您还可以查看数据量、副本数和行数。
注意:数据统计存在时间延迟。
如何请求增加 StarRocks 数据库的配额?
要请求增加配额,请运行以下代码
ALTER DATABASE example_db SET DATA QUOTA 10T;
StarRocks 是否支持通过执行 UPSERT 语句来更新表中的特定字段?
StarRocks 2.2 及更高版本支持使用主键表更新表中的特定字段。StarRocks 1.9 及更高版本支持使用主键表更新表中的所有字段。有关更多信息,请参见 StarRocks 2.2 中的 主键表。
如何在两个表或两个分区之间交换数据?
执行 SWAP WITH 语句以在两个表或两个分区之间交换数据。SWAP WITH 语句比 INSERT OVERWRITE 语句更安全。在交换数据之前,请先检查数据,然后查看交换后的数据是否与交换前的数据一致。
-
交换两个表:例如,有一个名为 table 1 的表。如果要用另一个表替换 table 1,请执行以下步骤
-
创建一个名为 table 2 的新表。
create table2 like table1;
-
使用 Stream Load、Broker Load 或 Insert Into 将数据从 table 1 加载到 table 2。
-
用 table 2 替换 table 1。
ALTER TABLE table1 SWAP WITH table2;
通过这样做,数据可以准确地加载到 table 1 中。
-
-
交换两个分区:例如,有一个名为 table 1 的表。如果要替换 table 1 中的分区数据,请执行以下步骤
-
创建一个临时分区。
ALTER TABLE table1
ADD TEMPORARY PARTITION tp1
VALUES LESS THAN("2020-02-01"); -
将分区数据从 table 1 加载到临时分区。
-
用临时分区替换 table 1 的分区。
ALTER TABLE table1
REPLACE PARTITION (p1) WITH TEMPORARY PARTITION (tp1);
-
当我重新启动前端 (FE) 时,出现此错误“error to open replicated environment, will exit”
此错误是由于 BDBJE 的错误引起的。要解决此问题,请将 BDBJE 版本更新到 1.17 或更高版本。
当我从新的 Apache Hive 表中查询数据时,出现此错误“Broker list path exception”
问题描述
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 的地址和端口。
当我从新的 Apache Hive 表中查询数据时,出现此错误“get hive partition metadata failed”
问题描述
msg:get hive partition meta data failed: java.net.UnknownHostException: emr-header-1.cluster-242
解决方案
确保网络已连接,并将 host 文件上传到 StarRocks 集群中的每个后端 (BE)。
当我访问 Apache Hive 中的 ORC 外部表时,出现此错误“do_open failed. reason = Invalid ORC postscript length”
问题描述
Apache Hive 的元数据缓存在 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 的外部表时,出现此错误“caching_sha2_password cannot be loaded”
问题描述
MySQL 8.0 的默认身份验证插件是 caching_sha2_password。MySQL 5.7 的默认身份验证插件是 mysql_native_password。发生此错误是因为您使用了错误的身份验证插件。
解决方案
要解决此问题,请执行以下操作之一
- 连接到 StarRocks。
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 语句删除表,StarRocks 需要一段时间才能释放已分配的磁盘空间。要立即释放已分配的磁盘空间,请执行 DROP TABLE FORCE 语句删除表。执行 DROP TABLE FORCE 语句时,StarRocks 会直接删除表,而不检查其中是否存在未完成的事件。我们建议您谨慎执行 DROP TABLE FORCE 语句。因为一旦删除了表,您就无法恢复它。
如何查看 StarRocks 的当前版本?
运行 select current_version();
命令或 CLI 命令 ./bin/show_fe_version.sh
以查看当前版本。
如何设置 FE 的内存大小?
元数据存储在 FE 使用的内存中。您可以根据 tablet 的数量设置 FE 的内存大小,如下表所示。例如,如果 tablet 的数量低于 100 万,则应为 FE 分配至少 16 GB 的内存。您可以在 fe.conf 文件中配置参数 -Xms
和 -Xmx
的值,并且参数 -Xms
和 -Xmx
的值应保持一致。请注意,所有 FE 上的配置都应相同,因为任何 FE 都可以被选为 Leader。
Tablet 数量 | 每个 FE 的内存大小 |
---|---|
低于 100 万 | 16 GB |
1 ~ 2 百万 | 32 GB |
2 ~ 5 百万 | 64 GB |
5 ~ 10 百万 | 128 GB |
StarRocks 如何计算其查询时间?
StarRocks 支持使用多个线程查询数据。查询时间是指多个线程用于查询数据的时间。
StarRocks 支持在本地导出数据时设置路径吗?
否。
StarRocks 的并发上限是多少?
您可以根据实际业务场景或模拟业务场景测试并发限制。根据一些用户的反馈,最多可以实现 20,000 QPS 或 30,000 QPS。
为什么 StarRocks 的首次 SSB 测试性能比第二次慢?
首次查询读取磁盘的速度与磁盘的性能有关。首次查询后,会为后续查询生成页面缓存,因此查询速度比以前更快。
一个集群至少需要配置多少个 BE?
StarRocks 支持单节点部署,因此您至少需要配置一个 BE。BE 需要在 AVX2 上运行,因此我们建议您在具有 8 核和 16GB 或更高配置的机器上部署 BE。
当我使用 Apache Superset 可视化 StarRocks 中的数据时,如何设置数据权限?
您可以创建一个新的用户帐户,然后通过授予用户表查询的权限来设置数据权限。
为什么在我将 enable_profile
设置为 true
后,profile 无法显示?
该报告仅提交给 leader FE 以进行访问。
如何在 StarRocks 的表中检查字段注释?
运行 show create table xxx
命令。
创建表时,如何为 NOW() 函数指定默认值?
只有 StarRocks 2.1 或更高版本支持为函数指定默认值。对于早于 StarRocks 2.1 的版本,您只能为函数指定常量。
如何释放 BE 节点的存储空间?
您可以使用 rm -rf
命令删除目录 trash
。如果您已经从快照恢复了数据,则可以删除目录 snapshot
。
可以向 BE 节点添加额外的磁盘吗?
是的。您可以将磁盘添加到 BE 配置项 storage_root_path
指定的目录。
如何防止由于并发执行加载任务和分区创建任务而导致的表达式分区冲突?
目前,对于具有表达式分区策略的表,加载任务期间创建的分区与 ALTER TABLE 任务期间创建的分区冲突。由于加载任务具有优先级,因此任何冲突的 ALTER 任务都将失败。要防止此问题,请考虑以下解决方法
- 如果您使用基于时间的粗略分区(例如,按天或月分区),则可以防止 ALTER 操作跨越时间边界,从而降低分区创建失败的风险。
- 如果您使用基于时间的细粒度分区(例如,按小时分区),则可以手动创建未来时间范围的分区,以确保 ALTER 操作不受加载任务创建的新分区的干扰。您可以使用 EXPLAIN ANALYZE 功能,通过执行 INSERT 语句而不提交事务来触发分区创建。这使您可以在不影响实际数据的情况下创建必要的分区。以下示例演示如何为未来 8 小时创建分区
CREATE TABLE t(
event_time DATETIME
)
PARTITION BY date_trunc('hour', event_time);
EXPLAIN ANALYZE
INSERT INTO t (event_time)
SELECT DATE_ADD(NOW(), INTERVAL d hour)
FROM table(generate_series(0, 8)) AS g(d);
SHOW PARTITION FROM t;