华为云用户手册

  • locate(substring,string[,position]) 描述:从字符串string的position(缺省时为1)所指的位置开始查找并返回第一次出现子串substring位置的值。以字符为计算单位。当string中不存在substring时,返回0。 返回值类型:integer 示例: 1 2 3 4 5 SELECT locate('ball','football'); locate -------- 5 (1 row) 1 2 3 4 5 SELECT locate('er','soccerplayer','6'); locate -------- 11 (1 row)
  • regexp_replace(string, pattern, replacement [,flags ]) 描述:替换匹配POSIX正则表达式的子字符串。 如果没有匹配pattern,那么返回不加修改的string串。 如果有匹配,则返回的string串里面的匹配子串将被replacement串替换掉。 replacement串可以包含\n, 其中\n是1到9, 表明string串里匹配模式里第n个圆括号子表达式的子串应该被插入, 并且它可以包含\&表示应该插入匹配整个模式的子串。 可选的flags参数包含零个或多个改变函数行为的单字母标记,见下表。 表1 flags参数的可选项 选项 描述 g 表示替换每一个匹配的子字符串而不仅仅是第一个(默认仅替换第一个匹配的子字符串) B 默认情况下使用Henry Spencer正则库及其正则语法。指定B选项后,表示优先选用boost regex正则库及其正则语法。 以下两种情况在指定了B选项时,也会自动转换为选择Henry Spencer正则库及其正则语法: flags同时指定了p、q、w、x中的任意个字符。 string或pattern参数中含有多字节字符。 b 表示按照BRE(POSIX Basic Regular Expression)匹配模式的规则进行匹配。 c 大小写敏感匹配 e 表示按照ERE(POSIX Extended Regular Expression)匹配模式的规则进行匹配。当b和e都未指定时,如果选用的是Henry Spencer正则库,则按照ARE(Advanced Regular Expression,类似于Perl Regular Expression)匹配模式的规则进行匹配;如果选用的是boost regex正则库,则按照Perl Regular Expression匹配模式的规则进行匹配。 i 大小写不敏感匹配 m 换行敏感匹配,与选项n同义。 n 换行敏感匹配。此选项生效时,换行符影响元字符(.、^、$和[^)的匹配。 p 部分换行敏感匹配,此选项生效时,换行符影响元字符(.和[^)的匹配。部分是相对选项n而言。 q 重置正则表达式为加双引号的文本字符串,所有都是普通字符。 s 非换行敏感匹配。 t 紧凑语法(缺省)。该选项生效时,所有字符都很重要。 w 反部分换行敏感匹配,此选项生效时,换行符影响元字符(^和$)的匹配。部分是相对选项n而言。 x 扩展语法。与紧凑语法相对,在扩展的语法中,正则表达式中的空白字符被忽略。空白字符包括空格、水平制表符、新行、和任何属于space字符表的字符。 返回值类型:varchar 示例: 1 2 3 4 5 6 7 8 9 10 SELECT regexp_replace('Thomas', '.[mN]a.', 'M'); regexp_replace ---------------- ThM (1 row) SELECT regexp_replace('foobarbaz','b(..)', E'X\\1Y', 'g') AS RESULT; result ------------- fooXarYXazY (1 row)
  • replace(string varchar, search_string varchar, replacement_string varchar) 描述:把字符串string中所有子字符串search_string替换成子字符串replacement_string。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT replace('jack and jue','j','bl'); replace ---------------- black and blue (1 row)
  • lpad(string varchar, length int[, repeat_string varchar]) 描述:在string的左侧添上一系列的repeat_string(缺省为空白)来组成一个总长度为n的新字符串。 如果string本身的长度比指定的长度length长,则本函数将把string截断并把前面长度为length的字符串内容返回。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT lpad('PAGE 1',15,'*.'); lpad ----------------- *.*.*.*.*PAGE 1 (1 row) 1 2 3 4 5 SELECT lpad('hello world',5,'abcd'); lpad ------- hello (1 row)
  • concat(str1,str2) 描述:将字符串str1和str2连接并返回。 ORA和TD兼容模式下,返回结果为所有非NULL字符串的连接。 MySQL兼容模式下,入参中存在NULL时,返回结果为NULL。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT concat('Hello', ' World!'); concat -------------- Hello World! (1 row)
  • regexp_substr(source_char, pattern) 描述:正则表达式的抽取子串函数。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT regexp_substr('500 Hello World, Redwood Shores, CA', ',[^,]+,') "REGEXPR_SUBSTR"; REGEXPR_SUBSTR ------------------- , Redwood Shores, (1 row)
  • translate(string text, from text, to text) 描述:把在string中包含的任何匹配from中字符的字符转化为对应的在to中的字符。如果from比to长,删掉在from中出现的额外的字符。 返回值类型:text 示例: 1 2 3 4 5 SELECT translate('12345', '143', 'ax'); translate ----------- a2x5 (1 row)
  • rpad(string varchar, length int [, fill varchar]) 描述:使用填充字符fill(缺省时为空白),把string填充到length长度。如果string已经比length长则将其从尾部截断。 length参数在GaussDB(DWS)中表示字符长度。一个汉字长度计算为一个字符。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT rpad('hi',5,'xyza'); rpad ------- hixyz (1 row) 1 2 3 4 5 SELECT rpad('hi',5,'abcdefg'); rpad ------- hiabc (1 row)
  • instr(string,substring[,position,occurrence]) 描述:从字符串string的position(缺省时为1)所指的位置开始查找并返回第occurrence(缺省时为1)次出现子串substring的位置的值。 当position为0时,返回0。 当position为负数时,从字符串倒数第n个字符往前逆向搜索。n为position的绝对值。 本函数以字符为计算单位,如一个汉字为一个字符。 返回值类型:integer 示例: 1 2 3 4 5 SELECT instr('corporate floor','or', 3); instr ------- 5 (1 row) 1 2 3 4 5 SELECT instr('corporate floor','or',-3,2); instr ------- 2 (1 row)
  • substr(string,from,count) 描述: 从参数string中抽取子字符串。 from表示抽取的起始位置。 count表示抽取的子字符串长度。 from为0时,按1处理。 from为正数时,抽取从from开始的count个字符。 from为负数时,抽取从倒数第n个开始的count个字符,n为from的绝对值。 count小于1时,返回null。 返回值类型:varchar 示例: from为正数时: 1 2 3 4 5 SELECT substr('ABCDEF',2,2); substr -------- BC (1 row) from为负数时: 1 2 3 4 5 SELECT substr('ABCDEF',-3,2); substr -------- DE (1 row)
  • substr(string,from) 描述: 从参数string中抽取子字符串。 from表示抽取的起始位置。 from为0时,按1处理。 from为正数时,抽取从from到末尾的所有字符。 from为负数时,抽取字符串的后n个字符,n为from的绝对值。 返回值类型:varchar 示例: from为正数时: 1 2 3 4 5 SELECT substr('ABCDEF',2); substr -------- BCDEF (1 row) from为负数时: 1 2 3 4 5 SELECT substr('ABCDEF',-2); substr -------- EF (1 row)
  • trim([leading |trailing |both] [characters] from string) 描述:从字符串string的开头、结尾或两边删除只包含characters中字符(缺省是一个空白)的最长的字符串。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT trim(BOTH 'x' FROM 'xTomxx'); btrim ------- Tom (1 row) 1 2 3 4 5 SELECT trim(LEADING 'x' FROM 'xTomxx'); ltrim ------- Tomxx (1 row) 1 2 3 4 5 SELECT trim(TRAILING 'x' FROM 'xTomxx'); rtrim ------- xTom (1 row)
  • replace(string text, from text, to text) 描述:把字符串string里出现地所有子字符串from的内容替换成子字符串to的内容。 返回值类型:text 示例: 1 2 3 4 5 SELECT replace('abcdefabcdef', 'cd', 'XXX'); replace ---------------- abXXXefabXXXef (1 row)
  • right(str text, n int) 描述:返回字符串中的后n个字符。 ORA和TD兼容模式下,当n是负数时,返回除前|n|个字符以外的所有字符。 MySQL兼容模式下,当n是负数时,返回空串。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT right('abcde', 2); right ------- de (1 row) SELECT right('abcde', -2); right ------- cde (1 row)
  • substring(string from pattern) 描述:截取匹配POSIX正则表达式的子字符串。如果没有匹配它返回空值,否则返回文本中匹配模式的那部分。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT substring('Thomas' from '...$'); substring ----------- mas (1 row) SELECT substring('foobar' from 'o(.)b'); result -------- o (1 row) SELECT substring('foobar' from '(o(.)b)'); result -------- oob (1 row) 如果POSIX正则表达式模式包含任何圆括号,那么将返回匹配第一对子表达式(对应第一个左圆括号的) 的文本。如果想在表达式里使用圆括号而又不想导致这个例外,那么可以在整个表达式外边加上一对圆括号。
  • regexp_split_to_array(string text, pattern text [, flags text ]) 描述:用POSIX正则表达式作为分隔符,分隔string。和regexp_split_to_table相同,不过regexp_split_to_array会把它的结果以一个text数组的形式返回。 返回值类型:text[] 示例: 1 2 3 4 5 SELECT regexp_split_to_array('hello world', E'\\s+'); regexp_split_to_array ----------------------- {hello,world} (1 row)
  • substring(string from pattern for escape) 描述:截取匹配SQL正则表达式的子字符串。声明的模式必须匹配整个数据串,否则函数失败并返回空值。为了标识在成功的时候应该返回的模式部分,模式必须包含逃逸字符的两次出现,并且后面要跟上双引号(")。匹配这两个标记之间的模式的文本将被返回。 返回值类型:text 示例: 1 2 3 4 5 SELECT substring('Thomas' from '%#"o_a#"_' for '#'); substring ----------- oma (1 row)
  • split_part(string text, delimiter text, field int) 描述:根据delimiter分隔string返回生成的第field个子字符串(从出现第一个delimiter的text为基础)。 返回值类型:text 示例: 1 2 3 4 5 SELECT split_part('abc~@~def~@~ghi', '~@~', 2); split_part ------------ def (1 row)
  • regexp_matches(string text, pattern text [, flags text]) 描述:返回string中所有匹配POSIX正则表达式的子字符串。如果pattern不匹配,该函数不返回行。如果模式不包含圆括号子表达式,则每一个被返回的行都是一个单一元素的文本数组,其中包括匹配整个模式的子串。如果模式包含圆括号子表达式,该函数返回一个文本数组,它的第n个元素是匹配模式的第n个圆括号子表达式的子串。 flags参数为可选参数,包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 如果提供了最后一个参数,但参数值是空字符串(''),且数据库SQL兼容模式设置为ORA的情况下,会导致返回结果为空集。这是因为ORA兼容模式将''作为NULL处理,避免此类行为的方式有如下几种: 将数据库SQL兼容模式改为TD; 不提供最后一个参数,或最后一个参数不为空字符串。 返回值类型:setof text[] 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SELECT regexp_matches('foobarbequebaz', '(bar)(beque)'); regexp_matches ---------------- {bar,beque} (1 row) SELECT regexp_matches('foobarbequebaz', 'barbeque'); regexp_matches ---------------- {barbeque} (1 row) SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); result -------------- {bar,beque} {bazil,barf} (2 rows)
  • regexp_split_to_table(string text, pattern text [, flags text]) 描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果有至少有一个匹配,对每一个匹配它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。 flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 返回值类型:setof text 示例: 1 2 3 4 5 6 SELECT regexp_split_to_table('hello world', E'\\s+'); regexp_split_to_table ----------------------- hello world (2 rows)
  • quote_literal(value anyelement) 描述:将给定的值强制转换为text,加上引号作为文本。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_literal(42.5); quote_literal --------------- '42.5' (1 row) 如果出现如下写法,定值将进行转义。 1 2 3 4 5 SELECT quote_literal(E'O\'42.5'); quote_literal --------------- '0''42.5' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 SELECT quote_literal('O\42.5'); quote_literal --------------- E'O\\42.5' (1 row)
  • quote_nullable(value anyelement) 描述:将给定的参数值转化为text,加上引号作为文本。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_nullable(42.5); quote_nullable ---------------- '42.5' (1 row) 如果出现如下写法,定值将进行转义。 1 2 3 4 5 SELECT quote_nullable(E'O\'42.5'); quote_nullable ---------------- 'O''42.5' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 SELECT quote_nullable('O\42.5'); quote_nullable ---------------- E'O\\42.5' (1 row) 如果参数为NULL,返回NULL。 1 2 3 4 5 SELECT quote_nullable(NULL); quote_nullable ---------------- NULL (1 row)
  • quote_literal(string text) 描述:返回适用于在SQL语句里当作文本使用的形式(使用适当的引号进行界定)。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_literal('hello'); quote_literal --------------- 'hello' (1 row) 如果出现如下写法,text文本将进行转义。 1 2 3 4 5 SELECT quote_literal(E'O\'hello'); quote_literal --------------- 'O''hello' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 SELECT quote_literal('O\hello'); quote_literal --------------- E'O\\hello' (1 row) 如果参数为NULL,返回空。如果参数可能为null,通常使用函数quote_nullable更适用。 1 2 3 4 5 SELECT quote_literal(NULL); quote_literal --------------- (1 row)
  • quote_nullable(string text) 描述:返回适用于在SQL语句里当作字符串使用的形式(使用适当的引号进行界定)。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_nullable('hello'); quote_nullable ---------------- 'hello' (1 row) 如果出现如下写法,text文本将进行转义。 1 2 3 4 5 SELECT quote_nullable(E'O\'hello'); quote_nullable ---------------- 'O''hello' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 SELECT quote_nullable('O\hello'); quote_nullable ---------------- E'O\\hello' (1 row) 如果参数为NULL,返回NULL。 1 2 3 4 5 SELECT quote_nullable(NULL); quote_nullable ---------------- NULL (1 row)
  • quote_ident(string text) 描述:返回适用于SQL语句的标识符形式(使用适当的引号进行界定)。只有在必要的时候才会添加引号(字符串包含非标识符字符或者会转换大小写的字符)。返回值中嵌入的引号都写了两次。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_ident('hello world'); quote_ident -------------- "hello world" (1 row)
  • lengthb(text/bpchar) 描述:获取指定字符串的字节数。 返回值类型:integer 示例: 1 2 3 4 5 SELECT lengthb('hello'); lengthb --------- 5 (1 row) 若字符串中存在换行符,如字符串由一个换行符和一个空格组成,在GaussDB(DWS)中LENGTH和LENGTHB的值为2。 对于CHAR(n) 类型,GaussDB(DWS)中n是指字符个数。因此,对于多字节编码的字符集, LENGTHB函数返回的长度可能大于n。
  • overlay(string placing string FROM int [for int]) 描述:替换子字符串。FROM int表示从第一个string的第几个字符开始替换,for int表示替换第一个string的字符数目。 返回值类型:text 示例: 1 2 3 4 5 SELECT overlay('hello' placing 'world' from 2 for 3 ); overlay --------- hworldo (1 row)
  • position(substring in string) 描述:指定子字符串的位置。若string中没有substring,则返回0。 返回值类型:integer 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT position('ing' in 'string'); position ---------- 4 (1 row) SELECT position('ing' in 'strin'); position ---------- 0 (1 row)
  • 参数说明 IF NOT EXISTS 如果已经存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表关系已存在。 partition_table_name 分区表的名称。 取值范围:字符串,要符合标识符的命名规范。 column_name 新表中要创建的字段名。 取值范围:字符串,要符合标识符的命名规范。 data_type 字段的数据类型。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。 可排列的数据类型有char、varchar、text、nchar、nvarchar。 CONSTRAINT constraint_name 列约束或表约束的名字。可选的约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。 定义约束有两种方法: 列约束:作为一个列定义的一部分,仅影响该列。 表约束:不和某个列绑在一起,可以作用于多个列。 LIKE source_table [ like_option ... ] LIKE子句声明一个表,新表自动从这个表里面继承所有字段名及其数据类型和非空约束。 和INHERITS不同,新表与原来的表之间在创建动作完毕之后是完全无关的。在源表做的任何修改都不会传播到新表中,并且也不可能在扫描源表的时候包含新表的数据。 字段缺省表达式只有在声明了INCLUDING DEFAULTS之后才会包含进来。缺省是不包含缺省表达式的,即新表中所有字段的缺省值都是NULL。 非空约束将总是复制到新表中,CHECK约束则仅在指定了INCLUDING CONSTRAINTS的时候才复制,而其他类型的约束则永远也不会被复制。此规则同时适用于表约束和列约束。 和INHERITS不同,被复制的列和约束并不使用相同的名字进行融合。如果明确的指定了相同的名字或者在另外一个LIKE子句中,将会报错。 如果指定了INCLUDING INDEXES,则源表上的索引也将在新表上创建,默认不建立索引。 如果指定了INCLUDING STORAGE,则拷贝列的STORAGE设置也将被拷贝,默认情况下不包含STORAGE设置。 如果指定了INCLUDING COMMENTS,则源表列、约束和索引的注释也会被拷贝过来。默认情况下,不拷贝源表的注释。 如果指定了INCLUDING RELOPTIONS,则源表的存储参数(即源表的WITH子句)也将拷贝至新表。默认情况下,不拷贝源表的存储参数。 如果指定了INCLUDING DISTRIBUTION,则新表将拷贝源表的分布信息,包括分布类型和分布列,同时新表将不能再使用DISTRIBUTE BY子句。默认情况下,不拷贝源表的分布信息。 INCLUDING ALL是INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING STORAGE INCLUDING COMMENTS INCLUDING RELOPTIONS INCLUDING DISTRIBUTION的简写形式。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。参数的详细描述如下所示: FILLFACTOR 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。100(完全填充)是默认值。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是优良选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数对于列存表没有意义。 取值范围:10~100 ORIENTATION 决定了表的数据的存储方式。 取值范围: COLUMN:表的数据将以列式存储。 ROW(缺省值):表的数据将以行式存储。 ORC:表的数据将以ORC格式存储(仅HDFS表)。 orientation不支持修改。 COMPRESSION 列存表的有效值为YES/NO和LOW/MIDDLE/HIGH,默认值为LOW。 暂不支持行存表压缩功能。 MAX_BATCHROW 指定了在数据加载过程中一个存储单元可以容纳记录的最大数目。该参数只对列存表有效。 取值范围:10000~60000 默认值:60000 PARTIAL_CLUSTER_ROWS 指定了在数据加载过程中进行将局部聚簇存储的记录数目。该参数只对列存表有效。 取值范围:其有效值为大于等于10万。此值是MAX_BATCHROW的倍数。 enable_delta 指定了在列存表是否开启delta表。该参数只对列存表有效。 默认值:off DELTAROW_THRESHOLD 预留参数。该参数只对列存表有效。 取值范围:0~60000,默认值为6000 COLD_TABLESPACE 指定冷分区保存的obs tablespace,仅冷热表支持。该参数仅支持列存分区表,且该参数不支持修改,需与storage_policy同时使用。在指定STORAGE_POLICY时,可不设置该参数,默认为default_obs_tbs。 取值范围:有效的OBS TABLESPACE名。 STORAGE_POLICY 指定冷热分区切换规则,仅冷热表支持。该参数需与cold_tablespace同时使用。 取值范围:"冷热切换策略名称:冷热切换的阈值",目前冷热切换的策略名称只支持LMT和HPN,LMT指按分区的最后更新时间切换,HPN指保留热分区的个数切换。 LMT:[day]:表示切换[day]时间前修改的热分区数据为冷分区,将该数据迁至OBS表空间中。其中[day]为整型,范围[0, 36500],单位为天。 HPN: [hot_partition_num]:表示保留[hot_partition_num]个有数据的分区为热分区。保留规则为查找出有数据的分区的最大的Sequence ID,大于Sequence ID的无数据分区为热分区,并按这个Sequence ID从大到小保留[hot_partition_num]个分区为热分区;分区Sequence ID小于保留的最小热分区的Sequence ID的分区为冷分区,在冷热切换时,需要将数据迁移至OBS表空间中。其中[hot_partition_num]为整型,范围为[0,1600]。 实时数仓(单机部署)暂不支持冷热分区切换功能。 对于LIST分区,建议谨慎使用HPN策略,否则可能出现新增分区不是热分区的情况。 PERIOD 指定分区管理中自动创建分区的周期,并开启自动创建分区功能。仅支持行存、列存范围分区表、时序表以及冷热表;分区键唯一并且类型仅支持TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE;不支持存在maxvalue分区;(nowTime - boundaryTime) / PERIOD需要小于分区个数上限,其中nowTime为当前时间,boundaryTime为现有分区中最早的分区边界时间;不支持在小型机、加速集群、单机集群上使用。 取值范围:1 hour ~ 100 years 在兼容Teradata或MySQL的数据库中,分区键类型为DATE时,PERIOD不能小于1 day。 建分区表时,如果设置了PERIOD,则可以只指定分区键不指定分区。建表时将创建两个默认分区,这两个默认分区的分区时间范围均为PERIOD。其中,第一个默认分区的边界时间是大于当前时间的第一个整时/整天/整周/整月/整年的时间,具体选择哪种整点时间取决于PERIOD的最大单位;第二个默认分区的边界时间是第一个分区边界时间加PERIOD。假设当前时间是2022-02-17 16:32:45,各种情况的第一个默认分区的分区边界选择如表1。 有关默认分区的更多内容,请参见示例8。 实时数仓(单机部署)暂不支持自动创建分区功能。 表1 分区边界选择 period period最大单位 第一个默认分区的分区边界 1hour Hour 2022-02-17 17:00:00 1day Day 2022-02-18 00:00:00 1month Month 2022-03-01 00:00:00 13month Year 2023-01-01 00:00:00 TTL 指定分区管理中分区过期的时间,并开启自动删除分区功能。不支持单独设置,必须要提前或同时设置PERIOD,并且要大于或等于PERIOD。 取值范围:1 hour ~ 100 years PERIOD指明按照时间划分的周期对数据进行分区,分区的大小可能对查询性能有影响,同时每隔周期时间会创建一个新的周期大小的分区,具体做法是以period周期,自动调用proc_add_partition (relname regclass, boundaries_interval interval)函数。TTL(Time To Live)指明该表的数据保存周期,超过TTL周期的数据将被清理,具体做法是以period周期,自动调用proc_drop_partition (relname regclass, older_than interval)函数。PERIOD和TTL的值为Interval类型,例如:“1 hour”, “1 day”, “1 week”, “1 month” ,“1 year”, “1 month 2 day 3 hour”。 实时数仓(单机部署)暂不支持自动删除分区功能。 COLVERSION 指定列存存储格式的版本,支持不同存储格式版本之间的切换,但分区表不支持存储格式版本切换。 取值范围: 1.0:列存表的每列以一个单独的文件进行存储,文件名以relfilenode.C1.0、relfilenode.C2.0、relfilenode.C3.0等命名。 2.0:列存表的每列合并存储在一个文件中,文件名以relfilenode.C1.0命名 默认值:2.0 需注意,OBS冷热表仅支持colversion 2.0格式。 在建列存表时选择COLVERSION=2.0,相比于1.0存储格式,在以下场景中性能有明显提升: 创建列存宽表场景下,建表时间显著减少。 roach备份数据场景下,备份时间显著减少。 build、catch up耗时显著减少。 占用磁盘空间大小显著减少。 SKIP_FPI_HINT 顺序扫描过程中,若需要写FPW(full page writes)日志时,该参数控制是否跳过设置HintBits操作。 默认值:false 设置SKIP_FPI_HINT=true时,在对某表执行checkpoint操作后,若对该表进行顺序扫描,将不再产生Xlog。适用于查询次数较少的中间表,有效减少Xlog的大小,提升查询性能。 COMPRESS / NOCOMPRESS 创建一个新表时,需要在创建表语句中指定关键字COMPRESS,这样,当对该表进行批量插入时就会触发压缩特性。该特性会在页范围内扫描所有元组数据,生成字典、压缩元组数据并进行存储。指定关键字NOCOMPRESS则不对表进行压缩。 缺省值为NOCOMPRESS,即不对元组数据进行压缩。 DISTRIBUTE BY 指定表如何在节点之间分布或者复制。 取值范围: REPLICATION:表的每一行存在所有数据节点( DN )中,即每个数据节点都有完整的表数据。 ROUNDROBIN:表的每一行被轮番地发送给各个DN,因此数据会被均匀地分布在各个DN中。(ROUNDROBIN仅8.1.2及以上版本支持) HASH (column_name ) :对指定的列进行Hash,通过映射,把数据分布到指定DN。 当指定DISTRIBUTE BY HASH (column_name)参数时,创建主键和唯一索引必须包含“ column_name”列。 当被参照表指定DISTRIBUTE BY HASH (column_name)参数时,参照表的外键必须包含“ column_name”列。 默认值:由GUC参数default_distribution_mode控制。 当default_distribution_mode=roundrobin时,DISTRIBUTE BY的默认值按如下规则选取: 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。 若建表时不包含主键/唯一约束,则选取ROUNDROBIN分布。 当default_distribution_mode=hash时,DISTRIBUTE BY的默认值按如下规则选取: 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。 若建表时不包含主键/唯一约束,但存在数据类型支持作分布列的列,则选取HASH分布,分布列为第一个数据类型支持作分布列的列。 若建表时不包含主键/唯一约束,也不存在数据类型支持作分布列的列,选取ROUNDROBIN分布。 以下数据类型支持作为分布列: INTEGER TYPES:TINYINT,SMALLINT,INT,BIGINT,NUMERIC/DECIMAL CHARACTER TYPES:CHAR,BPCHAR,VARCHAR,VARCHAR2,NVARCHAR2,TEXT DATE/TIME TYPES:DATE,TIME,TIMETZ,TIMESTAMP,TIMESTAMPTZ,INTERVAL,SMALLDATETIME TO { GROUP groupname | NODE ( nodename [, ... ] ) } TO GROUP指定创建表所在的Node Group,目前不支持hdfs表使用。TO NODE主要供内部扩容工具使用,一般用户不应该使用。 PARTITION BY RANGE(partition_key) 指定范围分区策略语法,partition_key为分区键的名称。 (1)对于从句是VALUES LESS THAN的语法格式: 对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持4列,且分区键只能是列名。当存在多个分区键时,一个列名只能出现一次,且相邻的两个分区键要使用逗号隔开。 该情形下,分区键支持的数据类型为:SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、CHARACTER VARYING(n)、VARCHAR(n)、CHARACTER(n)、CHAR(n)、CHARACTER、CHAR、TEXT、NVARCHAR2、NAME、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。 (2)对于从句是START END的语法格式: 对于从句是START END的语法格式,范围分区策略的分区键仅支持1列。 该情形下,分区键支持的数据类型为:SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。 PARTITION BY LIST (partition_key,[...]) 指定列表分区策略语法,partition_key为分区键的名称。 列表分区策略的分区键最多支持4列。 列表分区策略分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、NUMERIC/DECIMAL、TEXT、NVARCHAR2、VARCHAR(n)、CHAR、BPCHAR、TIME、TIME WITH TIMEZONE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、DATE、INTERVAL、SMALLDATETIME partition_less_than_item 1 PARTITION partition_name VALUES LESS THAN ( { partition_value | DEFAULT } ) 范围分区策略下分区(简称为范围分区)的定义语法。partition_name为范围分区的名称。partition_value为范围分区的上边界,取值依赖于partition_key的类型。MAXVALUE表示分区的上边界,它通常用于设置最后一个范围分区的上边界。 每个分区都需要指定一个上边界。 分区上边界的类型应当和分区键的类型一致。 分区列表是按照分区上边界升序排列的,值较小的分区位于值较大的分区之前。 如果分区键由多个字段组成,比较大小时,先比较第一个字段,当第一个字段相等时比较第二个字段,以此类推。 partition_start_end_item 1 2 3 4 PARTITION partition_name {START (partition_value) END (partition_value) EVERY (interval_value)} | {START (partition_value) END (partition_value|MAXVALUE)} | {START(partition_value)} | {END (partition_value| MAXVALUE)} 使用起始值以及间隔值定义范围分区的语法,各参数含义如下: partition_name:范围分区的名称或名称前缀,除以下情形外(假定其中的partition_name是p1),均为分区的名称。 若该定义是START+END+EVERY从句,则语义上定义的分区的名称依次为p1_1, p1_2, ...。例如对于定义“PARTITION p1 START(1) END(4) EVERY(1)”,则生成的分区是:[1, 2), [2, 3) 和 [3, 4),名称依次为p1_1, p1_2和p1_3,即此处的p1是名称前缀。 若该定义是第一个分区定义,且该定义有START值,则范围(MINVALUE, START)将自动作为第一个实际分区,其名称为p1_0,然后该定义语义描述的分区名称依次为p1_1, p1_2, ...。例如对于完整定义“PARTITION p1 START(1), PARTITION p2 START(2)”,则生成的分区是:(MINVALUE, 1), [1, 2) 和 [2, MAXVALUE),其名称依次为p1_0, p1_1和p2,即此处p1是名称前缀,p2是分区名称。这里MINVALUE表示最小值。 partition_value:范围分区的端点值(起始或终点),取值依赖于partition_key的类型,不可是MAXVALUE。 interval_value:对[START,END) 表示的范围进行切分,interval_value是指定切分后每个分区的宽度,不可是MAXVALUE;如果(END-START)值不能整除以EVERY值,则仅最后一个分区的宽度小于EVERY值。 MAXVALUE:表示最大值,它通常用于设置最后一个范围分区的上边界。 在创建分区表若第一个分区定义含START值,则范围(MINVALUE,START)将自动作为实际的第一个分区。 START END语法需要遵循以下限制: 每个partition_start_end_item中的START值(如果有的话,下同)必须小于其END值; 相邻的两个partition_start_end_item,第一个的END值必须等于第二个的START值; 每个partition_start_end_item中的EVERY值必须是正向递增的,且必须小于(END-START)值; 每个分区包含起始值,不包含终点值,即形如:[起始值,终点值),起始值是MINVALUE时则不包含; 一个partition_start_end_item创建的每个分区所属的TABLESPACE一样; partition_name作为分区名称前缀时,其长度不要超过57字节,超过时自动截断; 在创建、修改分区表时请注意分区表的分区总数不可超过最大限制(32767); 在创建分区表时START END与LESS THAN语法不可混合使用。 即使创建分区表时使用START END语法,备份(gs_dump)出的SQL语句也是VALUES LESS THAN语法格式。 list_partition_item 1 PARTITION partition_name VALUES ( { (partition_value) [, ... ] | DEFAULT } ) 列表分区策略下分区(简称为列表分区)的定义语法。partition_name为分区的名称。partition_value为列表分区边界的一个枚举值,取值依赖于partition_key的类型。DEFAULT表示默认分区的边界。 对于列表分区表,存在以下约定和约束: 边界值为DEFAULT的分区,称之为默认分区。 每个列表分区表只能有一个DEFAULT分区。 分区表的所有分区数不超过32767个,所有分区的边界值个数不大于32767个。 不管分区键的个数,DEFAULT分区的边界只能是一个DEFAULT。 如果分区键由多个字段组成,每个partition_value需要包含所有分区键的值,当分区键只有一列时,partition_value两侧的括号可以省略,参见示例4:创建列表分区。 如果分区键由多个字段组成,比较大小时,先逐个字段比较大小,任何一个字段值不一样即可认为是不一样的键值。 边界中不同的partition_value值不能重复。 数据插入时,如果数据的分区键值能匹配任何非DEFAULT分区的边界,那么数据会写入对应的分区;否则数据会写入DEFAULT分区。 { ENABLE | DISABLE } ROW MOVEMENT 行迁移开关。 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 取值范围: ENABLE:行迁移开关打开。 DISABLE(缺省值):行迁移开关关闭。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE [ IF NOT EXISTS ] partition_table_name ( [ { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option [...] ] }[, ... ] ] ) [ WITH ( {storage_parameter = value} [, ... ] ) ] [ COMPRESS | NOCOMPRESS ] [ DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [ HASH ] ( column_name ) } } ] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ] PARTITION BY { {VALUES (partition_key)} | {RANGE (partition_key) ( partition_less_than_item [, ... ] )} | {RANGE (partition_key) ( partition_start_end_item [, ... ] )} | {LIST (partition_key) (list_partition_item [, ...])} } [ { ENABLE | DISABLE } ROW MOVEMENT ]; 列约束column_constraint: 1 2 3 4 5 6 7 8 [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | UNIQUE [ NULLS [NOT] DISTINCT | NULLS IGNORE ] index_parameters | PRIMARY KEY index_parameters } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 表约束table_constraint: 1 2 3 4 5 [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [NOT] DISTINCT | NULLS IGNORE ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters} [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] like选项like_option: 1 { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | RELOPTIONS | DISTRIBUTION | ALL } 索引存储参数index_parameters: 1 [ WITH ( {storage_parameter = value} [, ... ] ) ]
共100000条