關鍵字:hive 複製表
hive中有時候會遇到複製表的需求,複製表指的是複製表結構和資料。
如果是針對非分割槽表,那很簡單,可以使用create table new_table as select * from old_table;
那麼如果是分割槽表呢?
首先想到的辦法可能是:
先建立一張和old_table結構相同的new_table,包括分割槽;可以使用create table new_table like old_table;
接下來使用動態分割槽,把old_table的資料insert到new_table中。
這個方法當然可以,但可能不是最快的。
其實可以這樣做:
1. create table new_table like old_table;
2. 使用hadoop fs -cp 命令,把old_table對應的hdfs目錄的資料夾全部拷貝到new_table對應的hdfs目錄下;
3. 使用msck repair table new_table;修復新錶的分割槽元資料;
看例子:
有一張分割槽表t1,只有兩個分割槽,每個分割槽中都有一條資料,如下:
hive建立一張相同表結構的新錶t2;>
show partitions t1;ok
pt=2015-09
-11pt=
2015-09
-12time
taken
:0.11
seconds
,fetched:2
row(s)
hive
>
desc t1;ok
id
string
pt
string
# partition information
# col_name data_type comment
pt
string
time
taken
:0.123
seconds
,fetched:7
row(s)
hive
>
select
*fromt1;
okx
2015-09
-11y
2015-09
-12time
taken
:0.095
seconds
,fetched:2
row(s)
hive
>
hive使用hadoop fs -cp命令把t1對應hdfs目錄的所有資料夾複製到t2對應的hdfs目錄下:>
create table t2 like t1;ok
time
taken
:0.162
seconds
hive
>
desc t2;ok
id
string
pt
string
# partition information
# col_name data_type comment
pt
string
time
taken
:0.139
seconds
,fetched:7
row(s)
hive
>
show partitions t2;ok
time
taken
:0.082
seconds
[在hive用使用msck repair table t2;修復新錶t2的分割槽元資料;liuxiaowen@dev
~]$ hadoop fs
-cp
/hivedata
/warehouse
/liuxiaowen.db
/t1/* /hivedata/warehouse/liuxiaowen.db/t2/
[liuxiaowen@dev ~]$ hadoop fs -ls /hivedata/warehouse/liuxiaowen.db/t2/
found 2 items
drwxr-xr-x - liuxiaowen liuxiaowen 0 2015-09-11 17:17 /hivedata/warehouse/liuxiaowen.db/t2/pt=2015-09-11
drwxr-xr-x - liuxiaowen liuxiaowen 0 2015-09-11 17:17 /hivedata/warehouse/liuxiaowen.db/t2/pt=2015-09-12
hiveok,新錶t2已經複製好了,它和t1有著相同的表結構,分割槽結構,分割槽以及資料。>
show partitions t2;ok
time
taken
:0.082
seconds
hive
>
msck repair table t2;ok
partitions
notin
metastore:t2
:pt=2015-09
-11t2:
pt=2015-09
-12repair
:added
partition to metastore t2:pt
=2015-09
-11repair
:added
partition to metastore t2:pt
=2015-09
-12time
taken
:0.249
seconds
,fetched:3
row(s)
hive
>
show partitions t2;ok
pt=2015-09
-11pt=
2015-09
-12time
taken
:0.068
seconds
,fetched:2
row(s)
hive
>
select
*fromt2;
okx
2015-09
-11y
2015-09
-12time
taken
:0.123
seconds
,fetched:2
row(s)
hive
>
Hive中如何快速的複製一張分割槽表(包括資料)
關鍵字 hive 複製表 hive中有時候會遇到複製表的需求,複製表指的是複製表結構和資料。如果是針對非分割槽表,那很簡單,可以使用create table new table as select from old table 那麼如果是分割槽表呢?首先想到的辦法可能是 先建立一張和old tabl...
Hive中如何快速的複製一張分割槽表(包括資料)
hive中有時候會遇到複製表的需求,複製表指的是複製表結構和資料。如果是針對非分割槽表,那很簡單,可以使用create table new table as select from old table 那麼如果是分割槽表呢?首先想到的辦法可能是 先建立一張和old table結構相同的new tab...
從一張表中複製資料到另一張表中
分為兩種情況,一種是目標表不存在,另一種是目標表已存在,語法是不同的。分別以sqlserver和oracle為例,兩者略有不同。sqlserver中,如果目標表不存在 select into新錶名from舊表名 sqlserver中,如果目標表已存在 insertinto新錶名select from...