日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

邏輯數倉SQL語法介紹

邏輯數倉功能可以打通不同引擎,不同實例,跨區域,跨存儲的OLAP、OLTP之間的壁壘,基于統一的SQL語法為用戶提供跨庫數據查詢和數據同步的能力。本文介紹邏輯數倉支持的SQL語法。

背景信息

邏輯數倉的查詢語法和函數基本兼容MySQL,因此可以使用MySQL的語法編寫查詢語句和函數,同時,還對邏輯數倉的語法進行擴展,支持創建和刪除邏輯視圖。

邏輯數倉的詳細功能,請參見核心功能

使用場景

當您需要對業務數據進行快捷分析時,可以在原始數據上(如:MySQL中的庫表)定義一個邏輯視圖并直接查詢。如果需要基于原有分析結果做進一步分析,您還可以基于該邏輯視圖級聯地定義新的邏輯視圖。

邏輯視圖

創建邏輯視圖

創建邏輯視圖的語法結構如下:

CREATE VIEW <db_name>.<view_name> AS <query_statement>;

說明項

說明

db_name

DBLink名稱。

view_name

自定義邏輯視圖名稱。

query_statement

SELECT語句:

  • 可通過dblink.schema.table引用邏輯數倉中已導入的庫表。例如:

    CREATE VIEW public.joined_view AS SELECT tb1.id AS id, tb2.name AS name FROM dblink_order.db1.tb1 JOIN dblink_product.product_db.tb2 ON tb1.id = tb2.id;
  • 支持級聯定義,可通過public.viewname引用其他已定義的邏輯視圖。例如:

    CREATE VIEW public.filtered_view AS SELECT * FROM public.joined_VIEW WHERE id > 100;
  • 支持關聯查詢,可將其他已定義的邏輯視圖與已導入的庫表進行關聯查詢。例如:

    CREATE VIEW filtered_view2 AS SELECT * FROM public.joined_view v1 JOIN dblink_order.db1.tb1 t1 ON v1.id = t1.id where t1.id>100;

查詢邏輯視圖

所有邏輯視圖均保存在名為public公共庫的Schema中,因此查詢邏輯視圖時,需要在視圖名稱前帶上前綴public.

例如,查詢名為filtered_view的邏輯視圖,語法結構如下:

SELECT * FROM public.filtered_view;

刪除邏輯視圖

例如,刪除邏輯視圖的語法結構如下:

DROP VIEW public.view_name;

查看所有邏輯視圖

例如,查看public庫下的所有邏輯視圖,語法結構如下:

SHOW VIEWS public;

其他

查看虛擬庫列表

例如,顯示所有已創建的虛擬庫(包括public公共庫),語法結構如下:

SHOW CATALOGS;

運算符

邏輯運算符

函數

說明

示例

AND

邏輯與

a > 1 AND b < 10

OR

邏輯或

a > 1 OR b < 10

NOT

邏輯非

NOT(a > 1)

比較運算符

函數

說明

示例

>

大于。

a > 1

<

小于。

a < 1

=

等于。

a = 1

>=

大于或等于。

a >= 1

<=

小于或等于。

a <= 1

<>

不等于。

a <> 1

!=

不等于。

a != 1

is null

是否為null值。

a is null

is not null

是否為非null。

a is not null

is distinct from

對比兩個值的null安全運算符,避免返回空結果,返回結果必定為true或false。

select null is distinct from null

is not distinct from

對比兩個值的NULL安全運算符,避免返回空結果,返回結果必定為true或false。

select null is not distinct from null

greatest(value1, value2, .., valuen)

返回所有值中的最大值。

-

least(value1, value2, .., valuen)

返回所有值中的最大值。

-

all

比較單個值與子查詢返回值。

select 21 < all (values 19, 20, 21)

any/some

比較單個值與子查詢返回值。

select 'hello' = any (values 'hello', 'world')

like

在where子句中搜索列中的指定模式。

select * from (values ('abc'), ('bcd'), ('cde')) as t (name) where name like '_b%'

說明
  • % 代表 0, 1或多個字符。

  • _ 代表一個字符。

數值運算符

函數

說明

+

加法

-

減法

*

乘法

/

除法

函數

數學函數

函數

返回值類型

說明

示例

mod(x)

默認與x類型一致

取模。

mod(101, 4)

pow(x,y)

默認與x類型一致

指數運算。

pow(3, 2)

sqrt(x)

默認與x類型一致

平方根。

sqrt(9)

abs(x)

默認與x類型一致

絕對值。

abs(3)

cbrt(x)

double

立方根。

cbrt(3)

ceil(x)

-

ceiling函數的別名。

-

ceiling(x)

默認與x類型一致

返回大于給定數值表達式的最小整數。

ceiling(5.5),返回值為6。

degrees(x)

double

將弧度轉換為度數。

degrees(1),返回值為57。

e(x)

double

返回歐拉常數。

-

exp(x)

double

返回取x次冪的歐拉常數。

-

floor(x)

默認與x類型一致

返回比x小的最大整數。

floor(5.5),返回值為5。

from_base(string, radix)

bigint

將String的值轉譯成base-radix的數值。

-

ln(x)

double

返回x的自然對數。

-

log2(x)

double

返回以x為底2的對數。

log2(2),返回值為1。

log10(x)

double

返回以x為底10的對數。

log10(10),返回值為1。

pi()

-

返回常量pi。

-

power(x, p)

double

返回x的p次方。

-

rand()

-

random函數的別名。

-

random()

double

返回[0,1.0)范圍內的偽隨機值。

-

secure_rand()

-

secure_random的別名。

-

secure_random()

double

返回[0, 1.0)范圍內安全、加密的隨機值。

-

secure_random(lower, upper)

-

返回[lower, upper)范圍內加密安全的隨機值。

-

round(x)

默認與x類型一致

返回x四舍五入后最接近的整數。

round(3.5),返回值為4。

round(x, d)

默認與x類型一致

返回x四舍五入到d位小數。

round(3.14159, 2),返回值為3.14。

sign(x)

默認與x類型一致

返回x的符號。

  • 當x為正數時,返回1。

  • 當x為0時,返回0。

  • 當x為負數時,返回-1。

  • 當x為NaN時,返回NaN。

sign(1),返回值為1。

to_base(x, radix)

varchar

返回x的以base-radix形式的字符串。

-

truncate(x)

double

返回x刪除小數點后的整數。

  • truncate(2.5),返回值為2。

  • truncate(-2.5),返回值為-2。

truncate(x, n)

double

返回截取到小數點后n位的x。n可以為負數,以截取小數點左邊的n位。

  • truncate(REAL '12.333', -1),返回值為10.0。

  • truncate(REAL '12.333', 0),返回值為12.0。

  • truncate(REAL '12.333', 1),返回值為12.3。

acos(x)

double

返回x的反余弦。

-

asin(x)

double

返回x的反正弦。

-

atan(x)

double

返回x的反正切。

-

atan2(y, x)

double

返回y/x的反正切。

-

cos(x)

double

返回x的余弦。

-

cosh(x)

double

返回x的雙曲余弦。

-

sin(x)

double

返回x的正弦。

-

tan(x)

double

返回x的正切。

-

tanh(x)

double

返回x的雙曲正切。

-

infinity()

double

返回表示正無窮大的常數。

-

is_finite(x)

boolean

判斷x是否為有限值。

-

is_infinite(x)

boolean

判斷x是否為無限值。

-

is_nan(x)

boolean

判斷x是否為非數字。

-

nan()

double

返回表示非數字的常量。

-

字符串函數

函數

返回值類型

說明

示例

replace

varchar

替換

replace(name, 'old', 'new')

md5

varchar

MD5哈希

md5(name)

||

varchar

字符串拼接

name1 || name2

trim

varchar

移除首尾字符

trim('a' FROM name)

lower

varchar

轉小寫

lower('aBc')

upper

varchar

轉大寫

upper('abc')

char_length

bigint

字符串長度

char_length('abc')

chr(n)

varchar

以單個字符串形式返回Unicode碼n位。

-

codepoint(string)

integer

返回字符串中唯一字符的Unicode碼。

-

concat(string1, ..., stringN)

varchar

字符串拼接函數,連接兩個或多個字符串,從而組成一個新的字符串。

concat('hello', ' ', 'world'),拼接后為'hello world'。

hamming_distance(string1, string2)

bigint

返回string1和string2的漢明距離,即對應字符不同的位置數。

說明

兩字符串的長度必須相同。

-

left(string, length)

varchar

返回從string左側取length個字符后的字符串。

-

length(string)

bigint

返回string的長度。

-

levenshtein_distance(string1, string2)

bigint

返回string1和string2的Levenshtein編輯距離,即將string1改為string2所需的單字符編輯(插入、刪除或替換)的最小數量。

-

lower(string)

varchar

將string轉換為小寫。

lower('ABC'),返回值為'abc'。

lpad(string, size, padstring)

varchar

使用padstring在string左側添加字符串,使得string的大小變為size,如果size小于string的長度,結果將被截斷為size大小,size不能為負,padstring必須非空。

-

ltrim(string)

varchar

刪除string的前導空格。

-

replace(string, search)

varchar

從string中刪除所有search。

-

replace(string, search, replace)

varchar

將string中所有的search替換成replace。

replace('hello old', 'old', 'new'),返回值為'hello new'。

reverse(string)

varchar

返回string的逆序字符串。

reverse('abc'),返回值為'cba'。

rpad(string, size, padstring)

varchar

使用padstring在string右側添加字符串,使得string的大小變為size。如果size小于string的長度,結果將被截斷為size大小。size不能為負,padstring必須非空。

-

rtrim(string)

varchar

刪除string末尾的空格。

-

split(string, delimiter)

-

使用delimiter拆分string并返回數組。

-

split(string, delimiter, limit)

-

使用delimiter拆分string并返回大小最大為limit的數組。

-

strpos(string, substring)

bigint

返回string中第一個substring的起始位置。從第一個字符開始遍歷,如果未找到,則返回0。

-

strpos(string, substring, instance)

bigint

返回string中第n個子字符串substring的位置。instance必須是一個正數,從第一個字符開始遍歷,如果未找到,則返回0。

-

strrpos(string, substring)

bigint

返回string中最后一個子字符串substring的起始位置。從第一個字符開始遍歷,如果未找到,則返回0。

-

strrpos(string, substring, instance)

bigint

返回string中從末尾開始第n個子字符串substring的位置。instance必須是一個正數,從第一個字符開始遍歷,如果未找到,則返回0。

-

position(substring IN string)

bigint

返回string中第一個子字符串substring的起始位置。從第一個字符開始遍歷,如果未找到,則返回0。

-

substring_index(str, delim, count)

varchar

返回分隔符delim出現次數count前字符串str的子字符串。

substring_index('www.mysql.com', '.', 2)

substr

-

substring函數的同名函數。

-

substring(string FROM start)

varchar

返回字符串string從start開始截取的子字符串。

substring('foobarbar' FROM 4),返回值為barbar。

substring(string, start)

varchar

返回string從start開始截取的子字符串。

-

substring(string, start, length)

varchar

返回string從start開始截取length長度的子字符串。

-

trim(string)

varchar

刪除字符串string中首尾的空格。

-

upper(string)

varchar

將字符串string中的小寫字母轉換為大寫字母。

-

to_utf8(string)

varchar

將字符串string編譯為UTF-8編碼的二進制。

-

from_utf8(binary)

varchar

將二進制字符串解碼為UTF-8編碼格式,并使用默認字符U+FFFD替換無效的UTF-8字符。

-

from_utf8(binary, replace)

varchar

將二進制字符串解碼為UTF-8編碼格式,并使用自定義字符串替換無效的UTF-8字符。

-

key_sampling_percent(Varchar)

varchar

根據給定字符串的哈希值生成一個在0~1.0之間的值(double類型)。

-

聚合函數

聚合函數在GROUP BY語句中使用。

函數

返回值類型

說明

count(*)

bigint

返回行數

avg(x)

double

返回均值

sum(x)

bigint

返回總和

max(x)

bigint

返回最大值

min(x)

bigint

返回最小值

count(x)

bigint

返回非空值的個數

bool_and(boolean)

boolean

所有輸入值都為true時,返回true,否則返回false。

bool_or(boolean)

boolean

輸入值中有一個為true,則返回true,否則返回false。

count_if(x)

boolean

返回輸入值為true的個數。

histogram

-

返回一個map,包含每個輸入值出現的次數。

日期函數

函數

返回值類型

說明

示例

current_date

date

返回查詢開始時的當前日期。

SELECT current_date

current_time

time with time zone

返回查詢開始時的當前時間。

-

current_timestamp

timestamp with time zone

返回當前日期、時間和時區。

-

current_timezone()

varchar

以IANA(例如,America / Los_Angeles)定義的格式返回當前時區,或以UTC的固定偏移量(例如+08:35)返回當前時區。

SELECT current_timezone()

date(x)

date

CAST(x AS date)函數功能相同,可實現將x的類型轉換為Date。

-

date_add(date, interval expr unit)

date

兼容MySQL語法的date_add函數。使用該函數可返回在date后增加interval的日期。

date_add('2018-05-01', INTERVAL 1 DAY),返回值為'2018-05-02'

date_diff(unit, timestamp1, timestamp2)

bigint

返回timestamp1與timestamp2的差值,該差值的單位為unit。unit的具體單位取值,請參見間隔函數

-

date_trunc(unit, x)

-

返回x截取到單位unit之后的值。unit的具體單位取值,請參見間隔函數

-

date_format(timestamp, format)

varchar

使用format指定的格式,將timestamp格式化成字符串。

DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s')

date_parse(string, format)

date

使用format將string解析為時間戳。

-

last_day_of_month(x)

date

返回日期x當月的最后一天。

last_day_of_month(current_date)

from_iso8601_timestamp(string)

timestamp with time zone

將ISO 8601格式化的字符串解析為具有時區的時間戳。

-

from_iso8601_date(string)

date

將ISO 8601格式的字符串解析為日期。

-

from_unixtime(unixtime)

timestamp

返回unixtime時間戳。

-

from_unixtime(unixtime, string)

timestamp with time zone

返回指定格式的unixtime時間戳。

-

from_unixtime(unixtime, hours, minutes)

timestamp with time zone

返回為hours和minutes對應時區的unixtime時間戳。

-

localtime

time

返回查詢開始時的當前時間。

-

localtimestamp

timestamp

返回查詢開始時的當前時間戳。

-

now()

timestamp with time zone

current_timestamp的別名。

-

to_iso8601(x)

varchar

將x格式化為ISO 8601字符串。x可以是date、timestamp或帶時區的timestamp。

-

to_milliseconds(interval)

bigint

轉換為以毫秒為單位的時間間隔interval。

-

to_unixtime(timestamp)

double

轉換為unix時間戳。

-

day(x)

bigint

返回指定日期在當月的天數。

-

day_of_month(x)

day(x)函數的別名。

day_of_week(x)

返回指定日期對應的星期值,值范圍從1(星期一)到7(星期天)。

day_of_year(x)

返回指定日期對應一年中的第幾天,值范圍從1到366。

dow(x)

day_of_week函數的別名。

doy(x)

day_of_year函數的別名

hour(x)

返回指定日期對應的小時,值范圍從1到23。

millisecond(x)

返回指定時間的毫秒數。

minute(x)

返回指定時間的分鐘數。

month(x)

返回指定日期對應的月份。

quarter(x)

返回指定日期對應的分鐘。

second(x)

返回指定日期對應的秒數。

timezone_hour(timestamp)

返回從指定時間戳對應時區偏移的小時數。

timezone_minute(timestamp)

返回從指定時間戳對應時區偏移的分鐘數。

week(x)

返回指定日期對應一年中的ISO week,值范圍從1到53。

week_of_year(x)

week函數的別名。

year(x)

返回指定日期對應的年份。

year_of_week(x)

返回指定日期對應的ISO week的年份。

yow(x)

year_of_week函數的別名。

間隔函數支持的間隔單位如下:

單位

描述

millisecond

Milliseconds

second

Seconds

minute

Minutes

hour

Hours

day

Days

week

Weeks

month

Months

quarter

Quarters of a year

year

Years

條件表達式

標準的CASE表達式有兩種形式。

  • 遍歷搜索每一個value,當valueN與expression的值相等,返回對應條件中的result,否則返回ELSE分支的result。

    CASE expression
         WHEN value1 THEN result1
         [WHEN value2 THEN result2]
         [ELSE result3]
    END
  • 遍歷搜索每一個condition(條件表達式),返回condition為true的result(返回結果)。

    CASE WHEN condition1 THEN result1
         [WHEN condition2 THEN result2]
         [ELSE result3]
    END

    函數

    說明

    示例

    if(condition, true_value)

    若condition為true,則返回true_value,否則返回NULL。

    • if(true, 1),返回值為1。

    • if(false, 1),返回值為NULL。

    if(condition, true_value, false_value)

    若condition為true,則返回true_value,否則返回false_value。

    • if(true, 1, 2),返回值為1。

    • if(false, 1, 2),返回值為2。

    coalesce(value1, value2[, ...])

    返回第一個非NULL值。

    coalesce(NULL, NULL, 1),返回值為1。

    ifnull(expr1, expr2)

    若expr1不為NULL,則返回expr1,否則返回expr2。

    • ifnull(1,0),返回值為1。

    • ifnull(NULL,10),返回值為10。

    nullif(expr1, expr2)

    若expr1等于expr2,則返回NULL,否則返回expr1。

    -

    try(expression)

    若expression中存在語法報錯,則返回NULL。可以識別的三種報錯:

    • 除數為0

    • 類型轉換(Cast)失敗或函數參數無效

    • 數值越界

    coalesce(try(total_cost / packages), 0)

其他函數

函數

返回值類型

說明

示例

json_extract(json, json_path)

-

從JSON中返回json_path指定的值。返回值為JSON類型。

SELECT json_extract(json, '$.store.book');

regexp_like(string, pattern)

boolean

計算正則表達式pattern并確定其是否包含在string中。

SELECT regexp_like('1a 2b 14m', '\d+b');