GBase8a學(xué)習(xí)總結(jié)_第1頁
GBase8a學(xué)習(xí)總結(jié)_第2頁
GBase8a學(xué)習(xí)總結(jié)_第3頁
GBase8a學(xué)習(xí)總結(jié)_第4頁
GBase8a學(xué)習(xí)總結(jié)_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、技術(shù)產(chǎn)品規(guī)范 /項(xiàng)目名稱朗新云商項(xiàng)目開發(fā)部2017 年 10 月概述1.1項(xiàng)目介紹.1.1.1 三級(jí)修改履歷版本號(hào)修改編號(hào)更改簡(jiǎn)要描述更改人批準(zhǔn)人1 GBase數(shù)據(jù)類型及SQL語句1.1 GBase 8a數(shù)據(jù)類型GBase 8a MPP Cluster支持SQL92中定義的絕大多數(shù)數(shù)據(jù)類型,同時(shí)也支持SQL99和SQL2000中定義的數(shù)據(jù)類型。GBase 8a MPP Cluster支持的數(shù)據(jù)類型,如下表所示:GBase 8a MPP Cluster 的數(shù)據(jù)類型數(shù)值型TINYINTINTBIGINTFLOATDOUBLEDECIMAL字符型CHARVARCHARTEXT二進(jìn)制類型BLOB日期和

2、時(shí)間型DATEDATETIMETIMETIMESTA MP1.1.1數(shù)值類型GBase 8a MPP Cluster支持的數(shù)值類型,如下表所示:類型名稱最小值最大值占用 字節(jié)TINYINT-1271271SMALLINT-32767327672INT(INTEGER)4BIGINT8FLOAT-3.40E+383.40E+384DOUBLE3088DECIMAL(M,D )-(1E+M -1)/(1E+D)(1E+M -1)/(1E+D)動(dòng)態(tài) 計(jì)算1.1.2 字符類型GBase 8a MPP Cluster目前支持三種字符類型,如下表所示:類型名稱最大長(zhǎng)度(字符)備注CHAR255不足指定長(zhǎng)度

3、,右邊空格補(bǔ)充VARCHAR10922不足指定長(zhǎng)度,不會(huì)補(bǔ) 充1.1.3 二進(jìn)制數(shù)據(jù)類型GBase 8a MPP Cluster目前支持以下二進(jìn)制數(shù)據(jù)類型,如下表所示:類型名稱最大長(zhǎng)度(字節(jié))BLOB32767使用BLOB數(shù)據(jù)類型,有如下約束:BLOB列支持32KB的存儲(chǔ)容量。創(chuàng)建表時(shí),BLOB列不可以有DEFAULT值。查詢語句中,BLOB列不支持過濾條件。查詢語句中,BLOB列不支持OLAP函數(shù)。1.1.4日期和時(shí)間類型類型名稱最小值最大值格式DATE0001-01-019999-12-31YYYY-MM-ddDATETIME0001-01-019999-12-31YYYY-MM-dd00

4、:00:00.00000023:59:59HH:MI:SS.ffffffTIME-838:59:59838:59:59HHH:MI:SSTIMESTA MP1970-01-012038-01-01YYYY-MM-DD08:00:0100:59:59HH:MI:SSTIMESTAMP使 用限制:以下限制說明,是針對(duì) TIMESTAMP數(shù)據(jù)列自動(dòng)更新時(shí)的場(chǎng)景:1.在一張表中,只能自動(dòng)更新表中第一個(gè)出現(xiàn)的TIMESTAM列,并且必須使用 DEFAULT CURRENTTIMESTA MP ON UP DATE CURRENT_TIMESTA MP來定義。2.在一張表中,使用 DEFAULT CURR

5、ENT_TIMESTA MP ON UP DATECURRENTTIMESTA來指定TIMESTAM列自動(dòng)更新時(shí),只能使用一次,且用于第一個(gè) TIMESTAM列03.從不同節(jié)點(diǎn)發(fā)起的SQL語句,TIMESTAM列更新的時(shí)間為發(fā)起節(jié)點(diǎn)的本地時(shí)間;如果從不同的發(fā)起點(diǎn)發(fā)起 SQL而各個(gè)節(jié)點(diǎn)的本地時(shí)間又 不同步,則無法保證 TIMESTAMPS更新值一致。1.2 SQL語言基礎(chǔ)本章對(duì)GBase 8a MPP Cluster的SQL語句的下列元素進(jìn)行討論:數(shù)值,例如字符串和數(shù)字;標(biāo)識(shí)符,比如表和列名字;用戶和系統(tǒng)變量;注釋。1.2.1 數(shù)值這部分主要介紹在 GBase8a MPPCluster中使用的數(shù)

6、值。包括字符串,數(shù)字,十六進(jìn)制值,布爾值和NULL1.2.1.1字符串字符串是多個(gè)字符組成的一個(gè)字符序列,由單引號(hào) ?'?或雙引號(hào)?"?字符包圍。例如:'a string'?開在一個(gè)字符串中,確定的序列具有特殊的含義,每個(gè)序列以反斜線符號(hào)頭,稱為轉(zhuǎn)義字符。GBase 8a MPP Cluster識(shí)別下列轉(zhuǎn)義字符:轉(zhuǎn)義字符描述0ASCII 0 (NUL)字符。ASCII 39單引號(hào)?' ?字符。ASCII 34 雙引號(hào)?"?字符。bASCII 8退格符。nASCII 10換行符。rASCII 13回車符。tASCII 9 制9表符(TAB。AS

7、CII 92反斜線 ?字符。如果用戶想要把二進(jìn)制數(shù)據(jù)插入到 BLOB字段中,下列字符必須由轉(zhuǎn)義序列表示:字符描述NULNULbyte (ASCII 0)。需要用?0 ?(一個(gè)反斜線和一個(gè) ASCII?。?字符)表示。反斜線(ASCII 92 )。需要用?表示。單引號(hào)(ASCII 39 )。需要用?' ?表示。雙引號(hào)(ASCII 34 )。需要用?" ?表示。121.2數(shù)字整數(shù)被表示為一個(gè)數(shù)字序列。浮點(diǎn)數(shù)使用 ?.?作為一個(gè)十進(jìn)制數(shù)的分隔符。這兩個(gè)數(shù)字類型可以前置?-?以表示一個(gè)負(fù)值。有效整數(shù)的示例:1221、 0、 -32有效浮點(diǎn)數(shù)的示例:-32032.6809E+10、14

8、8.00E+13121.3十六進(jìn)制值GBase 8a MPP Cluster支持十六進(jìn)制數(shù)值。在數(shù)字的上下文語境中,它們作為等價(jià)于整數(shù)使用。在字符串的上下文語境中,它們作為一個(gè)字符串,每一對(duì)十六進(jìn)制數(shù)字被解釋為對(duì)應(yīng)ASCII碼的字符。十六進(jìn)制轉(zhuǎn)字符,表達(dá)式?x'hexstring'?是基于標(biāo)準(zhǔn) SQL的,表達(dá)式 0x是基于ODBC勺。二者是等價(jià)的。使用HEX()函數(shù)可以將一個(gè)字符串或數(shù)值轉(zhuǎn)換為一個(gè)十六進(jìn)制格式的字符串。1.2.1.4布爾值常量TURE相當(dāng)于1,而常量FALSE相當(dāng)于0。常量的名字對(duì)大小寫不敏感。示例1:查詢TRUE和 FALSE對(duì)應(yīng)的值。gbase> SE

9、LECT TRUE, true, FALSE, false FROM t;" + + + "| TRUE | TRUE | FALSE | FALSE |1 row in set121.5 NULL 值NULL不區(qū)分大小寫。注意:NULL值不同于數(shù)字類型的0或字符串類型的空串。1.2.2 數(shù)據(jù)庫、表、列和別名數(shù)據(jù)庫、表、列和別名等都是標(biāo)識(shí)符,這部分描述GBase 8a MPP Cluster中標(biāo)識(shí)符允許的語法規(guī)則。F面的表描述了對(duì)于每一個(gè)類型標(biāo)識(shí)符允許的最大長(zhǎng)度和可使用的字符。標(biāo)識(shí)符最大長(zhǎng)度(字符)允許的字符數(shù)據(jù)庫52az、AZ、09、下劃線,必須以字母或下 劃線開頭。表5

10、2az、AZ、09、下劃線,必須以字母或下 劃線開頭。視圖52az、AZ、09、下劃線,必須以字母或下 劃線開頭。列52az、AZ、09、下劃線,必須以字母或下 劃線開頭。別名52az、AZ、09、下劃線,必須以字母或下 劃線開頭。存儲(chǔ)過程52az、AZ、09、下劃線,必須以字母或下 劃線開頭。實(shí)際應(yīng)用系統(tǒng)中,標(biāo)識(shí)符不得使用GBase 8a MPP Cluster的保留字,也不能包含特殊字符。1.2.3 標(biāo)識(shí)符限定詞GBase 8a MPP Cluster允許名稱由一個(gè)或多個(gè)標(biāo)識(shí)符組成。組合名稱的各個(gè)組成成分應(yīng)該用英文句號(hào)字符?.?分割開。組合名稱的開始部分做為限定詞來使用,它影響了上下文中后

11、面的標(biāo)識(shí)符的解釋。在GBase 8a MPP Cluster中,用戶可以使用下列表格中的任一種方式引用一個(gè)列:列引用含義col_ name列col_name來自查詢所用的任何一個(gè) 表中對(duì)應(yīng)字段。table_ name.col_ name列col_name來自當(dāng)前數(shù)據(jù)庫中的表table_name。database. name.table_ name.col_ name列 col_name 來自數(shù)據(jù)庫 database_name中的表 table_name。'colu mn_n ame'該字段是一個(gè)關(guān)鍵詞或包含特殊字符。組合標(biāo)識(shí)符如果需要引用則標(biāo)識(shí)符的各部分都要各自引用,而不是把組

12、合標(biāo)識(shí)符作為一個(gè)整體來 引用。例如:'gs-table'.'gs-colu mn'合法,whereas'gs-table.gs-colum n'不合法。124 注釋語法GBase 8a MPP Cluster支持三種注釋風(fēng)格。#到該行結(jié)束。到該行結(jié)束。注意?- ?(引導(dǎo)號(hào))注釋風(fēng)格要求第二個(gè)引導(dǎo)號(hào)后至少跟著一個(gè)空格(或者一個(gè)控制字符例如換行)。這個(gè)語法和標(biāo)準(zhǔn)的SQL注釋風(fēng)格有點(diǎn)不 同。/*行中間或多個(gè)行*/。這個(gè)封閉的序列不一定在同一行表示,因此該語法允許多行注釋。1.2.5 用戶變量GBase 8a MPP Cluster支持用戶變量。用戶變量

13、的生命周期是會(huì)話級(jí)的,對(duì)其它會(huì)話不可見。當(dāng)用戶退出時(shí),此用戶的所有用戶變量會(huì)自動(dòng)釋放。用戶變量的寫法是:var_name 個(gè)變量名可以由az、AZ、09、下劃 線組成,必須以字母或下劃線開頭。用戶變量名大小寫不敏感。通過SET語法來定義并為變量賦值。SET var_name = expr , var_name = expr .?=?是賦值操作符。賦給每一個(gè)變量的 expr 值可以是整數(shù)、實(shí)數(shù)、字符串、 或 NULL。通過SELECT語法查看用戶變量的值。SELECT var_name , var_name .示例 1:使用 SET 語句為變量賦值。gbase> SET t1='a

14、bc',t2=null,t3=4;Query OK, 0 rows affectedgbase> SELECT t1,t2,t3;| t1 | t2 | t3 |+| abc | NULL | 4 |+1 row in set用戶變量可以用于表達(dá)式所允許的任何地方。注意,必須明確指定常量的上 下文中不能使用變量,例如,在 SELECT的 LIMIT子句中。如果用戶使用的變量沒有初始化,那么它的值就為NULL。1.3 操作符和函數(shù)在SQL語句中可以使用表達(dá)式,表達(dá)式可以包含常量,字段, NULL操作符和函數(shù)。本章描述 GBase 8a MPP Cluster 中用于寫在表達(dá)式中的操

15、作符和函數(shù)。包含 NULL 的表達(dá)式總是得出 NULL 值結(jié)果,除非表達(dá)式中的操作和函數(shù)在文 檔中有另外的說明。1.3.1 操作符1.3.1.1 操作符優(yōu)先級(jí)操作符優(yōu)先級(jí)在下面列出,從最高到最低。同一行的操作符具有同樣的優(yōu)先 級(jí)。BINARY, COLLATE-(unary minu s),(unary bit in versi on)*,/,DIV,%,MOD-,+<<,>>=,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,INBETWEEN,CASE,WHEN,THEN,ELSENOT&

16、&,ANDOR,XOR1.3.1.2 圓括號(hào)括號(hào),使用它來規(guī)定一個(gè)表達(dá)式的運(yùn)算順序, 放在括號(hào)里的操作符優(yōu)先執(zhí)行。示例 1:不使用括號(hào),表達(dá)式先執(zhí)行乘法操作,再執(zhí)行加法操作。gbase> SELECT 1+2*3 FROM t;+| 1+2*3 |+1 row in set示例 2:使用括號(hào),表達(dá)式先執(zhí)行括號(hào)中的加法操作,再執(zhí)行括號(hào)外的乘法操作。gbase> SELECT (1+2)*3 FROM t;1.3.1.3.2<=> NULL 值安全等于| (1+2)*3 |+1 row in set1.3.1.3 比較函數(shù)和操作符比較運(yùn)算的結(jié)果是1 (TRUE、0

17、(FALSE或null這些運(yùn)算可用于數(shù)字和 字符串上。根據(jù)需要,字符串將會(huì)自動(dòng)地被轉(zhuǎn)換到數(shù)字,而數(shù)字也可自動(dòng)轉(zhuǎn)換為字符串。說明:本章中的一些函數(shù)(如 GREATEST和 LEASTO)的所得值雖然不包括1(TRUE、0( FALSE或null但對(duì)參數(shù)值進(jìn)行比較時(shí),也會(huì)基于下述規(guī)則。GBase 8a MPP Cluster 使用下列規(guī)則進(jìn)行數(shù)值比較:如果一個(gè)或兩個(gè)參數(shù)是NULL比較的結(jié)果是NULL除了 <=>比較符(含有NULL 參數(shù)時(shí),比較結(jié)果不是 NULL、。如果在一個(gè)比較操作中兩個(gè)參數(shù)均是字符串,它們作為字符串被比較。如果兩個(gè)參數(shù)均是整數(shù),它們作為整數(shù)被比較。如果比較操作中,一

18、個(gè)參數(shù)為字符串,另一個(gè)為整數(shù),則以操作符左側(cè)參數(shù)的數(shù)據(jù)類型為準(zhǔn)。十六進(jìn)制值如果不與一個(gè)數(shù)字進(jìn)行比較,那么它將當(dāng)作一個(gè)二進(jìn)制字符串。如果參數(shù)之一是 DATETIME列,而另一參數(shù)是一個(gè)常量, 在比較執(zhí)行之前,這個(gè)常量被轉(zhuǎn)換為一個(gè)時(shí)間戳。需要注意的是 IN() 中的參數(shù)不是 這 樣 的 。 為 了 安 全 起 見 , 建 議 用 戶 在 比 較 時(shí) 使 用 完 整 的DATETIME/DATE/TIM字符串。在所有其它情況下,參數(shù)作為浮點(diǎn)(REAL數(shù)字被比較。 要轉(zhuǎn)換一個(gè)值成為一個(gè)特殊的類型,用戶可以使用 CASTO函數(shù)。GBase 8a MPP Cluster 主要的比較函數(shù)和操作符包括:1.3

19、.1.3.1 = 等于a=b如果兩個(gè)操作數(shù)相等,則返回 1。NULL 值安全等于。這個(gè)操作符像 ?=?操作符一樣執(zhí)行相等比較。如果所有的操作數(shù)是NULL那么返回的是1而不是NULL 如果有且只有一個(gè)操作數(shù)是 NULL那么返回的是0而不是NULL1.3.1.3.3 <> , != 不等于a<>b 或 a!=b如果兩個(gè)操作數(shù)不相等,則返回1。1.3.1.3.4 <= 小于或者等于a<=b如果a小于或等于b,則返回1。1.3.1.3.5 < 小于a<b如果a小于b,則返回1。1.3.1.3.6>= 大于或者等于a>=b如果a大于或等于b,則

20、返回1。1.3.1.3.7> 大于a>b如果a大于b,則返回1。1.3.1.3.8 is boolean_value ,is not boolean_value根據(jù)一個(gè)布爾值來檢驗(yàn)一個(gè)值,此處的布爾值可以是TRUE FALSE或UNKNOW。 N1.3.1.3.9 expr BETWEEN min AND max如果expr的值在min和max之間(包括min和ma",返回1,否則返回 0。若所有參數(shù)都是同一類型,則上述關(guān)系相當(dāng)于表達(dá)式 (min <= expr ANDexpr<= max) 。其它類型的轉(zhuǎn)換根據(jù)本章開篇所述規(guī)律進(jìn)行,且適用于三種參數(shù)中任意一種

21、。1.3.1.3.10 expr NOT BETWEEN min AND max等同于 NOT(expr BETWEEN min AND max。)1.3.1.3.11 COALESCE(value,.)返回值為列表當(dāng)中的第一個(gè)非 NULL 值,在全部為 NULL 值的情況下返回值為 NULL。1.3.1.3.12 GREATEST(value1,value2,.)當(dāng)有兩個(gè)或多個(gè)參數(shù)時(shí),返回值為最大的參數(shù)值。當(dāng)參數(shù)中有一個(gè)為 NULL 時(shí),直接返回 NULL。當(dāng)參數(shù)都是字符串時(shí), 默認(rèn)是不區(qū)分大小寫的, 如果希望字符串值的參數(shù) 進(jìn)行大小寫敏感,則在需要敏感的字符串參數(shù)前加上BINARY。這些參

22、數(shù)比較使用下列規(guī)則:如果返回值在INTEGER上下文中或者所有的參數(shù)是整型值, 那么它們 使用整數(shù)比較; 如果返回值在 REAL 上下文中或者所有的參數(shù)是實(shí)數(shù)值,那么它們使 用實(shí)數(shù)比較; 如果所有的參數(shù)是大小寫敏感的字符串,那么參數(shù)比較也是大小寫敏感的; 其它情況下,參數(shù)比較大小寫不敏感。1.3.1.3.13 expr IN (value,.)如果 expr 是 IN 列表中的任一值,它將返回 1,否則返回 0。如果所有的值均是常量,那么所有的值被按照 expr 的類型進(jìn)行計(jì)算和排 序。1.3.1.3.14 expr NOT IN (value,.)等價(jià)于 NOT(expr IN (value

23、,.)。1.3.1.3.15 ISNULL(expr)如果expr為NULL ISNULL()的返回值為1,否則返回值為0。1.3.1.3.16 LEAST(value1,value2,.)有兩個(gè)或者更多的參數(shù),返回最小的參數(shù)值。假如任意一個(gè)變量為NULL,則LEAST()的返回值為NULLLEASTO對(duì)參數(shù)進(jìn)行比較所依據(jù)的規(guī)則同 GREATEST(相同。1.3.1.4 邏輯操作符在SQL中,所有的邏輯操作符返回的值均為 TRUEFALSE或NULL(UNKNOVVN)它們是由1(TRUE、O(FALSE)和NULL來實(shí)現(xiàn)的。1.3.1.4.1 NOT, !邏輯非如果操作數(shù)為 0,返回 1;如

24、果操作數(shù)為非零,返回 0;如果操作數(shù)為 NULL,返回 NULL。1.3.1.4.2 XOR 邏輯異或當(dāng)任意一個(gè)操作數(shù)為 NULL 時(shí),返回值為 NULL。對(duì)于非 NULL 的操作數(shù):真(1)異或假(0)的結(jié)果是真,假(0)異或真(1、的結(jié)果也是真。真(1)異或真(1、的結(jié)果是假,假(0、異或假(0、的結(jié)果是假。就是說兩個(gè)值不相同,則異或結(jié)果為真,反之,為假。1.3.1.5 轉(zhuǎn)換操作符和函數(shù)1.3.1.5.1 BINARY在字符串前使用BINAR 丫操作符,可以使得參數(shù)值的比較區(qū)分大小寫。1.3.1.5.2 CAST 和 CONVERT 函數(shù)CAST(expr AS type)CONVERT(

25、expr,type)CONVERT(exprUSINGtranscoding_name)CASTO和CONVERT函數(shù)可以用于將一個(gè)類型的數(shù)值轉(zhuǎn)換到另一個(gè)類型。type 可以是下列值之一:CHAR、 DATE、 DATETIM、E DECIMA、L TIMECAST()和 CONVERT(USING.)是標(biāo)準(zhǔn)的 SQL 語法。CAST(str AS BINARY)等價(jià)于 BINARY str。CAST(ex pr AS CHAR把表達(dá)式看作是默認(rèn)字符集中的字符串。注意:一個(gè)CAST()到 DATE DATETIME或TIME只是標(biāo)識(shí)此列,使其變?yōu)閭€(gè)指定的數(shù)據(jù)類型,而不是改變列的值。CAST()

26、的最終執(zhí)行結(jié)果將會(huì)轉(zhuǎn)化為正確的列類型。1.3.2 控制流函數(shù)1.3.2.1 CASECASEvalue WHENcompare-value THENresult WHENcompare-value THENresult . ELSE result END逐一匹配,當(dāng)滿足 value=compare-value 時(shí),返回對(duì)應(yīng)的 result ,如果未找到匹配項(xiàng),則返回 ELSE 后的 result 。如果沒有 ELSE 子句,默認(rèn)返回 NULL。CASE WHEN condition THEN result WHEN condition THEN result .ELSE result END逐

27、一判斷,當(dāng)condition 為TRUE時(shí),返回對(duì)應(yīng)的result,如果condition全為FALSE則返回ELSE后的result。如果沒有ELSE子句,默認(rèn)返回NULL。一個(gè)CASE表達(dá)式的默認(rèn)返回值類型是所有返回值的相容集合類型,具體情況視其所在語境而定:如用在字符串語境中,則返回結(jié)果為字符串;如用在數(shù)字語境中,則返回結(jié)果為十進(jìn)制值的實(shí)數(shù)值或整數(shù)值。1.3.2.2 DECODEDECODE(value,valuei,resulti, value2,result2,value3,result3,.result)類似于 CASEvalue WHERvaluei THENvaluei ,唯一

28、區(qū)別是如果 value 為 null值,可以和后面的 null 值匹配。1.3.2.3 IF(expr1,expr2,expr3)如果 expri 為 TRUE (expri <> 0 and expri <> NULL) ,則 IF() 的返回值為 expr2 ;否則返回值為expr3。IF()的返回值規(guī)則同CASE表達(dá)式返回值的規(guī)則。1.3.2.4 IFNULL(expr1,expr2)如果expri不為NULL則IFNULL()的返回值為expri,否則其返回值為expr2。IFNULL() 的返回值是數(shù)字或是字符串,具體情況取決于使用它的上下文環(huán)境。等價(jià)于 IF

29、(exprei,exprei,expre2)i.3.2.5 NULLIF(expri,expr2)如果expr1 = expr2 成立,返回值為NULL否則返回值為expr1。等價(jià)于 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。1.3.3 字符串函數(shù)在此列舉幾個(gè)應(yīng)用比較多的字符串函數(shù),如下:1、CHAR_LENGTH(str)返回字符串 str 的字符長(zhǎng)度,以字符進(jìn)行計(jì)算。2、CONCAT(str1,str2,.)返回結(jié)果為連接參數(shù)產(chǎn)生的字符串。如有任何一個(gè)參數(shù)為NULL則返回值為NULL。3、FIELD(str,str1,str2,str

30、3,.)如果 str 等于 str1 則返回 1,如果 str 等于 str2 則返回 2,依次向后進(jìn)行比較。都不相等時(shí),返回值為 0。如果所有對(duì)于FIELDO的參數(shù)均為字符串,則所有參數(shù)均按照字符串進(jìn)行比較。如果所有的參數(shù)均為數(shù)字,則按照數(shù)字進(jìn)行比較。如果str為NULL則返回值為0,原因是NULL不能同任何值進(jìn)行同等比較。FIELDO是ELT()的補(bǔ)數(shù)。4、FIND_IN_SET(str,strlist)參數(shù) strlist由字符?,?分隔的多個(gè)子串組成。如果字符串str 在 strlist中,則返回匹配的位置,從 1 開始。如果字符串str 不在 strlist中或者 strlist 是

31、一個(gè)空串,返回值為 0。如果任何一個(gè)參數(shù)為 NULL,返回值為 NULL。5、INSTR(str,substr)返回子串 substr 在字符串 str 中第一次出現(xiàn)的位置。注意, subtr 在 sub 中的位置,以開始計(jì)數(shù)。6、LOWER(str)依照當(dāng)前字符集設(shè)置映射,將字符串str 中的所有字符改變?yōu)樾懶问健?、UPPER(str)依照當(dāng)前字符集設(shè)置映射,將字符串str 中的所有字符改變?yōu)榇髮?,然后返回該值。UPPER(等價(jià)于 UCASE(。1.3.4 數(shù)值函數(shù)1.3.4.1 算術(shù)操作符常用的算術(shù)操作符均是可用的。注意,如果兩個(gè)參數(shù)均是整型, “- ”,“+”和?“*”以 BIGIN

32、T(64 位)精度運(yùn) 算并返回結(jié)果。如果一個(gè)參數(shù)是無符號(hào)的整數(shù),其他參數(shù)是整數(shù),結(jié)果為無符號(hào)整數(shù)。其中+、-、*、/算法和其他 sql 一樣,整除%變?yōu)?DIV。DIV 整數(shù)除法示例 1:兩個(gè)操作數(shù)都是整型。gbase> SELECT 5 DIV 2 FROM t;| 5 DIV 2 |1 row in set1.3.4.2 數(shù)學(xué)函數(shù)在此列舉幾個(gè)應(yīng)用比較多的數(shù)學(xué)函數(shù),如下:1、FLOOR(X)返回不大于 X 的最大整數(shù)值。如果參數(shù)X是NULL則返回結(jié)果為NULL。2、CEILING(X), CEIL(X)返回不小于 X 的最小整數(shù)。3、MOD(N,M,) N % M, N MOD M取模

33、。返回 N 除以 M 后的余數(shù)。4、PI()返回 PI 值(圓周率)。默認(rèn)顯示 6位小數(shù),但是在 GBase 8a MPP Cluster內(nèi)部,為 PI 使用全部的雙精度。5、SIGN(X)根據(jù) X 值是正數(shù)、 0 還是負(fù)數(shù),分別返回 -1、0 或 1。6、TRUNCATE(X,D)返回?cái)?shù)值 X 截取到 D 位小數(shù)后的數(shù)字。如果 D 為 0,結(jié)果將不包含小數(shù)點(diǎn)和小數(shù)部分。如果 D 為負(fù)數(shù),表示截去(歸零) X 值小數(shù)點(diǎn)左邊第 D 位開始后面所有低位 的值。1.3.5 日期和時(shí)間函數(shù)本節(jié)描述可以用來操縱時(shí)間值的函數(shù)。參考日期和時(shí)間類型來獲取每種日期 和時(shí)間類型在有效格式下可以表達(dá)的值的范圍。在此

34、列舉幾個(gè)應(yīng)用比較多的日期和時(shí)間函數(shù),如下:1、CURDATE()以?YYYY-MM-D或?YYYYMMD格式返回當(dāng)前的日期值,返回的格式取決于該 函數(shù)是用于字符串還是數(shù)字上下文中。2、CURTIME()以?HH:MI:SS?或?HHMISS格式返回當(dāng)前的時(shí)間值,返回的格式取決于該函數(shù) 是用于字符串還是數(shù)字的上下文中。3、DATEDIFF(expr,expr2)DATEDIFF(返回開始日期expr和結(jié)束日期expr2之間的天數(shù)。expr 和 expr2 是 date 或者 datetime 表達(dá)式。只有日期部分用于計(jì)算。如 果用于計(jì)算日期間隔的參數(shù)不是一個(gè) date 或者 datetime 類

35、型,例如, TIME 型 數(shù)據(jù),計(jì)算結(jié)果是不可信的。4、DAY(date)返回 date 是一個(gè)月中的第幾天,范圍為 0 到 31。5、LAST_DAY(date)返回 date 中當(dāng)前月對(duì)應(yīng)的最后一天的值。其中, date 為日期或日期時(shí)間類型。如果參數(shù) date 無效,則返回 NULL。1.3.6 其他函數(shù)其他的一些函數(shù),包括位函數(shù)、加密函數(shù)、信息函數(shù)、輔助函數(shù)等等。此處列舉一些常用函數(shù)做一些介紹。1.3.6.1 位函數(shù)例如:I按位或、&按位與、八按位異或、左移操作(BIGINT)、右移操作(BIGINT) 、 BIT_COUNT(N)1.3.6.2 加密函數(shù)例如:1、 MD5(s

36、tr)為字符串計(jì)算一個(gè)128位的MD5校驗(yàn)和,結(jié)果作為32位16進(jìn)制字符串返回,返回值可以用作哈希密鑰。如果參數(shù) NULL 則返回 NULL。2、 SHA1(str) , SHA(str)按照RFC3174安全哈希算法)中介紹的那樣,為字符串計(jì)算一個(gè)160位的SHA1校驗(yàn)和,結(jié)果作為40位16進(jìn)制字符串返回。若str的值為NULL則返回NULL 常用的就是作為哈希密鑰。用戶還可以用它作為一個(gè)加密安全函數(shù)來存儲(chǔ)密碼。1.3.6.3 信息函數(shù)例如:1 、 USER()返回當(dāng)前的 GBase 8a MPP Cluster 用戶和主機(jī)名。2、 DATABASE()返回當(dāng)前使用的數(shù)據(jù)庫名。1.3.6.4

37、 輔助函數(shù)例如:1 、 FORMAT(X,D)將數(shù)字 X 格式化為 ?#,#,#.#?的形式,四舍五入到 D 位小數(shù)。如果 D 為 0,返回的結(jié)果將沒有小數(shù)點(diǎn)和小數(shù)部分。1.4 SQL語法1.4.1 DDL 語法此處講解 DDl 語法的部分內(nèi)容,包括 DATABAS、ETABLE、VIEW、INDEX。1.4.1.1 DATABASE1.4.1.1.1 CREATE DATABASECREATE DATABASE IF NOT EXISTS database_nameCREATE database以給定的名稱創(chuàng)建一個(gè)數(shù)據(jù)庫。用戶需要獲得創(chuàng)建數(shù)據(jù)庫的權(quán)限,才可以使用 CREATE DATABAS

38、E1.4.1.1.2 DROP DATABASEDROP DATABASE IF EXISTS database_nameDROP database除指定的數(shù)據(jù)庫以及它所包含的表。請(qǐng)小心使用此語句!用戶需要獲得對(duì)數(shù)據(jù)庫的 DROP權(quán)限,才可以使用DROP DATABASE使用關(guān)鍵字IF EXISTS,以防止由于數(shù)據(jù)庫不存在而報(bào)告錯(cuò)誤。1.4.1.2 TABLE1.4.1.2.1 CREATE TABLECREATE TABLED用戶給定的名字在當(dāng)前數(shù)據(jù)庫創(chuàng)建一個(gè)表。用戶必須有創(chuàng)建表的權(quán)限。CREATE TEMPORARY TABLE IF NOT EXISTS database_name.ta

39、ble_name(column_definition ,column_definition, . , key_options)table_optionsNOCOPIES;column_definition:column_name data_type NOT NULL | NULL DEFAULT default_valueCOMMETN comment_valuetable_options:REPLICATED | DISTRIBUTED BY ('column_name') COMMETN 'comment_value'參數(shù)說明如下:TEMP ORAR該參數(shù)為

40、可選參數(shù),創(chuàng)建臨時(shí)表需要使用此關(guān)鍵字。臨時(shí)表的創(chuàng)建請(qǐng)參見 ?的內(nèi)容。IF NOT EXISTS:該參數(shù)為可選參數(shù),用戶可以使用關(guān)鍵字IF NOTEXISTS創(chuàng)建表,如果表已經(jīng)存在,系統(tǒng)將報(bào)告 WARNING!息。database_name:該參數(shù)為可選參數(shù),指定數(shù)據(jù)庫后,在此數(shù)據(jù)庫下創(chuàng)建表。 如果沒有顯示指定 database_name 參數(shù), 創(chuàng)建的表隸屬于USEdatabase_name后的數(shù)據(jù)中的表。table_name: 表命名規(guī)則請(qǐng)參見 ?2.2 數(shù)據(jù)庫、表、列和別名 ?。默認(rèn)情況下,在當(dāng)前數(shù)據(jù)庫中創(chuàng)建表。如果沒有指定當(dāng)前數(shù)據(jù)庫或表已經(jīng)存在, 則報(bào)告錯(cuò)誤信息。column_name

41、指定表中的數(shù)據(jù)列。data_type :指定數(shù)據(jù)列的數(shù)據(jù)類型。數(shù)據(jù)類型參見 ?1 數(shù)據(jù)類型 ?中的內(nèi)容。NOT NULL | NULL指定數(shù)據(jù)列的值,是否允許為 NULL如果既沒有指定NULL也沒有指定NOT NULL列被視為指定了 NULL default_value :指定數(shù)據(jù)列的默認(rèn)值。默認(rèn)值必須是一個(gè)常數(shù),而不能 是一個(gè)函數(shù)或者一個(gè)表達(dá)式。舉例來說,用戶不能將一個(gè)數(shù)據(jù)列的默認(rèn) 值設(shè)置為NOW(或者CURRENT_DAT之類的函數(shù)。對(duì)于給定的一個(gè)表, 可以使用SHOW CREATE TABt語句來查看哪些列有顯式 DEFAULT句。comment_value 指定數(shù)據(jù)列的備注說明。例如

42、stu_no id COMMENT '學(xué)號(hào) ' 。table_options:SafeGroup默認(rèn)為隨機(jī)分布表。創(chuàng)建后的分布表將數(shù)據(jù)分布存儲(chǔ)在每個(gè) 中的各個(gè)節(jié)點(diǎn)中。在每個(gè) SafeGroup 中通過副本冗余進(jìn)行高可用性數(shù)據(jù) 管理。REP LICATED指定是否是復(fù)制表。在創(chuàng)建一個(gè)表時(shí),用戶可以使用關(guān)鍵詞 REP LICATED來指定是否創(chuàng)建復(fù)制表。如果指定了關(guān)鍵詞 REP LICATEP那么創(chuàng)建的復(fù)制表在 GBase 8a MPPCluster 的各個(gè)節(jié)點(diǎn)上存放的是完整數(shù)據(jù)。注意:復(fù)制表表名尾部不允許是 _nnumber 編號(hào),例如, mytable_n1,旦客戶端與 GBa

43、se 8a MPP Cluster 斷開連接,臨時(shí)表將自動(dòng)刪除。mytable_n12 是不允許使用的。DISTRIBUTEDBY column_name指定創(chuàng)建表中的物理列 column_name是哈希列,這樣 創(chuàng)建的表 ,稱為哈希 分布表。 哈希列必須 是 INT 或 者VARCHA類型。comment旨定表的備注說明??梢杂?SHOW CREATE TABLE table_ naifieSHOW FULL COLUMNS FROM table_ na語句來顯示備注信息。1.4.1.2.1.1 CREAET TABLE.AS SELECT.CREATE TABLE語法格式:table_na

44、me_(column_definition,.)REPLICATEDDISTRIBUTED BY AS SELECT .功能: 根據(jù)列定義以及投影列創(chuàng)建表結(jié)構(gòu),并且將 SELECT中查詢的數(shù)據(jù)復(fù)制到所創(chuàng)建的表中。參數(shù)說明如下:REP LICATE:指定創(chuàng)建復(fù)制表選項(xiàng)。DISTRIBUTED BY指定創(chuàng)建表中的物理列 column name是哈希列。AS:指定SELECT語句,可選關(guān)鍵字。1.4.1.2.1.2 CREAET TABLE.LIKE.語法格式:CREATE TABLE table_name1 LIKE table_name2;功能:復(fù)制 table_name2 的表結(jié)構(gòu)來創(chuàng)建表ta

45、ble_name1。1.4.1.2.1.3 CREATE TEMPORARY TABLE.功能:在創(chuàng)建一個(gè)表時(shí),用戶可以使用關(guān)鍵詞TEMP ORAR臨 時(shí)表被限制在當(dāng)前連接中,當(dāng)連接關(guān)閉時(shí),臨時(shí)表會(huì)自動(dòng)地刪除。這就意味著,兩個(gè) 不同的連接可以使用同一個(gè)臨時(shí)表名而不會(huì)發(fā)生沖突,也不會(huì)與同名現(xiàn) 有的表沖突(現(xiàn)有表將被隱藏,直到臨時(shí)表被刪除) 。使用此種方法,注意事項(xiàng):臨時(shí)表支持除ALTER之外的所有DDL及DML操作。臨時(shí)表不能被備份。臨時(shí)表不支持使用 gcdump 工具導(dǎo)出表結(jié)構(gòu)。臨時(shí)表支持在當(dāng)前連接中使用查詢結(jié)果導(dǎo)出語句導(dǎo)出表中數(shù) 據(jù)。在進(jìn)行集群數(shù)據(jù)重分布、備份恢復(fù)前需要清除當(dāng)前連接中的臨 時(shí)

46、表。1.4.1.2.1.4 CREATE TABLE.NOCOPIES語法格式:CREATE TABLE IF NOT EXISTS table_name (col_name type,.)NOCOPIES;參數(shù)說明如下:NOC OPIES在創(chuàng)建表時(shí),使用關(guān)鍵詞 NOC 0P IE可以創(chuàng)建一張不帶副本的表。功能:nocopies 表和分布表(隨機(jī)分布表和哈希分布表)一樣,數(shù)據(jù) 分布存儲(chǔ),支持表的 DDL語法和DML語法;與分布表的區(qū)別是,不產(chǎn)生副本,所以無法提供數(shù)據(jù)的高可用性。nocopies 表支持使用 gcdump 工具導(dǎo)出表結(jié)構(gòu)。nocopies 表支持使用 SELECTNTOOUTFI

47、LE和 rmt: SELECTNTOOUTFILE語句導(dǎo)出數(shù)據(jù)。GBase 8a MPP Cluster 支持 nocopies 表到非 nocopies 表的轉(zhuǎn)換。使用約束:nocopies 表不支持使用數(shù)據(jù)加載工具進(jìn)行數(shù)據(jù)加載。nocopies 表不支持?jǐn)?shù)據(jù)同步、重分布、備份與恢復(fù)。1.4.1.2.2 ALTER TABLEALTER TABLE database_name.table_namealter_specification , alter_specification .alter_specification:ADD COLUMN column_definition FIRST |

48、 AFTER col_name | ADD COLUMN (column_definition,.)| CHANGE COLUMN old_col_name new_col_name column_definition| MODIFY COLUMN col_name column_definitionFIRST | AFTER col_name| RENAME TO new_table_name| DROP COLUMN col_name| DROP NOCOPIES| ADD PARTITION partition_definition| DROP P ARTITION partition_

49、name, partition_name| EXCHANGE PARTITION partition_name WITH TABLE table_namewithout validation參數(shù)說明如下:| ADD COLUMN (column_definition,.):用于增加新的數(shù)據(jù)列,如果 使用FIRST,貝W增加的列位于所有數(shù)據(jù)列的前面;如果使用 AFTER則新增加的列,位于指定數(shù)據(jù)列的后面。默認(rèn)不使用FIRST、AFTER則將增加的新列追加到末尾處。CHANGE COLUMN old_col_name new_col_name column_definition :修 改列名稱。不

50、支持修改列定義。MODIFY COLUMN col_name column_definition FIRST | AFTER col_name :修改表中存在列的位置。不支持修改列定義。RENAME TO new_table_name 修改表名稱為 new_table_name。DROP COLUMN col_name刪除表中存在的列。補(bǔ)充說明:修改nocopies表的語法和普通表一樣,不必使用關(guān)鍵字NOCOPIES1.4.1.2.2.1 ALTER TABLE .DROP NOCOPIES語法格式:ALTER TABLE <table_name> DROP NOCOPIES;功能

51、:刪除表的 nocopies 屬性,使其變?yōu)槠胀ǖ姆植急恚?同時(shí)將各節(jié)點(diǎn)主分片上的 數(shù)據(jù)同步到備份節(jié)點(diǎn)的對(duì)應(yīng)分片上。當(dāng)集群進(jìn)行數(shù)據(jù)加載、重分布以及備份恢復(fù)操作時(shí),用戶可以考慮首先使用此語法,將 nocopies 表進(jìn)行轉(zhuǎn)換后,再完成這些操作。使用約束:如果是非 nocopies 表使用此語法,將報(bào)告錯(cuò)誤信息。1.4.1.2.2.2 ALTER TABLE. SHRINK SPACE語法格式:ALTER TABLE database_names.tbl_name SHRINK SPACE功能:釋放被刪除的數(shù)據(jù)文件所占的磁盤空間。注意事項(xiàng):索引文件及 rowid 占用的磁盤空間不會(huì)被回收。磁盤空間

52、回收命令僅針對(duì)表。數(shù)據(jù)文件所占的磁盤空間回收以文件為單位,只有當(dāng)這個(gè)數(shù)據(jù)文件涉及的數(shù)據(jù)都被刪除后才能回收該文件占用的磁盤空間。如果被刪除的數(shù)據(jù)只命中 DC 的部分?jǐn)?shù)據(jù),則該數(shù)據(jù)文件不能被清理。如果刪除數(shù)據(jù)命中所有數(shù)據(jù),則有尾塊數(shù)據(jù)的文件不被清理。1G磁盤空間回收過程中需要一定的磁盤空間來備份部分元數(shù)據(jù)文件,在沒有可用空間的情況下執(zhí)行該命令會(huì)報(bào)錯(cuò),這時(shí)需要手工清理一部分空間(一般需要 空間)再執(zhí)行該命令進(jìn)行空間回收。1.4.1.2.3 RENAME TABLE語法格式:RENMAE TABLE database_name.old_table_name TOdatabase_name.new_ta

53、ble_name;參數(shù)說明如下:database_name:是要修改表隸屬的數(shù)據(jù)庫名稱,可選項(xiàng);省略此參數(shù),即為USE后的數(shù)據(jù)庫名稱。old_table_name:是表的原有名稱。new_table_name:是表的要修改后的新名稱。功能:RENAME TABL的功能就是將一張已經(jīng)存在的表的名稱修改為一個(gè)不存在的新的表名稱。1.4.1.2.4 TRUNCATE TABLE語法格式:TRUNCATE TABLE database_name.table_name;參數(shù)說明如下:database_name:可選參數(shù),表示表隸屬的數(shù)據(jù)庫名稱。如果省略此參數(shù),即為 USE 后的數(shù)據(jù)庫名稱。table_name :是要?jiǎng)h除其全部行的表的名稱。功能:TRUNCATE TABL刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。1.4.1.2.5 DROP TABLE語法格式:DROP TEMPORARY TABLE IF EXISTS d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論