学习笔记Hive(三) —— Hive应用(1)—— 数据库定义、创建表
一、任務講解
泰坦尼克號乘客信息存儲與分析
泰坦尼克號乘客信息存儲與分析:
- 創建乘客信息表
- 導入數據到表中
- 統計獲救與死亡情況
- 統計艙位分布情況
- 統計港口登船人數分布情況
- 統計性別與生存率的關系
- 統計客艙等級與生存率的關系
- 統計登船港口與生存率的關系
二、數據庫定義
2.1、HQL語句簡介
HiveQL是一種類SQL語言,用于分析存儲在HDFS中的數據。
不支持事務及更新操作。
HiveQL 語句通過解釋器轉換為MapReduce 作業提交到Hadoop 集群上, 延遲比較大。
2.2、數據類型
基礎數據類型
復雜數據類型
2.3、Hive CLI
1、執行shell命令
用戶不需要退出hive CLI就可以執行簡單的bash shell命令。只要在命令前加上!并且以分號(;)結尾就可以
2、在Hive中使用Hadoop的dfs命令
2.4、創建與查看數據庫
2.5、創建數據表
(中括號表示可選)
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name #[EXTERNAL]:外表/內表 (col_name data_type [COMMENT col_comment], ...)[PARTITIONED BY (col_name data_type, ...)] #分區表 指定字段[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] #字段將分隔符或行間分隔符[STORED AS file_format] #定義存儲格式[LOCATION hdfs_path] #指定表數據存放的路徑三、創建表
3.1、創建內表
在train數據庫下創建表person
(在瀏覽器輸入:master:50070可以看到)
數據內容
person.txt(我放在/opt目錄下)
這里有種簡易的方式導入到hive中就是:先上傳到HDFS:
3.2、創建外表
創建Hive外部表external_person,指定HDFS的路徑為/user/root/external/person
數據內容
person.txt(我放在/opt目錄下)
上傳到hdfs:
*補充:內外部差別
學習了內表和外表,那么疑問來了,它們是不是就差別在能否自定義目錄?其實它們的差別主要體現在刪除,別急!看完下面例子你就明白了!
① 先刪除內表和外表
② 查看它們在hdfs的數據文件是否被刪除
內表被刪除了:
外表沒被刪除:
總結:內表刪除時會把原數據及hdfs上的數據都刪掉,而外表刪除時只會刪掉原數據不會刪掉hdfs上的數據;
3.3、創建泰坦尼克乘客信息表
任務實現:創建泰坦尼克乘客信息表
- 創建一個內/外部表,指定數據的存放路徑。
- 通過HDFS命令導入數據到指定路徑。
創建(內)表
數據文件
train.csv
(導入時刪掉頭一行)
上傳到hdfs
查看:
3.4、靜態分區表
- 創建靜態分區表tidanic_part,字段為:passengerid、survived、 pclass、 name
- 分區字段為gender,按照性別字段sex分區
OK
3.5、動態分區表
- 創建動態分區表tidanic_dynamic_part,字段為:passengerid、survived、 name
- 分區字段為passenderclass,按照pclass值進行分區
(我們可以看出動態分區建表其實和靜態分區的建表是一樣的,他們不同在動態分區進行插入時要初始化)
OK
3.7、創建帶數據的表
- 創建一個tidanic的子集
3.8、創建桶表
- 桶是比表或分區更為細粒度的數據范圍劃分。針對某一列進行桶的組織,對列值哈希,然后除以桶的個數求余,決定將該條記錄存放到哪個桶中。
獲得更高的查詢處理效果
抽樣調查
- 創建桶表,按年齡將數據分到4個桶,抽取兩個桶的數據創建一個新表tidannic_sample
語法:TABLESAMPLE(BUCKET x OUT OF y)
X代表從哪個桶開始抽, y代表抽取桶個數為(桶數/y)個,y必須是桶數的倍數或者因子
總結
以上是生活随笔為你收集整理的学习笔记Hive(三) —— Hive应用(1)—— 数据库定义、创建表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记Hive(二)—— Hive安装
- 下一篇: 学习笔记Spark(六)—— Spark