1

以下のように、extract_timestamp (yyyy-mm-dd hh:mm:ss) で分割された外部ハイブ テーブルの従業員があります。

empid   empname     extract_time
1       abc         2019-05-17 00:00:00
2       def         2019-05-18 14:21:00

extract_time でパーティションを削除し、年、月、日のパーティションに変更しようとしています。これについては、以下の方法に従っています。

1. year month と day のパーティションを持つ新しいテーブル employee_new を作成します。

 create external table employee_new
(empid int,
 empname string
)
partitioned by (year int,month int,day int)
location '/user/emp/data/employee_new.txt';

2. employee テーブルからデータを選択して、employee_new に上書きを挿入します。

insert overwrite into employee_new as select*,year(extract_time),month(extract_time)
,day(extract_time) 
from employee

3. employee と employee_new を削除し、/user/emp/data/employee_new.txt の上に employee テーブルを作成します。

この方法が効率的かどうか、また同じことを行うより良い方法があれば教えてください。

4

1 に答える 1