1. 概述
本文來介紹 SparkSQL 中的一些常用運算子合文法。
2. 常用運算子
| 運算子 | 含義 | 詳情 |
|---|---|---|
| = | 等值比較 | A=B。如果運算式 A 與運算式 B 相等,則為TRUE;否則為 FALSE 在 FineDataLink 中可以用 資料過濾 實現 |
| <> | 不等值比較 | A <> B。如果運算式 A 為 NULL,或者運算式 B 為 NULL,傳回 NULL;如果運算式 A 與 運算式 B 不相等,則為 TRUE;否則為 FALSE 在 FineDataLink 中可以用 資料過濾 實現 |
| < | 小於 | A < B。 如果運算式 A 為 NULL,或者運算式 B 為 NULL,傳回 NULL;如果運算式 A 小 於運算式 B,則為 TRUE;否則為 FALSE 在 FineDataLink 中可以用 資料過濾 實現 |
| <= | 小於等於 | A <= B。如果運算式 A 為 NULL,或者運算式 B 為 NULL,傳回 NULL;如果運算式 A 小 於或者等於運算式 B,則為 TRUE;否則為 FALSE 在 FineDataLink 中可以用 資料過濾 實現 |
| >= | 大於等於 | A >= B。如果運算式 A 為 NULL,或者運算式 B 為 NULL,傳回 NULL;如果運算式 A 大 於或者等於運算式 B,則為 TRUE;否則為 FALSE 在 FineDataLink 中可以用 資料過濾 實現 |
| IS NULL | 空值判斷 | A IS NULL。如果運算式 A 的值為 NULL,則為 TRUE;否則為 FALSE 在 FineDataLink 中可以用 資料過濾 實現
|
| IS NOT NULL | 非空值判斷 | A IS NOT NULL。 如果運算式 A 的值為 NULL,則為 FALSE;否則為TRUE 在 FineDataLink 中可以用 資料過濾 實現
|
| LIKE | 模糊匹配 | A[NOT] LIKE B。 如果字串 A 或者字串 B 為 NULL,則傳回 NULL;如果字串 A 符 合運算式 B 的正則文法,則為 TRUE;否則為 FALSE。B 中字元”_”表示任意單個字元,而字 符”%”表示任意數量的字元。 FineDataLink 透過更簡便的視覺化方式實現模糊查詢和篩選,提升使用者的處理效率。詳情參見:欄位模糊查詢/篩選 |
| AND | 邏輯與 | A AND B 如果 A 為 TRUE,B 為 TRUE,則為 TRUE,否則 FALSE。 |
| OR | 邏輯或 | A OR B 如果 A,B 至少有一個為 TRUE,則為 TRUE,否則 FALSE |
3. AS-新增列/更改欄位名
範例:
新增 type 列,值為測試 。SQL 語句為:select `name` ,'測試' AS type from ab
新增 biaoji 列,數學成績大於 90 標記為 1,否則標記為 0。SQL 語句為:select `math` ,if(`math` >90,1,0) AS biaoji from ab
推薦您使用更簡便的方案:「新增列_條件指派」
若使用需要定義新增列為中文,則需要對列名加 `,例如:select "測試" as `欄位`

4. GROUP BY-資料去重
詳情參見:数据去重
5. 排序
6. LIMIT-約束傳回行數
範例:select * from DB表輸入 limit 3

7. BETWEEN ... AND-約束傳回行數
注:BETWEEN ... AND 用於行區間選擇的前提是有自增序列號的時候。
說明:會選取介於兩個值之間的資料範圍,可用於對有序列號的資料集進行 行區間選擇。
範例:
select * FROM
DB表輸入
where `產品id` between 2 and 3

8. 表連結和聯合
LEFT JION(左連結)
LEFT OUTER JION(左外連結)
LEFT SEMI JOIN(左半連結)
INNER JOIN 或 JOIN
RIGHT JION(右連結)
RIGHT OUTER JION(右外連結)
FULL JOIN(全連結)
FULL OUTER JOIN(全外連結)
UNION
UNION ALL 聯合
詳情參見:表連結與聯合
9. HAVING-分組後條件篩選
根據 Having 關鍵字後面指定的篩選條件,將分組後不滿足條件的記錄篩選掉。
範例:
select `產品id` FROM
DB表輸入
group by `產品id` having `產品id` > 400

10. PIVOT-列轉欄
推薦您直接使用列轉欄算子。
11. Stack-欄轉列
推薦您直接使用欄轉列算子。
12. to_json、struct函式
4.1.6.4 及之後版本,支援 to_json、struct 函式。
to_json 函式與 JSON 生成算子差別
JSON生成 算子可以將一個二維表轉換為一個 json 物件,或者將一個二維表轉換為多行單欄的二維表(每行都是json物件),但無法構建一個有普通正文+json物件+json陣列的二維表;to_json 函式更加靈活。
JSON生成 算子可與 API输出 算子配合,先將資料生成 JSON 格式,再匯出到 API ;to_json 函式可用來構建 MongoDB输出、简道云输出 的 json 欄位。
to_json 函式
可將資料轉換為 json 格式的字串。
| 「Spark SQL」算子中輸入語句 | 結果 |
|---|---|
| SELECT to_json(named_struct('a', 1, 'b', 2)); | {"a":1,"b":2} |
| SELECT to_json(map('a', named_struct('b', 1))); | {"a":{"b":1}} |
| SELECT to_json(array(map('a', 1))); | [{"a":1}] |
| 將正文轉為 json 陣列: SELECT to_json(split('a,b,c', ',')) AS jsonArray | ["a", "b", "c"] |
struct 函式
用於將多個列或欄位組合成一個結構化的資料物件。
範例一:將二維表的多個欄位拼成一個 json 物件

範例二:透過struct、to_json、collect_list、concat_ws、concat、group by,可以將一個二維表的多個欄位拼成一個 json 物件陣列。具體情況參見:MongoDB输出
