●▲● **`array split(string str, string pat)`**
-- 按照 pat 字符串分割 str,返回分割后的字符串數組
```sql
hive> select split('abtcdtef','t') from test;
["ab","cd","ef"]
```
●▲● **`string concat(string A, string B, ...)`**
-- 拼接字符串,返回字符串AB
```sql
select concat('abc', 'def', 'ghf');
+------------+--+
| _c0 |
+------------+--+
| abcdefghf |
+------------+--+
select concat(id, name) from test;
+------------+--+
| _c0 |
+------------+--+
| 1zhangsan |
| 2lisi |
+------------+--+
```
●▲● **`string concat_ws(string SEP, string A, string B, string ...)`** -
-- 拼接字符串,返回字符串AB
-- SEP: A與B的分割符
```sql
select concat_ws(',', "abc", "def", "gh");
+-------------+--+
| _c0 |
+-------------+--+
| abc,def,gh |
+-------------+--+
```
●▲●
**`string substr(string A, int start)`**
**`string substr(string A, int start, int len)`**
**`string substring(string A, int start)`**
**`string substring(string A, int start, int len)`**
-- 截取字符串A
```sql
select substr('abcde', 3);
+------+--+
| _c0 |
+------+--+
| cde |
+------+--+
select substr('abcde', -1);
+------+--+
| _c0 |
+------+--+
| e |
+------+--+
```
●▲● **`int instr(string str, string substr)`**
-- 返回substr在str首次出現的位置
```sql
select instr("abcdef", "de");
+------+--+
| _c0 |
+------+--+
| 4 |
+------+--+
```
●▲● **int lenth(string A)`**
-- 返回字符串A的長度
```sql
select length("abc");
+------+--+
| _c0 |
+------+--+
| 3 |
+------+--+
```
●▲● **`int locate(string substr, string str[, int pos])`**
-- 返回substr在str中首次出現的位置,從pos開始查找
```sql
select locate('a', 'abcda');
+------+--+
| _c0 |
+------+--+
| 1 |
+------+--+
select locate('a', 'abcda', 2);
+------+--+
| _c0 |
+------+--+
| 5 |
+------+--+
```
●▲●
**`string upper(string A)`**
**`string ucase(string A)`**
-- 都是將字符串A轉換為大寫
```sql
select upper('abcdE');
+--------+--+
| _c0 |
+--------+--+
| ABCDE |
+--------+--+
select ucase('abcdE');
+--------+--+
| _c0 |
+--------+--+
| ABCDE |
+--------+--+
```
<br/>
●▲●
**`string lower(string A)`**
**`string lcase(string A)`**
-- 都是將字符串轉換為小寫
```sql
select lower('ABCDe');
+--------+--+
| _c0 |
+--------+--+
| abcde |
+--------+--+
select lcase('ABcD5');
+--------+--+
| _c0 |
+--------+--+
| abcd5 |
+--------+--+
```
<br/>
●▲●
**`string trim(string A)`** 去除字符串A兩邊的空格;
`string ltrim(string A)` 去除字符串A左邊空格;
`string rtrim(string A)`去除字符串A右邊空格;
```sql
select trim(' ab c ');
+-------+--+
| _c0 |
+-------+--+
| ab c |
+-------+--+
```
●▲● **`string regexp_replace(string A, string regx, string C)`**
-- 將A中符合java正則表達式 regx 的部分用C替換
```sql
select regexp_replace('foobar', 'oo|ar', '');
+------+--+
| _c0 |
+------+--+
| fb |
+------+--+
```
●▲● **`string regexp_extract(string subject, string pattern, int index)`**
-- 將subject按照pattern正則規則拆分,返回拆分后index位置的字符
```sql
select regexp_extract('foothebar','foo(.*?)(bar)', 2);
+------+--+
| _c0 |
+------+--+
| bar |
+------+--+
```
注意:在有些情況下要使用轉義字符,下面的等號要用雙豎線轉義,這是 java 正則表達式的規則。
```sql
select data_field,
regexp_extract(data_field,'.*?bgStart\\=([^&]+)',1) as aaa,
regexp_extract(data_field,'.*?contentLoaded_headStart\\=([^&]+)',1)as bbb,
regexp_extract(data_field,'.*?AppLoad2Req\\=([^&]+)',1) asccc
from pt_nginx_loginlog_st
where pt = '2012-03-26' limit 2;
```
●▲●`int ascii(string str)`查看str字符串中第一個字符的ascii值
```sql
select ascii('ab') as ascii;
+--------+--+
| ascii |
+--------+--+
| 97 |
+--------+--+
select ascii(name) as ascii from test;
+--------+--+
| ascii |
+--------+--+
| 122 |
| 108 |
+--------+--+
```
●▲●`string base64(binary bin)`返回二進制bin的base64編碼格式
```sql
select base64(binary('test'));
+-----------+--+
| _c0 |
+-----------+--+
| dGVzdA== |
+-----------+--+
select base64(binary(name)) from test;
+---------------+--+
| _c0 |
+---------------+--+
| emhhbmdzYW4= |
| bGlzaQ== |
+---------------+--+
```
●▲●`string concat_ws(string SEP, array<string>)`
-- 將數組以字符串返回
-- SEP 字符串元素分割符
```sql
select concat_ws('|', array('a', 'b', 'cd'));
+---------+--+
| _c0 |
+---------+--+
| a|b|cd |
+---------+--+
-- 列轉行
select user_id,
concat_ws(",", collect_list(order_id)) as order_value
from col_lie
group by user_id
limit 10;
```
●▲●`string format_number(number x, int d)`
-- 將x保留d位小數,四舍五入
```sql
select format_number(5.23456, 3);
+--------+--+
| _c0 |
+--------+--+
| 5.235 |
+--------+--+
```
<br/>
●▲●`map<string, string> str_to_map(text[, delimiter1, delimiter2])`
-- 將字符串text按照給定的分割符轉換為map結構
```sql
select str_to_map('key1:value1,key2:value2');
+------------------------------------+--+
| _c0 |
+------------------------------------+--+
| {"key1":"value1","key2":"value2"} |
+------------------------------------+--+
select str_to_map('k1=v1,k2=v2', ',', '=');
+------------------------+--+
| _c0 |
+------------------------+--+
| {"k1":"v1","k2":"v2"} |
+------------------------+--+
```
●▲●`string printf(string format, obj... args)`
-- 將obj進行format格式化
```sql
select printf("%08X", 123);
+-----------+--+
| _c0 |
+-----------+--+
| 0000007B |
+-----------+--+
```
●▲●`binary unbase64(string base64str)`
-- 將base64str解碼為二進制
```sql
select base64(binary("hive"));
+-----------+--+
| _c0 |
+-----------+--+
| aGl2ZQ== |
+-----------+--+
select unbase64('aGl2ZQ==');
+-------+--+
| _c0 |
+-------+--+
| hive |
+-------+--+
```
<br/>
●▲●
`string parse_url(string url, string partToExtract[, string keyToExtract])`
-- 返回URL中指定的部分
-- partToExtract取值有`HOST`, `PATH`, `QUERY`,`REF`,`PROTOCOL`, `AUTHORITY`, `FILE`,`USERINFO`.
```sql
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST');
+---------------+--+
| _c0 |
+---------------+--+
| facebook.com |
+---------------+--+
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY','k1');
+------+--+
| _c0 |
+------+--+
| v1 |
+------+--+
```
●▲●`string get_json_object(string json_str, string path)`
-- 返回json_str中與path匹配的內容,如果沒有匹配返回NULL
```sql
select get_json_object('{"store":{"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],
"bicycle":{"price":19.95,"color":"red"}
},
"email":"amy@only_for_json_udf_test.net",
"owner":"amy"
}
','$.owner');
+------+--+
| _c0 |
+------+--+
| amy |
+------+--+
```
●▲●`string space(int n)`返回長度為 n 的字符串
```sql
hive> select space(10) from test;
hive> select length(space(10)) from test;
10
```
●▲●`string repeat(string str, int n)`返回重復 n 次后的 str 字符串
```sql
hive> select repeat('abc',5) from test;
abcabcabcabcabc
```
●▲●`string lpad(string str, int len, string pad)`
-- 將 str 進行用 pad 進行左補足到 len 位
```sql
hive> select lpad('abc',10,'td') from test;
tdtdtdtabc
```
注意:與 GP,ORACLE 不同,pad 不能默認
<br/>
●▲●`string rpad(string str, int len, string pad)`
-- 將 str 進行用 pad 進行右補足到 len 位
```
hive> select rpad('abc',10,'td') from test;
abctdtdtdt
```
●▲●`int find_in_set(string str, string strList)`
-- 返回 str 在 strlist 第一次出現的位置,strlist 是用逗號分割的字符串。如果沒有找到該 str 字符,則返回 0
```sql
hive> select find_in_set('ab','ef,ab,de') from test;
2
hive> select find_in_set('at','ef,ab,de') from test;
0
```
●▲●`array<array<string>> sentences(string str, string lang, string locale)`
-- 返回輸入 str 分詞后的單詞數組
```sql
hive> select sentences('hello word!hello hive,hi hive,hellohive') from test;
OK
[["hello","word"],["hello","hive","hi","hive","hello","hive"]]
```
●▲●`array<struct<string, double>> ngrams(array<array<string>>, int N, intK, int pf)`
-- 與 sentences()函數一起使用,分詞后,統計分詞結果中一起出現頻次最高的 TOP-K 結果
```sql
hive> SELECT ngrams(sentences('hello word!hellohive,hi hive,hello hive'),2,2)
FROM
test;
[{"ngram":["hello","hive"],"estfrequency":2.0},{"ngram":["hive","hello"],"estfreq
uency":1.0}]
```
該查詢中,統計的是兩個詞在一起出現頻次最高的 TOP-2;
結果中,hello 與 hive 同時出現 2 次
●▲●
```
array<struct<string,double>> context_ngrams(array<array<string>>,array<string>, int K, int pf)
```
-- 與 sentences()函數一起使用,分詞后,統計分詞結果中與數組中指定的單詞一起出現(包括順序)頻次最高的 TOP-K 結果
```sql
hive>
SELECT
context_ngrams(sentences('helloword!hello hive,hi hive,hello hive')
,array('hello',null),3) FROM test;
[{"ngram":["hive"],"estfrequency":2.0},{"ngram":["word"],"estfrequency":1.0}]
```
該查詢中,統計的是與’hello’一起出現,并且在 hello 后面的頻次最高的TOP-3;
結果中,hello 與 hive 同時出現 2 次,hello 與 word 同時出現 1 次。
```sql
hive>
SELECT
context_ngrams(sentences('hello word!hello hive,hi hive,hello hive')
,array(null,'hive'),3) FROM test;
[{"ngram":["hello"],"estfrequency":2.0},{"ngram":["hi"],"estfrequency":1.0}]
```
該查詢中,統計的是與’hive’一起出現,并且在 hive 之前的頻次最高的 TOP-3
- Hadoop
- hadoop是什么?
- Hadoop組成
- hadoop官網
- hadoop安裝
- hadoop配置
- 本地運行模式配置
- 偽分布運行模式配置
- 完全分布運行模式配置
- HDFS分布式文件系統
- HDFS架構
- HDFS設計思想
- HDFS組成架構
- HDFS文件塊大小
- HDFS優缺點
- HDFS Shell操作
- HDFS JavaAPI
- 基本使用
- HDFS的I/O 流操作
- 在SpringBoot項目中的API
- HDFS讀寫流程
- HDFS寫流程
- HDFS讀流程
- NN和SNN關系
- NN和SNN工作機制
- Fsimage和 Edits解析
- checkpoint時間設置
- NameNode故障處理
- 集群安全模式
- DataNode工作機制
- 支持的文件格式
- MapReduce分布式計算模型
- MapReduce是什么?
- MapReduce設計思想
- MapReduce優缺點
- MapReduce基本使用
- MapReduce編程規范
- WordCount案例
- MapReduce任務進程
- Hadoop序列化對象
- 為什么要序列化
- 常用數據序列化類型
- 自定義序列化對象
- MapReduce框架原理
- MapReduce工作流程
- MapReduce核心類
- MapTask工作機制
- Shuffle機制
- Partition分區
- Combiner合并
- ReduceTask工作機制
- OutputFormat
- 使用MapReduce實現SQL Join操作
- Reduce join
- Reduce join 代碼實現
- Map join
- Map join 案例實操
- MapReduce 開發總結
- Hadoop 優化
- MapReduce 優化需要考慮的點
- MapReduce 優化方法
- 分布式資源調度框架 Yarn
- Yarn 基本架構
- ResourceManager(RM)
- NodeManager(NM)
- ApplicationMaster
- Container
- 作業提交全過程
- JobHistoryServer 使用
- 資源調度器
- 先進先出調度器(FIFO)
- 容量調度器(Capacity Scheduler)
- 公平調度器(Fair Scheduler)
- Yarn 常用命令
- Zookeeper
- zookeeper是什么?
- zookeeper完全分布式搭建
- Zookeeper特點
- Zookeeper數據結構
- Zookeeper 內部原理
- 選舉機制
- stat 信息中字段解釋
- 選擇機制中的概念
- 選舉消息內容
- 監聽器原理
- Hadoop 高可用集群搭建
- Zookeeper 應用
- Zookeeper Shell操作
- Zookeeper Java應用
- Hive
- Hive是什么?
- Hive的優缺點
- Hive架構
- Hive元數據存儲模式
- 內嵌模式
- 本地模式
- 遠程模式
- Hive環境搭建
- 偽分布式環境搭建
- Hive命令工具
- 命令行模式
- 交互模式
- Hive數據類型
- Hive數據結構
- 參數配置方式
- Hive數據庫
- 數據庫存儲位置
- 數據庫操作
- 表的創建
- 建表基本語法
- 內部表
- 外部表
- 臨時表
- 建表高階語句
- 表的刪除與修改
- 分區表
- 靜態分區
- 動態分區
- 分桶表
- 創建分桶表
- 分桶抽樣
- Hive視圖
- 視圖的創建
- 側視圖Lateral View
- Hive數據導入導出
- 導入數據
- 導出數據
- 查詢表數據量
- Hive事務
- 事務是什么?
- Hive事務的局限性和特點
- Hive事務的開啟和設置
- Hive PLSQL
- Hive高階查詢
- 查詢基本語法
- 基本查詢
- distinct去重
- where語句
- 列正則表達式
- 虛擬列
- CTE查詢
- 嵌套查詢
- join語句
- 內連接
- 左連接
- 右連接
- 全連接
- 多表連接
- 笛卡爾積
- left semi join
- group by分組
- having刷選
- union與union all
- 排序
- order by
- sort by
- distribute by
- cluster by
- 聚合運算
- 基本聚合
- 高級聚合
- 窗口函數
- 序列窗口函數
- 聚合窗口函數
- 分析窗口函數
- 窗口函數練習
- 窗口子句
- Hive函數
- Hive函數分類
- 字符串函數
- 類型轉換函數
- 數學函數
- 日期函數
- 集合函數
- 條件函數
- 聚合函數
- 表生成函數
- 自定義Hive函數
- 自定義函數分類
- 自定義Hive函數流程
- 添加JAR包的方式
- 自定義臨時函數
- 自定義永久函數
- Hive優化
- Hive性能調優工具
- EXPLAIN
- ANALYZE
- Fetch抓取
- 本地模式
- 表的優化
- 小表 join 大表
- 大表 join 大表
- 開啟Map Join
- group by
- count(distinct)
- 笛卡爾積
- 行列過濾
- 動態分區調整
- 分區分桶表
- 數據傾斜
- 數據傾斜原因
- 調整Map數
- 調整Reduce數
- 產生數據傾斜的場景
- 并行執行
- 嚴格模式
- JVM重用
- 推測執行
- 啟用CBO
- 啟動矢量化
- 使用Tez引擎
- 壓縮算法和文件格式
- 文件格式
- 壓縮算法
- Zeppelin
- Zeppelin是什么?
- Zeppelin安裝
- 配置Hive解釋器
- Hbase
- Hbase是什么?
- Hbase環境搭建
- Hbase分布式環境搭建
- Hbase偽分布式環境搭建
- Hbase架構
- Hbase架構組件
- Hbase數據存儲結構
- Hbase原理
- Hbase Shell
- 基本操作
- 表操作
- namespace
- Hbase Java Api
- Phoenix集成Hbase
- Phoenix是什么?
- 安裝Phoenix
- Phoenix數據類型
- Phoenix Shell
- HBase與Hive集成
- HBase與Hive的對比
- HBase與Hive集成使用
- Hbase與Hive集成原理
- HBase優化
- RowKey設計
- 內存優化
- 基礎優化
- Hbase管理
- 權限管理
- Region管理
- Region的自動拆分
- Region的預拆分
- 到底采用哪種拆分策略?
- Region的合并
- HFile的合并
- 為什么要有HFile的合并
- HFile合并方式
- Compaction執行時間
- Compaction相關控制參數
- 演示示例
- Sqoop
- Sqoop是什么?
- Sqoop環境搭建
- RDBMS導入到HDFS
- RDBMS導入到Hive
- RDBMS導入到Hbase
- HDFS導出到RDBMS
- 使用sqoop腳本
- Sqoop常用命令
- Hadoop數據模型
- TextFile
- SequenceFile
- Avro
- Parquet
- RC&ORC
- 文件存儲格式比較
- Spark
- Spark是什么?
- Spark優勢
- Spark與MapReduce比較
- Spark技術棧
- Spark安裝
- Spark Shell
- Spark架構
- Spark編程入口
- 編程入口API
- SparkContext
- SparkSession
- Spark的maven依賴
- Spark RDD編程
- Spark核心數據結構-RDD
- RDD 概念
- RDD 特性
- RDD編程
- RDD編程流程
- pom依賴
- 創建算子
- 轉換算子
- 動作算子
- 持久化算子
- RDD 與閉包
- csv/json數據源
- Spark分布式計算原理
- RDD依賴
- RDD轉換
- RDD依賴
- DAG工作原理
- Spark Shuffle原理
- Shuffle的作用
- ShuffleManager組件
- Shuffle實踐
- RDD持久化
- 緩存機制
- 檢查點
- 檢查點與緩存的區別
- RDD共享變量
- 廣播變量
- 累計器
- RDD分區設計
- 數據傾斜
- 數據傾斜的根本原因
- 定位導致的數據傾斜
- 常見數據傾斜解決方案
- Spark SQL
- SQL on Hadoop
- Spark SQL是什么
- Spark SQL特點
- Spark SQL架構
- Spark SQL運行原理
- Spark SQL編程
- Spark SQL編程入口
- 創建Dataset
- Dataset是什么
- SparkSession創建Dataset
- 樣例類創建Dataset
- 創建DataFrame
- DataFrame是什么
- 結構化數據文件創建DataFrame
- RDD創建DataFrame
- Hive表創建DataFrame
- JDBC創建DataFrame
- SparkSession創建
- RDD、DataFrame、Dataset
- 三者對比
- 三者相互轉換
- RDD轉換為DataFrame
- DataFrame轉換為RDD
- DataFrame API
- DataFrame API分類
- Action 操作
- 基礎 Dataset 函數
- 強類型轉換
- 弱類型轉換
- Spark SQL外部數據源
- Parquet文件
- Hive表
- RDBMS表
- JSON/CSV
- Spark SQL函數
- Spark SQL內置函數
- 自定SparkSQL函數
- Spark SQL CLI
- Spark SQL性能優化
- Spark GraphX圖形數據分析
- 為什么需要圖計算
- 圖的概念
- 圖的術語
- 圖的經典表示法
- Spark Graphix簡介
- Graphx核心抽象
- Graphx Scala API
- 核心組件
- 屬性圖應用示例1
- 屬性圖應用示例2
- 查看圖信息
- 圖的算子
- 連通分量
- PageRank算法
- Pregel分布式計算框架
- Flume日志收集
- Flume是什么?
- Flume官方文檔
- Flume架構
- Flume安裝
- Flume使用過程
- Flume組件
- Flume工作流程
- Flume事務
- Source、Channel、Sink文檔
- Source文檔
- Channel文檔
- Sink文檔
- Flume攔截器
- Flume攔截器概念
- 配置攔截器
- 自定義攔截器
- Flume可靠性保證
- 故障轉移
- 負載均衡
- 多層代理
- 多路復用
- Kafka
- 消息中間件MQ
- Kafka是什么?
- Kafka安裝
- Kafka本地單機部署
- Kafka基本命令使用
- Topic的生產與消費
- 基本命令
- 查看kafka目錄
- Kafka架構
- Kafka Topic
- Kafka Producer
- Kafka Consumer
- Kafka Partition
- Kafka Message
- Kafka Broker
- 存儲策略
- ZooKeeper在Kafka中的作用
- 副本同步
- 容災
- 高吞吐
- Leader均衡機制
- Kafka Scala API
- Producer API
- Consumer API
- Kafka優化
- 消費者參數優化
- 生產者參數優化
- Spark Streaming
- 什么是流?
- 批處理和流處理
- Spark Streaming簡介
- 流數據處理架構
- 內部工作流程
- StreamingContext組件
- SparkStreaming的編程入口
- WordCount案例
- DStream
- DStream是什么?
- Input DStream與Receivers接收器
- DStream API
- 轉換操作
- 輸出操作
- 數據源
- 數據源分類
- Socket數據源
- 統計HDFS文件的詞頻
- 處理狀態數據
- SparkStreaming整合SparkSQL
- SparkStreaming整合Flume
- SparkStreaming整合Kafka
- 自定義數據源
- Spark Streaming優化策略
- 優化運行時間
- 優化內存使用
- 數據倉庫
- 數據倉庫是什么?
- 數據倉庫的意義
- 數據倉庫和數據庫的區別
- OLTP和OLAP的區別
- OLTP的特點
- OLAP的特點
- OLTP與OLAP對比
- 數據倉庫架構
- Inmon架構
- Kimball架構
- 混合型架構
- 數據倉庫的解決方案
- 數據ETL
- 數據倉庫建模流程
- 維度模型
- 星型模式
- 雪花模型
- 星座模型
- 數據ETL處理
- 數倉分層術語
- 數據抽取方式
- CDC抽取方案
- 數據轉換
- 常見的ETL工具