hive創建內外部表關聯HDFS文件

參考此博主文章:http://www.javashuo.com/article/p-srxrqjfb-dy.htmlhtml

1、關於Hive的insert into 和 insert overwrite與數據分區

1》數據分區:數據庫分區的主要目的是爲了在特定的SQL操做中減小數據讀寫的總量以縮減響應時間,主要包括兩種分區形式:水平分區與垂直分區。水平分區是對錶進行行分區。而垂直分區是對列進行分區,通常是經過對錶的垂直劃分來減小目標表的寬度,經常使用的是水平分區。
2》創建分區語法:node

create external table if not exists tablename(

        a string,

        b string)

 partitioned by (year string,month string)

 row format delimited fields terminated by ',';

3》hive三種方式對包含分區字段的表進行數據插入:web

一、靜態插入數據:要求插入數據時指定與建表時相同的分區字段,如:
insert overwrite tablename (year='2019', month='06') select a, b from tablename2;
二、動靜混合分區插入:要求指定部分分區字段的值,如:
insert overwrite tablename (year='2019', month) select a, b from tablename2;
三、動態分區插入:只指定分區字段,不用指定值,如:
insert overwrite tablename (year, month) select a, b from tablename2;

4》hive動態分區設置相關參數:sql

Hive.exec.dynamic.partition  是否啓動動態分區。false(不開啓) true(開啓)默認是 false

hive.exec.dynamic.partition.mode  打開動態分區後,動態分區的模式,有 strict和 nonstrict 兩個值可選,strict 要求至少包含一個靜態分區列,nonstrict則無此要求。各自的好處,你們本身查看哈。

hive.exec.max.dynamic.partitions 容許的最大的動態分區的個數。能夠手動增長分區。默認1000

hive.exec.max.dynamic.partitions.pernode 一個 mapreduce job所容許的最大的動態分區的個數。默認是100

5》數據插入之insert into 和 insert overwrite
一、定義:hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行。一般hive包括如下四種數據導入方式:數據庫

(1)、從本地文件系統中導入數據到Hive表;

(2)、從HDFS上導入數據到Hive表;

(3)、在建立表的時候經過從別的表中查詢出相應的記錄並插入到所建立的表中;

(4)、從別的表中查詢出相應的數據並導入到Hive表中。

INSERT INTOsvg

樣例:
 insert into table tablename1 select a, b, c from tablename2;

INSERT OVERWRITE工具

樣例:
insert overwrite table tablename1 select a, b, c from tablename2;

二、區別:insert into 與 insert overwrite 均可以向hive表中插入數據,可是insert into直接追加到表中數據的尾部,而insert overwrite會重寫數據,既先進行刪除,再寫入。若是存在分區的狀況,insert overwrite會只重寫當前分區數據。oop