1.創建內部表和外部表。
內部表和外部表的區別是,內部表在刪除表後,會對錶存儲所在的數據目錄也做刪除操作,外部表刪除後則不會刪除數據所在的目錄。
外部表語法:
drop table if exists t_abc_dept;
create external table t_abc_dept
(
dept_id int comment '機構id ',
dept_code string comment '機構代碼 ',
dept_name string comment '機構名稱 ',
load_tm string comment '加載時間 '
)comment '機構表'
row format delimited fields terminated by '\001'
location '/dm/fin_abc/bsl/t_abc_dept';
內部表語法:
drop table if exists t_abc_dept;
create table t_abc_dept
(
dept_id int comment '機構id ',
dept_code string comment '機構代碼 ',
dept_name string comment '機構名稱 ',
load_tm string comment '加載時間 '
)comment '機構表'
row format delimited fields terminated by '\001'
location '/dm/fin_abc/bsl/t_abc_dept';
他們之間的區別是外部表多了external關健字。一般我們在生產上對需要落地存儲數據的都創建爲外部表,只有中間的計算過程才用內部表。這樣的好處是哪天不小心把結果表刪除了,也不用太擔心,因爲數據還在,我們只要重新創建表定義,把位置引用到之前的位置location '/dm/fin_abc/bsl/t_abc_dept'就好了。
2.分區表。
在關係庫中分區表是爲了把數據量太多了分到多個區進行管理或查詢,在HIVE中除了有這個作用,另一個作用是爲了數據的方便重算,比如有個表要刪除某一天的數據,目前HIVE不支持刪除操作,只有覆蓋操作,所以我們就得把表建成按日的分區表,重算某天的數據,我們只需要重寫某天的分區就行了。語法如下:
drop table if exists t_abc_order;
create table t_abc_order
(
order_id int comment '訂單id ',
prod_code string comment '產品代碼 ',
load_tm string comment '加載時間 '
)comment '訂單表'
PARTITIONED BY (hq_month_code string)
row format delimited fields terminated by '\001'
location '/dm/fin_abc/bsl/t_abc_order';
3.數據類型
數據類型 |
樣例 |
string |
'abc' |
int |
123 |
double |
123.4 |
date |
2019/8/10 |
array |
['apple','orange','mango'] |
map |
'數學':80,'語文':89,'英語':95 |
以上是比較常用的數據類型,在我們工作中,基本用到這些類型就可以了,其他的大家可以用到的時候再搜索下。
4.窗口函數
目前hive的版本支持的窗口函數都比較多,與oracle支持的一樣。SUM(), MIN(),MAX(),AVG(),ROW_NUMBER(), RANK(), DENSE_RANK(),LAG, LEAD, FIRST_VALUE, LAST_VALUE, GROUPING SET, CUBE, ROLL UP。做數據處理和分析都夠用了。
更多技術文章請關注公衆號BLT328(長按後點識別圖中二維碼):