23 大資料之hive(第四部 hive基礎)
hive 其他操作命令
-
hive中執行hdfs命令
以dfs開頭,同樣是分號結尾,不過這種方式比起直接命令列操作會快一些,因為他不需要啟動jvm虛擬機器和關閉hive> dfs -ls /user; Found 1 items drwxr-xr-x - root supergroup 0 2020-11-22 02:35 /user/hive hive>
-
hive中執行Linux命令
hive> ! ls /root; anaconda-ks.cfg file hive.hql name nameb scp.sh split ssh.sh hive>
hive 其他配置屬行
<property>
<!-- 查詢時顯示列名 -->
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<!-- 在互動命令列顯示庫名資訊 -->
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name></name>
<value></value>
</property>
<property>
<name></name>
<value></value>
</property>
<property>
<name></name>
<value></value>
</property>
hive基本資料型別
型別 | 長度 | 解釋 |
---|---|---|
int | 4byte 有符號整數 | 數字型別 |
bigint | 8type 有符號整數 | 數字型別 |
double | 雙精度浮點數 | 小數,如3.14 |
string | 字串 | 字串,使用時需要加引號 |
tinyint | 1byte 有符號整數 | 數字型別 |
boolean | bool型別 | true或者false |
timestamp | 時間型別 |
集合資料型別
資料型別 | 描述 |
---|---|
struct | 可以通過點符號訪問元素內容,例如,如果某個列的資料型別是struct( first struct,last struct),那麼第一個元素可以通過 .first 來引用. |
map | map是一組鍵值對元素集合,使用陣列表示法可以訪問資料,如某個列資料型別是map,其中的鍵值對是 first -> john,last -> doe,那麼可以通過欄位名’last’獲取最後一個元素 |
array | 陣列是一組具有相同名稱和變數的集合,這些變數稱為陣列的元素,每個陣列元素都有一個編號,編號從零開始,如陣列值為[‘liulaoliu’,‘wulaowu’],那麼第二個元素可以用陣列名[1]進行引用 |
集合資料型別演示
準備三條資料資料,寫入檔案中,如/root/test
格式是: 姓名,愛好_愛好,年齡:key_性別:key,城市_國家
liulaoliu,chifan_shuijiao,age:60_gender:nan,beijing_zhongguo
qilaoqi,dayouxi_anmo,age:70_gender:nan,shanghai_zhongguo
wulaowu,yuepao_shuijiao,age:80_gender:nan,xianggang_zhongguo
將其設定為不同的資料型別
hive建表語句
create table test(
name_string string,
hobby_array array<string>,
information_map map<string,string>,
addres_struct struct<city:string,countries:string>
) row format delimited
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
語句解釋;
create table test( -- 建立表名稱
name_string string, -- 列名 型別 為了後期方便列名才用了 列名_型別
hobby_array array<string>, -- array,陣列型別
information_map map<string,string>, -- map,鍵值對元素集合
addres_struct struct<city:string,countries:string> -- struct型別
) row format delimited -- 行格式化 設定
fields terminated by ',' -- 指定列分隔符為逗號
collection items terminated by '_' -- 指定集合分隔符
map keys terminated by ':' -- 指定map鍵值對分隔符為冒號
lines terminated by '\n'; -- 指定換行符,也就是下一行資料了
hive匯入資料
load data local inpath '/root/test' into table test;
檢視錶中的資料
hive (default)> select * from test;
OK
test.name_string test.hobby_array test.information_map test.addres_struct
liulaoliu ["chifan","shuijiao"] {"age":"60","gender":"nan"} {"city":"beijing","countries":"zhongguo"}
qilaoqi ["dayouxi","anmo"] {"age":"70","gender":"nan"} {"city":"shanghai","countries":"zhongguo"}
wulaowu ["yuepao","shuijiao"] {"age":"80","gender":"nan"} {"city":"xianggang","countries":"zhongguo"}
Time taken: 0.144 seconds, Fetched: 3 row(s)
hive (default)>
陣列其實就是Python的列表,後面就是字典.
如下,依舊是之前的取列,但是取出的是列表,可以根據索引取其中一個,如取出列表中的第一列.
hive (default)> select hobby_array from test;
OK
hobby_array
["chifan","shuijiao"]
["dayouxi","anmo"]
["yuepao","shuijiao"]
Time taken: 0.138 seconds, Fetched: 3 row(s)
hive (default)> select hobby_array from test;
取第一列
hive (default)> select hobby_array[0] from test;
OK
_c0
chifan
dayouxi
yuepao
Time taken: 0.364 seconds, Fetched: 3 row(s)
hive (default)>
獲取map的age索引的值
hive (default)> select information_map["age"] from test;
OK
_c0
60
70
80
Time taken: 0.129 seconds, Fetched: 3 row(s)
hive (default)>
結構體的訪問
hive (default)> select information_map["age"],addres_struct.city from test;
OK
_c0 city
60 beijing
70 shanghai
80 xianggang
Time taken: 0.139 seconds, Fetched: 3 row(s)
hive (default)>
列名.結構體中的某一個的key.
型別轉換
hive的原子資料是可以進行隱式轉換的,類似於Java的型別轉換,比如可以吧int型別轉化為bigint型別,但是不能反向轉換,如bigint 轉化為int,但是可以cast
強行轉化.
隱式轉換規則
- 所有整數型別都可以轉化為更廣泛的型別,如tinyint轉化為int, int轉化為bigint,
- 所有整數型別,float,string都可以隱式的轉化為double.
- tinyint,int等都可以轉化為float.
- boolean不能轉化為任何型別
可以使用cast強制轉換,但是如果轉換失敗則會返回NULL.
如(字串轉為數字):
hive (default)> select cast('1' as int);
OK
_c0
1
Time taken: 0.482 seconds, Fetched: 1 row(s)
但是如果有字母字元,則會失敗
hive (default)> select cast('1a' as int);
OK
_c0
NULL
Time taken: 0.452 seconds, Fetched: 1 row(s)
相關文章
- Python基礎學習13-淺拷貝和深拷貝
- OC中常見基礎知識點彙整
- 【Python零基礎】19天從零開始學Python——第一天
- 計算機基礎知識擴充套件篇
- O(nlogn)快速排序-基礎版+詳細註釋
- 深度學習-Tensorflow2.2-預訓練網路{7}-遷移學習基礎針對小資料集-19
- 沒有黑眼圈的小浣熊初學Java基礎的筆記(一)
- Java基礎 第一節 第八課
- JavaScript基礎8
- CSS基礎——浮動(float)【學習筆記】
- vue腳手架基礎
- 薦讀解惑 | FPGA是有門檻的,零基礎並不是你想的那樣,不要再被忽悠了!
- 《Java程式設計邏輯》第3章 類的基礎
- 0基礎學GUI,先從基礎開始1
- 流程控制與陣列—Java基礎學習(二)
- React基礎與原理實現
- Java 學生管理系統(MVC)開源原始碼(基礎版)
- 精盡 MyBatis 原始碼分析 - 基礎支援層
- JS基礎_dom增刪改
- 大資料和Hadoop平臺介紹