天天看點

Hive之import和export使用詳解

在hive-0.8.0後引入了import/export指令。

Export指令可以導出一張表或分區的資料和中繼資料資訊到一個輸出位置,并且導出資料可以被移動到另一個hadoop叢集或hive執行個體,并且可以通過import指令導入資料。

當導出一個分區表,原始資料可能在hdfs的不同位置,export/import指令也支援導出分區表的不同子分區。

導出的中繼資料存儲在目标目錄,并且資料檔案是存儲在不同的子目錄下。

Export/import指令可以獨立工作在使用存儲中繼資料的rdbms中。

一、文法

Export文法:

EXPORT TABLE tablename [PARTITION (part_column="value"[, ...])]

TO 'export_target_path' [ FOR replication('eventid') ]

Import文法:

IMPORT [[EXTERNAL] TABLE new_or_original_tablename [PARTITION (part_column="value"[, ...])]]

FROM 'source_path'

[LOCATION 'import_target_path']

二、使用複制:

Export/import指令當在複制環境中使用時略有不同,并且确定使用該工具在兩個資料倉庫之間使用複制。在大多數情況下,使用者不需要使用這個附加功能,除非手動引導倉庫之間的複制,這樣它可以作為一個增量複制工具。

他們使用一個特殊的表屬性“repl.last.id”在一個表或分區對象中,確定export/import工具每次複制的資料時最近更新的資料。在導出完成後,會對export的dump檔案使用一個id打一個複制标簽,表示在源倉庫內建商單調遞增的。此外,為複制導出列印的标記不會導緻錯誤如果試圖導出一個對象但是标記列目前不存在。

在import方面,沒有文法變化,但是import有一個一般性的标簽對于複制的dump檔案,他講檢查要複制的對象是否存在,如果對象已經存在,它檢查對象的repl.last.id屬性,确定是否導入目前對象的最新資料對于目标倉庫,如果更新是最新的,那麼它将複制最新的資訊,如果更新已經是很舊的了對于已經存在的對象,那麼更新将被忽略,并且不會産生錯誤。

對于那些使用export進行首次手動引導用例,使用者推薦使用“引導”标簽,

三、示例

1、簡單導入和導出

export table department to 'hdfs_exports_location/department';

import from 'hdfs_exports_location/department';

2、在import時重命名表

import table imported_dept from 'hdfs_exports_location/department';

3、導出分區并且導入

export table employee partition (emp_country="in", emp_state="ka") to 'hdfs_exports_location/employee';

import from 'hdfs_exports_location/employee';

4、導出表并且導入到分區表分區

export table employee to 'hdfs_exports_location/employee';

import table employee partition (emp_country="us", emp_state="tn") from 'hdfs_exports_location/employee';

5、指定導入位置

import table department from 'hdfs_exports_location/department'

       location 'import_target_location/department';

6、導入作為一個外部表

import external table department from 'hdfs_exports_location/department';

繼續閱讀