Hive中如何快速的複製一張分割槽表(包括資料)

2022-02-19 00:48:33 字數 2550 閱讀 1169

**:

關鍵字: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>show partitions t1;

okpt=2015-09-11

pt=2015-09-12

timetaken:0.11seconds,fetched:2row(s)

hive>desc t1;

okid string

pt string

# partition information

# col_name data_type comment

pt string

timetaken:0.123seconds,fetched:7row(s)

hive>select*fromt1;

okx 2015-09-11

y 2015-09-12

timetaken:0.095seconds,fetched:2row(s)

hive>

建立一張相同表結構的新錶t2;

hive>create table t2 like t1;

oktimetaken:0.162seconds

hive>desc t2;

okid string

pt string

# partition information

# col_name data_type comment

pt string

timetaken:0.139seconds,fetched:7row(s)

hive>show partitions t2;

oktimetaken:0.082seconds

使用hadoop fs -cp命令把t1對應hdfs目錄的所有資料夾複製到t2對應的hdfs目錄下:

[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

在hive用使用msck repair table t2;修復新錶t2的分割槽元資料;

hive>show partitions t2;

oktimetaken:0.082seconds

hive>msck repair table t2;

okpartitionsnotinmetastore:t2:pt=2015-09-11t2:pt=2015-09-12

repair:addedpartition to metastore t2:pt=2015-09-11

repair:addedpartition to metastore t2:pt=2015-09-12

timetaken:0.249seconds,fetched:3row(s)

hive>show partitions t2;

okpt=2015-09-11

pt=2015-09-12

timetaken:0.068seconds,fetched:2row(s)

hive>select*fromt2;

okx 2015-09-11

y 2015-09-12

timetaken:0.123seconds,fetched:2row(s)

hive>

ok,新錶t2已經複製好了,它和t1有著相同的表結構,分割槽結構,分割槽以及資料。

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...