openGauss魔改PG?它能兼容Oracle的数据库表吗?( 四 )


LINE 6: PARTITION BY LIST (state)
3、散列分区
散列(HASH)分区通过在分区键值上执行一个散列函数来说决定数据的物理位置 。 散列分区把记录分布在比范围分区更多的分区上 , 这减少了I/O争用的可能性 。 openGauss当前版本无法支持散列(HASH)分区 。
postgres=# CREATE TABLE t_hash_partition
(deptno NUMBER, deptname VARCHAR(32))
PARTITION BY HASH(deptno)
(PARTITION p1 TABLESPACE pg_default, PARTITION p2 TABLESPACE pg_default,
PARTITION p3 TABLESPACE pg_default, PARTITION p4 TABLESPACE pg_default);
ERROR: syntax error at or near "HASH"
LINE 2: PARTITION BY HASH(deptno)
4、复合分区
对于分区表来说 , 数据倾斜的问题通常是最头疼的 。 为了解决这个问题 , Oracle提供了复合分区的功能 。 复合分区是先使用范围分区 , 然后在每个分区内再使用散列分区/列表分区的一种分区方法 。 不过目前版本openGauss无法支持复合分区 。
postgres=# CREATE TABLE t_sub_partition
( dept_no number, country varchar2(20), sale_date date)
PARTITION BY RANGE(sale_date)
SUBPARTITION BY LIST(country)
( PARTITION q1_2012 VALUES LESS THAN('2012-Apr-01')
( SUBPARTITION q1_europe VALUES ('FRANCE', 'ITALY'),
SUBPARTITION q1_asia VALUES ('INDIA', 'PAKISTAN'),
SUBPARTITION q1_americas VALUES ('US', 'CANADA') ),
PARTITION q2_2012 VALUES LESS THAN('2012-Jul-01')
( SUBPARTITION q2_europe VALUES ('FRANCE', 'ITALY'),
SUBPARTITION q2_asia VALUES ('INDIA', 'PAKISTAN'),
SUBPARTITION q2_americas VALUES ('US', 'CANADA') ),
PARTITION q3_2012 VALUES LESS THAN('2012-Oct-01')
( SUBPARTITION q3_europe VALUES ('FRANCE', 'ITALY'),
SUBPARTITION q3_asia VALUES ('INDIA', 'PAKISTAN'),
SUBPARTITION q3_americas VALUES ('US', 'CANADA') ),
PARTITION q4_2012 VALUES LESS THAN('2013-Jan-01')
( SUBPARTITION q4_europe VALUES ('FRANCE', 'ITALY'),
SUBPARTITION q4_asia VALUES ('INDIA', 'PAKISTAN'),
SUBPARTITION q4_americas VALUES ('US', 'CANADA') ) );
ERROR: syntax error at or near "SUBPARTITION"
LINE 3: SUBPARTITION BY LIST(country)
七、嵌套表
嵌套表类似C语言中的结构体 , 可以把一个表结构定义为一个类型 , 在创建其他表的时候 , 可以将字段类型指向这个自定义类型 。 openGauss中可以通过create type进行嵌套表定义 。
postgres=# CREATE TYPE t_type AS (f1 int, f2 text);
CREATE TYPE
postgres=# CREATE TABLE t_compfoo(a int, b t_type);
CREATE TABLE
总结
总体而言 , openGauss兼容Oracle常用表类型 , 索引组织表需要用集群索引方式进行改造 。 对于少数非常用数据类型 , 需要进行少量代码改造 , 可采取下列替代方案进行替换 。
表类型
是否兼容
备注
堆表
全部兼容
临时表
全部兼容
表压缩
部分兼容
支持普通压缩模式 , 有DELTA、PREFIX、DICTIONARY、NUMSTR四种压缩算法供选择
索引组织表
不兼容
不支持
簇表
不兼容
不支持 , 部分情况可以考虑用partial cluster key替代
分区表
部分兼容
只支持范围分区
嵌套表
功能兼容 , 但语法有部分改变
相关阅读:

  • openGauss可替代Oracle吗?从字段类型说起……
2020 DAMS中国数据智能管理峰会即将于10月30日在上海举办 , 部分精彩议题先睹为快:


推荐阅读