- 如何处理数字开头的字段?
- 执行DROP TABLE语句报错:cannot drop table
- 写入或查询含有多表Join时报错: BinaryArray cannot contain more than 2147483646 bytes
- 建表时报错:CREATE TABLE is not supported for current instance
- 导入或者查询数据时报错:Cannot reserve capacity larger than 2^31 - 1 for binary
如何处理数字开头的字段?
交互式分析Hologres兼容PostgreSQL,使用语法同PostgreSQL,不支持数字开头的字段。
如果您使用Hologres时遇到数字开头的字段,查询时需要为该字段增加双引号,示例如下。
select bizdate,"1_day_active_users","7_day_active_users" from t_active_users;
执行DROP TABLE语句报错:cannot drop table
- 问题现象
对表执行DROP TABLE语句时出现如下报错。
- 问题原因
表存在相关依赖,例如有视图使用了此表,导致删除表失败。
- 解决方法
使用如下命令删除表的同时删除相关依赖。
table_name为要删除表的名称。DROP TABLE <table_name> CASCADE;
写入或查询含有多表Join时报错: BinaryArray cannot contain more than 2147483646 bytes
- 问题现象
写入或查询命令中含有多表Join时报错:
ERROR: BinaryArray cannot contain more than 2147483646 bytes, have xxx
。 - 问题原因
Hologres单个字段大小的上限是2 GB,在统计信息未及时更新的情况下,多表Join时生成了不合理的执行计划,从而出现超过2 GB的报错。
- 解决方法
对Join的表执行如下命令用于更新表的统计信息。
如果更新表的统计信息后仍然报错,说明数据中有较大字段,在SQL前使用如下命令添加GUC参数解决。analyze <tablename>;
set hg_experimental_query_batch_size = 1024;
建表时报错:CREATE TABLE is not supported for current instance
- 问题现象
建表时报错:
CREATE TABLE is not supported for current instance
。 - 问题原因
当前实例是共享集群(实例Endpoint以
hgmc
开头,如hgmc-cn-xxwwwkkk
,可以前往Hologres管理控台查看实例Endpoint),共享集群不支持创建内部表,只能创建外部表。 - 解决方法
- 按照创建外部表语法创建外部表,详情请参见CREATE FOREIGN TABLE。
- 使用Hologres独享示例,可支持创建内部表。
导入或者查询数据时报错:Cannot reserve capacity larger than 2^31 - 1 for binary
- 问题现象
在导入或者查询数据时报错:
Cannot reserve capacity larger than 2^31 - 1 for binary
。 - 问题原因及解决方法
- 原因一:Hologres单个字段大小的上限为2 GB,在统计信息未及时更新的情况下,不合理的执行计划,从而出现超过2 GB的报错。
解决方法:对表执行
analyze
命令,用于更新表的统计信息。analyze <tablename>;
- 原因二:表字段数据量超过2 GB,导致报错。
解决方法:在SQL前面添加以下GUC参数以降低每次Query读取的批次大小。
set hg_experimental_query_batch_size = 1024;
- 原因一:Hologres单个字段大小的上限为2 GB,在统计信息未及时更新的情况下,不合理的执行计划,从而出现超过2 GB的报错。