01. Hive操作HQL語句的兩個參數(shù)
假設(shè)公司讓你定時在凌晨3點(diǎn)執(zhí)行hive的數(shù)據(jù)清洗操作,執(zhí)行完第一個任務(wù)緊接著執(zhí)行第二個任務(wù)腺办,如何讓hive定時執(zhí)行這樣的操作焰手?
- 寫一個Java程序,使用JDBC定時執(zhí)行這樣的操作怀喉,但是由于JDBC復(fù)雜书妻,費(fèi)時費(fèi)力,所有不常用
- 常用:(任務(wù)調(diào)度框架躬拢,定時周期性的執(zhí)行某個任務(wù))
oozie -> 流式任務(wù)調(diào)度框架
azakban -> 流式任務(wù)調(diào)度框架
crontab(京東)
之前對hive進(jìn)行操作的時候(建庫躲履、建表等)都是在hive的命令行中執(zhí)行。所以官方提供了兩種方法:
bin/hive -e "hive語句" # hive語句可以直接寫到雙引號中聊闯。
bin/hive -f 文件.hql # 復(fù)雜的hql語句寫到文件中工猜,-f 可以執(zhí)行hql腳本
bin/hive -e
bin/hive -f
創(chuàng)建員工表
02. 導(dǎo)入數(shù)據(jù)
hive (default)> load data local inpath '/opt/modules/CDH/hive-0.13.1-cdh5.3.6/hql/emp.txt'into table db_hive.emp;
hive (default)> load data local inpath '/opt/modules/CDH/hive-0.13.1-cdh5.3.6/hql/dept.txt'into table db_hive.dept;
導(dǎo)入數(shù)據(jù)
03. Hive歷史命令存放地
cat ~/.hivehistory
Hive歷史命令
主要用于排查邏輯錯誤或者查看常用命令
04. Hive臨時生效設(shè)置
固定語法:set 屬性名=屬性值
例如:set hive.cli.print.header=false;
05. Hive的內(nèi)部表和外部表
集群數(shù)據(jù)遷移的時候,需要對當(dāng)前某個目錄下的數(shù)據(jù)進(jìn)行遷移菱蔬,要對數(shù)據(jù)進(jìn)行分開管理篷帅,這時候就要用到location
的關(guān)鍵字
hive> CREATE TABLE custom_table(id int, name string) location '/custom/z/hive/somedatabase'
hive默認(rèn)創(chuàng)建的是內(nèi)部表( inner):
hive> CREATE TABLE
顯示指定: external
hive> CREATE EXTERNAL TABLE
- 內(nèi)部表:
刪除表數(shù)據(jù)時,連同數(shù)據(jù)源以及元數(shù)據(jù)信息同時刪除 - 外部表:
- 只會刪除元數(shù)據(jù)信息拴泌。
- 共享數(shù)據(jù)魏身,外部表相對而言也更加方便和安全。
-
相同之處:
如果你導(dǎo)入數(shù)據(jù)時蚪腐,操作于HDFS上箭昵,則會將數(shù)據(jù)進(jìn)行遷移(刪除源文件),并在metastore留下記錄削茁,而不是copy數(shù)據(jù)源宙枷。
創(chuàng)建內(nèi)部表、外部表茧跋,并向外部表插入數(shù)據(jù)
查看外部表的數(shù)據(jù)
在HDFS上也有外部表的信息
接下來要刪除掉這個外部表
刪除外部表
HDFS上仍然有fruit2這個外部表的數(shù)據(jù)
HDFS上仍然有fruit2這個外部表的數(shù)據(jù)
刪除內(nèi)部表:
刪除內(nèi)部表:
在HDFS上沒有fruit內(nèi)部表的信息了
hive > show tables
-> 所展示出來的信息依賴于元數(shù)據(jù)信息慰丛,metastore中有的數(shù)據(jù)才能夠進(jìn)行show等操作。
刪除外部表是不會刪除數(shù)據(jù)本身的瘾杭,是將metastore中的元數(shù)據(jù)刪除诅病,只是將數(shù)據(jù)和字段的雙射關(guān)系刪除(我的理解)。