Hologres这个怎么改啊?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您的问题提到“Hologres这个怎么改啊?”,但未具体说明需要修改的内容。根据提供的知识库资料,我将从以下几个常见场景为您详细解答如何在Hologres中进行修改操作。如果您有更具体的修改需求,请进一步补充说明。
如果需要对表中的列进行重命名,可以使用ALTER TABLE
语句。以下是具体操作步骤:
语法:
ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> RENAME COLUMN <old_column_name> TO <new_column_name>;
示例: 将表holo_test
的id
列重命名为name
:
ALTER TABLE IF EXISTS public.holo_test RENAME COLUMN id TO name;
注意事项:
developer
用户组权限的用户可执行此操作。可以通过ALTER TABLE
语句修改或删除列的默认值。修改后的默认值仅对新写入/更新的数据生效,不会影响已有数据。
语法:
ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ALTER COLUMN <column> SET DEFAULT <expression>;
ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> ALTER COLUMN <column> DROP DEFAULT;
示例:
holo_test
表中id
列的默认值为0
:ALTER TABLE IF EXISTS holo_test ALTER COLUMN id SET DEFAULT 0;
holo_test
表中id
列的默认值:ALTER TABLE IF EXISTS holo_test ALTER COLUMN id DROP DEFAULT;
版本要求:此功能需Hologres V0.9.23及以上版本支持。
Hologres支持通过ALTER TABLE
或CALL
语句修改表属性,例如字典编码列(dictionary_encoding_columns
)。
语法:
ALTER TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (dictionary_encoding_columns = '[columnName{:[on|off|auto]}[,...]]');
CALL SET_TABLE_PROPERTY('[<schema_name>.]<table_name>', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');
示例:
tbl
的所有字典编码:BEGIN;
CALL SET_TABLE_PROPERTY('tbl', 'dictionary_encoding_columns', '');
COMMIT;
注意事项:
如果需要终止不符合预期的Query,可以使用以下命令:
终止单个Query:
SELECT pg_cancel_backend(<pid>);
批量终止Query:
SELECT pg_cancel_backend(pid)
FROM pg_stat_activity
WHERE length(query) > 0
AND pid != pg_backend_pid()
AND backend_type = 'client backend'
AND application_name != 'hologres';
注意事项:
pg_cancel_backend
仅终止正在运行的Query,不会影响已提交的事务。可以通过SET statement_timeout
设置活跃Query的超时时间。
语法:
SET statement_timeout = <time>;
示例:
SET statement_timeout = 5000;
SELECT * FROM tablename;
SET statement_timeout = '5000min';
SELECT * FROM tablename;
注意事项:
可以通过SET idle_in_transaction_session_timeout
设置空闲事务的超时时间。
语法:
SET idle_in_transaction_session_timeout = <time>;
ALTER DATABASE db_name SET idle_in_transaction_session_timeout = <time>;
示例:
SET idle_in_transaction_session_timeout = 300000;
注意事项:
关闭字典编码可以提升某些场景下的查询性能。
示例:
BEGIN;
CREATE TABLE tbl (a INT NOT NULL, b TEXT NOT NULL, c INT NOT NULL, d INT);
CALL SET_TABLE_PROPERTY('tbl', 'dictionary_encoding_columns', '');
COMMIT;
注意事项:
Hologres底层引擎HQE不支持某些算子(如NOT IN
),会将其转交PQE执行,导致性能下降。建议改写SQL以避免此类问题。
示例:
EXPLAIN SELECT * FROM tmp WHERE a NOT IN (SELECT a FROM tmp1);
EXPLAIN SELECT * FROM tmp WHERE NOT EXISTS (SELECT a FROM tmp1 WHERE a = tmp.a);
注意事项:
EXPLAIN
查看执行计划,若出现External SQL(Postgres)
,则说明部分SQL在PQE中执行。Hologres支持按需开启或关闭Binlog功能,并可配置TTL。
关闭Binlog:
BEGIN;
CALL SET_TABLE_PROPERTY('<table_name>', 'binlog.level', 'none');
COMMIT;
修改Binlog TTL:
CALL SET_TABLE_PROPERTY('<table_name>', 'binlog.ttl', '8640000'); -- 单位:秒
注意事项:
以上是Hologres中常见的修改操作及注意事项。如果您有更具体的需求或遇到问题,请提供详细信息以便进一步协助!
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975