-
SQL標(biāo)準(zhǔn)與各平臺(tái)概述
SQL標(biāo)準(zhǔn)演進(jìn)(SQL-92/SQL-99/SQL:2003/SQL:2016);關(guān)系型數(shù)據(jù)庫(kù) vs 大數(shù)據(jù)SQL引擎核心差異;四種平臺(tái)定位對(duì)比:MySQL(OLTP關(guān)系型)、Oracle(企業(yè)級(jí)關(guān)系型)、Hive(批處理數(shù)據(jù)倉(cāng)庫(kù))、Spark SQL(內(nèi)存計(jì)算引擎);各平臺(tái)適用場(chǎng)景與選型指南。
-
開(kāi)發(fā)環(huán)境搭建與基礎(chǔ)查詢
MySQL安裝與客戶端配置;Oracle環(huán)境與SQL*Plus使用;Hive環(huán)境搭建與Beeline連接;Spark SQL環(huán)境(Spark-shell/Thrift Server);各平臺(tái)第一個(gè)查詢:SELECT * FROM table;通用SELECT語(yǔ)法結(jié)構(gòu)對(duì)比。
-
數(shù)據(jù)類型與函數(shù)差異
數(shù)值類型對(duì)比(MySQL INT/Oracle NUMBER/Hive INT/Spark Integer);字符串類型(MySQL VARCHAR/Oracle VARCHAR2/Hive STRING/Spark String);日期時(shí)間類型及處理函數(shù)差異;NULL值處理在各平臺(tái)的異同;類型轉(zhuǎn)換語(yǔ)法對(duì)比(CAST/CONVERT/隱式轉(zhuǎn)換)。
-
條件過(guò)濾與運(yùn)算符
WHERE子句通用語(yǔ)法;比較運(yùn)算符(=, !=, <>, >, <, >=, <=);IN與NOT IN(注意NULL處理差異);BETWEEN范圍查詢;LIKE模糊匹配與通配符;正則表達(dá)式支持程度對(duì)比;邏輯運(yùn)算符(AND/OR/NOT);各平臺(tái)條件短路邏輯差異。
-
排序與限制查詢
ORDER BY排序(ASC/DESC/多字段);MySQL的LIMIT語(yǔ)法;Oracle的ROWNUM與FETCH FIRST語(yǔ)法;Hive的LIMIT(需注意strict模式);Spark SQL的LIMIT與排序優(yōu)化;各平臺(tái)分頁(yè)查詢實(shí)現(xiàn)對(duì)比。
-
聚合函數(shù)與分組查詢
聚合函數(shù)通用語(yǔ)法:COUNT/SUM/AVG/MAX/MIN;COUNT(*)與COUNT(列)區(qū)別;各平臺(tái)對(duì)DISTINCT聚合的支持(COUNT(DISTINCT col));GROUP BY分組語(yǔ)法;多字段分組;HAVING分組后過(guò)濾(與WHERE區(qū)別);各平臺(tái)分組函數(shù)擴(kuò)展(Oracle的ROLLUP/CUBE/GROUPING SETS、Hive的WITH CUBE/ROLLUP)。
-
多表連接查詢
連接類型通用語(yǔ)法:INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN;MySQL對(duì)FULL JOIN的支持(需UNION模擬);Oracle的NATURAL JOIN與USING子句;Hive的JOIN優(yōu)化(MapJoin/Bucket Join);Spark SQL的SMJ(Sort Merge Join)與BHJ(Broadcast Hash Join);多表連接執(zhí)行計(jì)劃差異。
-
子查詢進(jìn)階
子查詢分類:標(biāo)量子查詢、列子查詢、行子查詢、表子查詢;WHERE中的子查詢(IN/EXISTS/ANY/ALL);SELECT中的子查詢;FROM中的子查詢(派生表);相關(guān)子查詢與非相關(guān)子查詢;Oracle子查詢特殊語(yǔ)法(WITH);Hive對(duì)子查詢的支持限制;Spark SQL子查詢優(yōu)化。
-
集合操作
UNION與UNION ALL區(qū)別與使用;Oracle的INTERSECT/MINUS;MySQL模擬INTERSECT/EXCEPT的方法;Hive的UNION ALL與UNION;Spark SQL的集合操作支持;集合操作注意事項(xiàng)(列數(shù)/數(shù)據(jù)類型/排序)。
-
窗口函數(shù)
窗口函數(shù)概念與語(yǔ)法(OVER());各平臺(tái)窗口函數(shù)支持對(duì)比(MySQL 8.0+、Oracle全支持、Hive 0.11+、Spark SQL全支持);ROW_NUMBER/RANK/DENSE_RANK排名函數(shù);LAG/LEAD前后行訪問(wèn);SUM/AVG等聚合窗口函數(shù)(累計(jì)計(jì)算/移動(dòng)平均);PARTITION BY與ORDER BY組合;窗口幀(ROWS/RANGE)定義;Oracle分析函數(shù)擴(kuò)展。
-
高級(jí)查詢特性
MySQL的GROUP_CONCAT聚合連接;Oracle的LISTAGG與PIVOT行列轉(zhuǎn)換;Hive的側(cè)視圖(LATERAL VIEW)與explode函數(shù);Spark SQL的PIVOT與高階函數(shù);各平臺(tái)正則表達(dá)式函數(shù)對(duì)比;遞歸查詢(Oracle CONNECT BY vs MySQL 8.0 CTE)。
-
數(shù)據(jù)操作語(yǔ)言(DML)
INSERT基本語(yǔ)法;批量插入(MySQL擴(kuò)展語(yǔ)法/Oracle INSERT ALL);INSERT INTO ... SELECT;UPDATE與DELETE語(yǔ)法;Oracle的MERGE語(yǔ)法(UPSERT);MySQL的REPLACE INTO;Hive的INSERT OVERWRITE與動(dòng)態(tài)分區(qū)插入;Spark SQL的DataFrame寫(xiě)入與SQL DML。
-
事務(wù)與一致性
MySQL事務(wù)支持(InnoDB引擎)與隔離級(jí)別;Oracle的MVCC與讀一致性;Hive事務(wù)支持限制(需特定配置);Spark SQL事務(wù)特性;各平臺(tái)ACID特性對(duì)比;鎖機(jī)制差異。
-
性能優(yōu)化基礎(chǔ)
MySQL執(zhí)行計(jì)劃(EXPLAIN)解讀;Oracle執(zhí)行計(jì)劃(DBMS_XPLAN);Hive執(zhí)行計(jì)劃(EXPLAIN)與Tez/Spark執(zhí)行引擎;Spark SQL執(zhí)行計(jì)劃(Spark UI/explain);各平臺(tái)優(yōu)化器特性對(duì)比(CBO/RBO);索引在優(yōu)化中的作用差異。
-
分區(qū)與分桶優(yōu)化
MySQL分區(qū)表(RANGE/LIST/HASH);Oracle分區(qū)技術(shù);Hive分區(qū)表概念與管理;Hive分桶表(CLUSTERED BY);Spark SQL對(duì)分區(qū)的處理;分區(qū)裁剪(Partition Pruning)原理;各平臺(tái)分區(qū)優(yōu)化策略。
-
存儲(chǔ)格式與性能
MySQL存儲(chǔ)引擎(InnoDB/MyISAM)對(duì)比;Oracle表空間與段管理;Hive文件格式(Text/Sequence/Parquet/ORC)對(duì)比;Spark SQL對(duì)Parquet/ORC的支持;列式存儲(chǔ)優(yōu)勢(shì);壓縮算法選擇(Snappy/Zlib/LZO);各平臺(tái)存儲(chǔ)格式與性能關(guān)系。
-
數(shù)據(jù)采樣與統(tǒng)計(jì)
MySQL的TABLESAMPLE支持;Oracle的SAMPLE子句;Hive抽樣查詢(桶表抽樣/數(shù)據(jù)塊抽樣/隨機(jī)抽樣);Spark SQL的表采樣;統(tǒng)計(jì)信息收集(ANALYZE TABLE)在各平臺(tái)的實(shí)現(xiàn);統(tǒng)計(jì)信息對(duì)優(yōu)化器影響。
-
Hive與Spark SQL特殊語(yǔ)法
Hive的HQL特性:側(cè)視圖LATERAL VIEW、explode函數(shù)、collect_list/set聚合;Hive的自定義函數(shù)(UDF/UDAF/UDTF);Spark SQL的DataFrame API與SQL互操作;Spark SQL的高階函數(shù)(transform/filter/exists);Hive與Spark SQL執(zhí)行引擎差異(MapReduce/Tez/Spark)。
-
實(shí)戰(zhàn)案例一:跨平臺(tái)數(shù)據(jù)遷移與驗(yàn)證
場(chǎng)景:MySQL業(yè)務(wù)庫(kù)數(shù)據(jù)同步至Hive數(shù)倉(cāng)。任務(wù):MySQL導(dǎo)出(SELECT INTO OUTFILE)→Hive建表(分區(qū)/存儲(chǔ)格式)→LOAD DATA導(dǎo)入→數(shù)據(jù)量對(duì)比驗(yàn)證(COUNT)→關(guān)鍵指標(biāo)聚合計(jì)算一致性校驗(yàn)→性能對(duì)比測(cè)試。
-
實(shí)戰(zhàn)案例二:Oracle存儲(chǔ)過(guò)程改寫(xiě)為Spark SQL
場(chǎng)景:Oracle存儲(chǔ)過(guò)程遷移至Spark SQL。任務(wù):理解Oracle存儲(chǔ)過(guò)程邏輯(游標(biāo)/循環(huán)/臨時(shí)表)→識(shí)別可轉(zhuǎn)換部分與需重構(gòu)部分→PL/SQL與Spark SQL語(yǔ)法差異分析→使用Spark SQL的CTE和窗口函數(shù)重寫(xiě)邏輯→性能驗(yàn)證與優(yōu)化。
-
實(shí)戰(zhàn)案例三:多源數(shù)據(jù)關(guān)聯(lián)分析
場(chǎng)景:MySQL用戶表與Hive訂單表關(guān)聯(lián)分析。任務(wù):MySQL數(shù)據(jù)通過(guò)Sqoop同步至Hive→Hive中創(chuàng)建用戶臨時(shí)表→Spark SQL讀取Hive表(用戶+訂單)→復(fù)雜關(guān)聯(lián)查詢(多維度聚合)→結(jié)果導(dǎo)出至MySQL供報(bào)表使用→全流程性能優(yōu)化。
-
實(shí)戰(zhàn)案例四:SQL語(yǔ)法兼容性改造
場(chǎng)景:Oracle SQL遷移至MySQL/Hive/Spark。任務(wù):識(shí)別源SQL中的Oracle特性(層次查詢CONNECT BY/PIVOT/分析函數(shù))→尋找目標(biāo)平臺(tái)的等價(jià)實(shí)現(xiàn)方案(遞歸CTE/CASE WHEN聚合/窗口函數(shù))→改寫(xiě)SQL并驗(yàn)證結(jié)果一致性→性能對(duì)比測(cè)試→輸出SQL遷移指南。
-
課程總結(jié)與技能圖譜
四種SQL引擎核心語(yǔ)法回顧;各平臺(tái)特性對(duì)比總結(jié);SQL遷移心法;SQL學(xué)習(xí)資源推薦;后續(xù)進(jìn)階方向(SQL優(yōu)化專家/數(shù)據(jù)倉(cāng)庫(kù)設(shè)計(jì)/大數(shù)據(jù)開(kāi)發(fā));跨平臺(tái)SQL能力在企業(yè)中的價(jià)值。