共用方式為


查詢加速 SQL 語言參考

查詢加速支援 ANSI 類似 SQL 的語言,以在 Blob 內容上表達查詢。 查詢加速 SQL 方言是 ANSI SQL 的子集,具有一組有限的支持數據類型、運算符等,但它也會擴充 ANSI SQL,以支援對階層式半結構化數據格式的查詢,例如 JSON。

SELECT 語法

查詢加速支援的唯一 SQL 語句是 SELECT 語句。 此範例會傳回表達式傳回 true 的每個數據列。

SELECT * FROM table [WHERE expression] [LIMIT limit]

針對 CSV 格式的數據, 資料表 必須是 BlobStorage。 這表示查詢會針對 REST 呼叫中指定的 Blob 執行。 針對 JSON 格式的數據, 數據表 是「數據表描述元」。請參閱本文的 數據表描述項 一節。

在下列範例中,針對 WHERE 運算式 傳回 true 的每個數據列,此語句會傳回評估每個投影運算式所建立的新數據列。

SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]

您可以將一或多個特定資料列指定為 SELECT 表示式的一部分(例如 )。 SELECT Title, Author, ISBN

備註

您可以在 SELECT 運算式中使用的特定資料行數目上限為 49。 如果您需要 SELECT 語句傳回超過 49 個資料行,則請針對 SELECT 運算式使用通配符 (*例如: SELECT *

下列範例會針對 表達式 傳回 true 的每個數據列傳回匯總計算(例如:特定數據行的平均值)。

SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]

下列範例會傳回適當的位移,以分割 CSV 格式的 Blob。 請參閱本文的 Sys.Split 一節。

SELECT sys.split(split_size)FROM BlobStorage

數據類型

數據類型 說明
INT 64 位帶正負號的整數。
浮動 64 位 (“雙精確度”) 浮點數。
字串 可變長度的 Unicode 字串。
時間戳記 時間點。
布爾 真或假。

從 CSV 格式的數據讀取值時,所有值都會讀取為字串。 字串值可以使用 CAST 運算式轉換成其他類型。 值可能會根據內容隱含轉換成其他類型。 如需詳細資訊,請參閱 資料類型優先順序 (Transact-SQL)

表達方式

參考欄位

如果是 JSON 格式的數據,或具有標頭數據列的 CSV 格式數據,欄位可能會依名稱來參考。 功能變數名稱可以加上引號或未加上引號。 引號功能變數名稱會以雙引號字元 (")、 可能包含空格,而且區分大小寫。 未加上引號的功能變數名稱不區分大小寫,而且不能包含任何特殊字元。

在 CSV 格式的數據中,字段也可以以序數參照,前面加上底線 (_) 字元。 例如,第一個字位可能會參考為 _1,或第十一個字段可能會參考為 _11。 依序數參考欄位對於不包含標頭數據列的 CSV 格式數據很有用,在此情況下,參考特定欄位的唯一方法是序數。

運營商

支援下列標準 SQL 運算子:

操作員 說明
= 比較兩個表達式的相等性(比較運算符)。
!= 測試某個表達式是否不等於另一個表達式(比較運算符)。
<> 比較兩個表達式不等於 (比較運算符)。
< 比較兩個表達式小於 (比較運算符)。
<= 比較兩個小於或等於的表達式(比較運算符)。
> 比較兩個大於的表達式(比較運算符)。
>= 比較兩個大於或等於的表達式(比較運算符)。
+ 兩個數字相加。 這個加法運算運算子也可以將數位,以天為單位新增至日期。
- 減去兩個數位(算術減法運算元)。
/ 將一個數位除以另一個數位(算術除法運算符)。
* 將兩個表達式相乘(算術乘法運算符)。
% 傳回一個數位除以另一個數位的餘數。
AND 在兩個整數值之間,執行位元邏輯 AND 運算。
OR 在兩個指定的整數值之間執行位邏輯 OR 運算,以轉譯為 Transact-SQL 語句內的二進位表達式。
NOT 否定布爾值輸入。
CAST 將某個數據類型的表達式轉換成另一個數據類型。
BETWEEN 指定要測試的範圍。
IN 判斷指定的值是否符合子查詢或清單中的任何值。
NULLIF 如果兩個指定的表達式相等,則傳回 Null 值。
COALESCE 依序評估自變數,並傳回最初未評估為 NULL 之第一個表達式的目前值。

如果運算子左邊和右邊的數據類型不同,則會根據此處指定的規則執行自動轉換: 資料類型優先順序 (Transact-SQL)

查詢加速 SQL 語言僅支援該文章所討論的數據類型非常小的子集。 請參閱本文的 數據類型 一節。

轉型

查詢加速 SQL 語言支援 CAST 運算子,根據這裡的規則: 數據類型轉換 (Database Engine)

查詢加速 SQL 語言僅支援該文章所討論數據類型的一小部分。 請參閱本文的 數據類型 一節。

字串函數

查詢加速 SQL 語言支援下列標準 SQL 字串函式:

功能 說明
CHAR_LENGTH 如果字串運算式是字元資料類型,則會傳回字串運算式的長度 (以字元為單位);否則,會傳回字串運算式的長度 (以位元組為單位),且最小整數不小於位元數除以 8 的結果。 (此函數與 CHARACTER_LENGTH 函數相同。)
CHARACTER_LENGTH 如果字串運算式是字元資料類型,則會傳回字串運算式的長度 (以字元為單位);否則,會傳回字串運算式的長度 (以位元組為單位),且最小整數不小於位元數除以 8 的結果。 (此函式與 CHAR_LENGTH 函式相同
降低 將大寫字元數據轉換成小寫之後,傳回字元表達式。
上層 傳回字元表示式,並將小寫字元數據轉換成大寫。
子字串 在 SQL Server 中傳回字元、二進位、文字或影像運算式的一部分。
修剪 從字串開頭和結尾移除空格字元 char(32) 或其他指定的字元。
領先 從字串開頭移除空格字元 char(32) 或其他指定的字元。
拖尾 從字串結尾移除空格字元 char(32) 或其他指定的字元。

以下是一些範例:

功能 範例 結果
CHARACTER_LENGTH SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
下降 SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
上方 SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
子字串 SUBSTRING('123456789', 1, 5) 23456
修剪 TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

日期功能

支援下列標準 SQL 日期函式:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

目前, 會轉換標準IS08601的所有日期格式

DATE_ADD函式

查詢加速 SQL 語言支援函式的 DATE_ADD 年、月、日、小時、分鐘、秒。

範例:

DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)

DATE_DIFF 函式

查詢加速 SQL 語言支援函式的 DATE_DIFF 年、月、日、小時、分鐘、秒。

DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00') 

EXTRACT 函式

對於函式所支援 DATE_ADD 日期部分以外的 EXTRACT,查詢加速 SQL 語言支援timezone_hour和timezone_minute作為日期部分。

範例:

EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')

TO_STRING函式

範例:

TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP),  'MMMM d, y')

下表描述可用來指定函式輸出格式的 TO_STRING 字串。

格式字串 輸出
yy 2 位數格式的年份 - 1999 年為 '99'
y 4 位數格式的年份
yyyy 4 位數格式的年份
M 年月 - 1
毫米 零填補月份 - 01
年度縮寫月份 - JAN
完整月份 - 5 月
d 當月日 (1-31)
dd 當月零填補日 (01-31)
AM 或 PM
h 一天中的一小時 (1-12)
呵呵 當天零填補時數 (01-12)
H 一天中的小時 (0-23)
HH 每天零填補小時 (00-23)
m 小時分鐘 (0-59)
毫米 零填補分鐘 (00-59)
s 分鐘秒 (0-59)
ss 零填補秒 (00-59)
S 秒數 (0.1-0.9)
SS 秒數 (0.01-0.99)
SSS 秒數 (0.001-0.999)
X 以小時為單位的位移
XX 或 XXXX 以小時和分鐘為單位的位移 (+0430)
XXX 或 XXXXX 以小時和分鐘為單位的位移 (-07:00)
x 小時位移 (7)
xx 或xxxx 小時和分鐘位移 (+0530)
Xxx 或 xxxxx 小時和分鐘位移 (+05:30)

TO_TIMESTAMP 函式

僅支援IS08601格式。

範例:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

備註

您也可以使用 函 UTCNOW 式來取得系統時間。

匯總表達式

SELECT 語句可能包含一或多個投影表示式或單一匯總運算式。 支援下列匯總表示式:

表現 說明
COUNT\ 傳回符合述詞表達式的記錄數目。
COUNT(expression) 傳回表達式為非 Null 的記錄數目。
AVG(expression) 傳回表達式非 Null 值的平均值。
MIN(expression) 傳回表達式的最小非 Null 值。
MAX(expression 傳回表達式的最大非 Null 值。
SUM(expression) 傳回表達式所有非 Null 值的總和。

失蹤

運算符 IS MISSING 是唯一查詢加速 SQL 語言支援的非標準。 針對 JSON 數據,如果特定輸入記錄中遺漏欄位,則表達式欄位 IS MISSING 會評估為 Boolean 值 true。

數據表描述項

針對 CSV 資料,資料表名稱一律 BlobStorage為 。 例如:

SELECT * FROM BlobStorage

針對 JSON 數據,有其他選項可供使用:

SELECT * FROM BlobStorage[*].path

這可讓查詢 JSON 數據的子集。

針對 JSON 查詢,您可以在 FROM 子句中提及路徑。 這些路徑有助於剖析 JSON 數據的子集。 這些路徑可以參考 JSON 陣列和物件值。

讓我們以更詳細的範例來瞭解這一點。

這是我們的範例數據:

{
  "id": 1,
  "name": "mouse",
  "price": 12.5,
  "tags": [
    "wireless",
    "accessory"
  ],
  "dimensions": {
    "length": 3,
    "width": 2,
    "height": 2
  },
  "weight": 0.2,
  "warehouses": [
    {
      "latitude": 41.8,
      "longitude": -87.6
    }
  ]
}

您可能只 warehouses 對上述數據的 JSON 物件感興趣。 物件 warehouses 是 JSON 陣列類型,因此您可以在 FROM 子句中提及此專案。 您的範例查詢看起來會像這樣。

SELECT latitude FROM BlobStorage[*].warehouses[*]

查詢會取得所有欄位,但只選取緯度。

如果您只 dimensions 想要存取 JSON 物件值,您可以使用 在查詢中參考該物件。 例如:

SELECT length FROM BlobStorage[*].dimensions

這也會限制您對 對象成員的 dimensions 存取。 如果您想要存取 JSON 欄位的其他成員和 JSON 物件的內部值,您可以使用查詢,如下列範例所示:

SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]

備註

BlobStorage 和 BlobStorage[*] 都參考整個物件。 不過,如果您在FROM子句中有路徑,則必須使用 BlobStorage[*].path

Sys.Split

這是 SELECT 語句的特殊形式,僅適用於 CSV 格式的數據。

SELECT sys.split(split_size) FROM BlobStorage

如果您想要下載 CSV 數據記錄,然後分批處理 CSV 數據記錄,請使用此語句。 如此一來,您就可以平行處理記錄,而不必一次下載所有記錄。 此語句不會從 CSV 檔案傳回記錄。 相反地,它會傳回批次大小的集合。 然後,您可以使用每個批次大小來擷取一批數據記錄。

使用 split_size 參數來指定您希望每個批次包含的位元元組數目。 例如,如果您想要一次只處理 10 MB 的數據,您的語句看起來會像這樣: SELECT sys.split(10485760)FROM BlobStorage 因為 10 MB 等於 10,485,760 個字節。 每個批次都會包含符合這些 10 MB 的記錄數目。

在大部分情況下,每個批次的大小會略高於您指定的數位。 這是因為批次不能包含部分記錄。 如果批次中的最後一筆記錄在閾值結束前開始,批次將會變大,使其可以包含完整記錄。 最後一個批次的大小可能會小於您指定的大小。

備註

split_size至少必須是 10 MB(10485760)。

另請參閱