更改配置单元的分区规范 table 并移动数据
Changing the partition spec of a hive table and move data
我有一个外部配置单元 table 员工,按 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.创建一个新的 table 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。通过从员工 table
中选择数据将覆盖插入 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 table
请告诉我这种方法是否有效,以及是否有更好的方法来做到这一点。
仅按 date yyyy-MM-dd
分区,如果可能,前提是上游进程可以将小时文件写入每日文件夹。对于这么小的 table 分别按年、月和日进行分区似乎有点过分了。文件夹仍然太多。
如果 table 按日期 yyyy-MM-dd 分区,分区修剪将适用于您的使用场景,因为您是按日或按年或按月查询。
在这种情况下要按年份过滤,您需要提供
where date >= '2019-01-01' and date < '2020-01-01'
条件,
按月筛选:
where date >= '2019-01-01' and date < '2020-02-01'
和天:where date = '2019-01-01'
文件系统列表将工作得更快。
如果无法重新设计上游进程以写入 yyyy-MM-dd 文件夹,那么您在问题(yyyy/MM/dd 文件夹)中描述的新设计是唯一的解决方案。
我有一个外部配置单元 table 员工,按 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.创建一个新的 table 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。通过从员工 table
中选择数据将覆盖插入 employee_newinsert 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 table请告诉我这种方法是否有效,以及是否有更好的方法来做到这一点。
仅按 date yyyy-MM-dd
分区,如果可能,前提是上游进程可以将小时文件写入每日文件夹。对于这么小的 table 分别按年、月和日进行分区似乎有点过分了。文件夹仍然太多。
如果 table 按日期 yyyy-MM-dd 分区,分区修剪将适用于您的使用场景,因为您是按日或按年或按月查询。
在这种情况下要按年份过滤,您需要提供
where date >= '2019-01-01' and date < '2020-01-01'
条件,
按月筛选:
where date >= '2019-01-01' and date < '2020-02-01'
和天:where date = '2019-01-01'
文件系统列表将工作得更快。
如果无法重新设计上游进程以写入 yyyy-MM-dd 文件夹,那么您在问题(yyyy/MM/dd 文件夹)中描述的新设计是唯一的解决方案。