在昨天的基礎上,做的Hive的應用方法
接着已經搭建配置好後,直接在根目錄下進行hive(按課件說明,也要先進行啟動HDFS和YARN)
建立create//删除drop//檢視show//使用use——資料庫、表
導入檔案/資料:
①把本地的.txt檔案裡的資料放到hive後:
或先傳到本地,再傳到HDFS上(可以在第二個上上傳到hadoop)
hadoop指令
[[email protected] ~]$ hadoop fs -put 519.txt /user/hive/warehouse/xp.db/xpp
519.txt是在本地的檔案 後面是xp資料庫下的xpp的表下
②用load的指令:(沒太大差別)
load
先在active建立表——在standby裡rz檔案/資料--在pwd查找路徑——
load data local inpath ‘路徑/檔案名.txt’
into table 表名;
不加local就是HDFS了;
可以反複的插入資料;
overwrite 覆寫(同名的檔案)
直接into :是追加
當然,再次之前,要先在active上把表建好,這裡最好不要用簡單的建立表的語句,根據不同的條件和需求,一次性完成:
文法 (下拉看說明
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type , … …)]
[PARTITIONED BY (col_name data_type ...)]
[SORTED BY (col_name [ASC|DESC], ...)]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
說明
external可以讓使用者建立一個外部表,在建表的同時指定一個指向HDFS上的實際資料的路徑LOCATION,而不加EXTERNAL關鍵字是建立内部表,會将資料移動到資料倉庫指向HDFS預設路徑/user/hive/warehouse/;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。在删除表的時候,内部表的中繼資料和真實資料(表内容)會被一起删除,而外部表隻删除中繼資料,不删除真實資料(表内容);if not exists如果相同名字的表已經存在,則抛出異常;使用者可以用 IF NOT EXISTS 選項來忽略這個異常;
sorted by按字段排序(asc,desc);
stored as存儲檔案類型如果檔案資料是純文字,可以使用 STORED AS TEXTFILE。如果資料需要壓縮,使用 STORED AS SEQUENCE;
row format 指定資料切分格式, DELIMITED [FIELDS TERMINATED BY char] [COLLECTION(集合類型--Map或者數組之類的結構,例如這麼存儲,1,位址資訊:中央大街) ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES(行 預設按照回車符) TERMINATED BY char]
partitioned by建立表時指定的partition的分區空間
内部表:存放在指定/預設的路徑下
外部表:放在指定的路徑下
基本的情況就是:
hive> create table if not exists xpp(id int,name string)
> row format delimited fields terminated by ','; 以,為分割
順序:建資料庫——建表(完整的)——把本地檔案傳到表裡——查詢表
hive> select * from xpp;
以及一些基本的條件查詢(where)等;
值得注意的是:
在select count(*) from xpp;
這樣就開始了進行MapReduce(查詢)的程序:
·和一般的情況來說,會很慢,更合适用于大資料集的離線計算
有差錯的話,就可能之前的錯誤操作亂了,重新進hive,重新進一遍你自己的資料庫和你自己的表,再進行後面操作。
分區:
建立表的時候,第二行:partitioned by (新的一列名 類型)
插入資料的時候,分區直接在括号裡寫上:
建立分區的那一行要在row分割那一行的上面
建立的資料庫、表、表資訊等等可以在:
1.web端看
2.在mysql用戶端看