1. 程式人生 > >008-Hadoop Hive sql語法詳解3-DML 操作:元數據存儲

008-Hadoop Hive sql語法詳解3-DML 操作:元數據存儲

pan 查詢 寫入 所有 not insert語句 int 寫入文件 文件系統

一、概述

hive不支持用insert語句一條一條的進行插入操作,也不支持update操作。數據是以load的方式加載到建立好的表中。數據一旦導入就不可以修改。

DML包括:INSERT插入、UPDATE更新、DELETE刪除

向數據表內加載文件
•將查詢結果插入到Hive表中
•0.8新特性 insert into

二、向數據表內加載文件

•LOAD DATA [LOCAL] INPATH ‘filepath‘ [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]


•Load 操作只是單純的復制/移動操作,將數據文件移動到 Hive 表對應的位置。
•filepath
•相對路徑,例如:project/data1
•絕對路徑,例如: /user/hive/project/data1
•包含模式的完整 URI,例如:hdfs://namenode:9000/user/hive/project/data1
例如:
hive> LOAD DATA LOCAL INPATH ‘./examples/files/kv1.txt‘ OVERWRITE INTO TABLE pokes;

加載本地數據,同時給定分區信息

•加載的目標可以是一個表或者分區。如果表包含分區,必須指定每一個分區的分區名


•filepath 可以引用一個文件(這種情況下,Hive 會將文件移動到表所對應的目錄中)或者是一個目錄(在這種情況下,Hive 會將目錄中的所有文件移動至表所對應的目錄中)
LOCAL關鍵字
•指定了LOCAL,即本地
•load 命令會去查找本地文件系統中的 filepath。如果發現是相對路徑,則路徑會被解釋為相對於當前用戶的當前路徑。用戶也可以為本地文件指定一個完整的 URI,比如:file:///user/hive/project/data1.
•load 命令會將 filepath 中的文件復制到目標文件系統中。目標文件系統由表的位置屬性決定。被復制的數據文件移動到表的數據對應的位置


例如:加載本地數據,同時給定分區信息:

hive> LOAD DATA LOCAL INPATH ‘./examples/files/kv2.txt‘ OVERWRITE INTO TABLE invites PARTITION (ds=‘2008-08-15‘);

• 沒有指定LOCAL
如果 filepath 指向的是一個完整的 URI,hive 會直接使用這個 URI。 否則
•如果沒有指定 schema 或者 authority,Hive 會使用在 hadoop 配置文件中定義的 schema 和 authority,fs.default.name 指定了 Namenode 的 URI
•如果路徑不是絕對的,Hive 相對於 /user/ 進行解釋。 Hive 會將 filepath 中指定的文件內容移動到 table (或者 partition)所指定的路徑中
加載DFS數據 ,同時給定分區信息:
hive> LOAD DATA INPATH ‘/user/myname/kv2.txt‘ OVERWRITE INTO TABLE invites PARTITION (ds=‘2008-08-15‘);
The above command will load data from an HDFS file/directory to the table. Note that loading data from HDFS will result in moving the file/directory. As a result, the operation is almost instantaneous.

OVERWRITE

•指定了OVERWRITE
•目標表(或者分區)中的內容(如果有)會被刪除,然後再將 filepath 指向的文件/目錄中的內容添加到表/分區中。
•如果目標表(分區)已經有一個文件,並且文件名和 filepath 中的文件名沖突,那麽現有的文件會被新文件所替代。

將查詢結果插入Hive表

•將查詢結果插入Hive表
•將查詢結果寫入HDFS文件系統
•基本模式
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement
•多插入模式
FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1
[INSERT OVERWRITE TABLE tablename2 [PARTITION ...] select_statement2] ...
•自動分區模式
INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement


將查詢結果寫入HDFS文件系統


•INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT ... FROM ...
FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2]

•數據寫入文件系統時進行文本序列化,且每列用^A 來區分,\n換行


INSERT INTO


•INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement

008-Hadoop Hive sql語法詳解3-DML 操作:元數據存儲