6.小时表天分区和小时分区顺序错误,怎么办?

目录

  • 一、解决思路
  • 二、修复表结构
    • 2.1 建表
    • 2.2查询数据
    • 2.3查询数据路径
    • 2.4删表重建
    • 2.5查询表结构
    • 2.6查询数据
  • 三、恢复数据
    • 3.1方案1 直接移动原分区数据到新分区下
    • 3.2方案2 将分区路径指导原数据路径
    • 3.3方案3 通过临时表恢复数据

一、解决思路

对于这个问题,主要分为2个步骤,一是修复表结构,二是恢复数据,下面就按照这个思路进行处理。

二、修复表结构

修复表结构,这里通过删表重建来处理。

2.1 建表

CREATE EXTERNAL TABLE IF NOT EXISTS bi.test_partition
(
     id        INT COMMENT '编号'
) COMMENT '修改Location测试'
PARTITIONED BY (pt_hour VARCHAR(2) COMMENT '小时分区', pt_day VARCHAR(8) COMMENT '天分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS ORC
LOCATION 'hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_partition'
TBLPROPERTIES ("orc.compress"="ZLIB")
;

2.2查询数据

SELECT
     pt_day
    ,pt_hour
    ,id
FROM bi.test_partition
WHERE pt_day = '20240127'
ORDER BY pt_day
        ,pt_hour
        ,id
ASC
;

6.小时表天分区和小时分区顺序错误,怎么办?_第1张图片
可以看到,插入数据后,数据可以正常查询。

2.3查询数据路径

hdfs dfs -ls hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_partition;
hdfs dfs -ls hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_partition/pt_hour=00;

查询数据路径
从查询结果可以看出,数据路径中,天分区和小时分区的顺序确实是反的。

2.4删表重建

DROP TABLE IF EXISTS bi.test_partition;
CREATE EXTERNAL TABLE IF NOT EXISTS bi.test_partition
(
     id        INT COMMENT '编号'
) COMMENT '修改Location测试'
PARTITIONED BY (pt_day VARCHAR(8) COMMENT '天分区', pt_hour VARCHAR(2) COMMENT '小时分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS ORC
LOCATION 'hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_partition'
TBLPROPERTIES ("orc.compress"="ZLIB")
;

2.5查询表结构

DESC FORMATTED bi.test_partition;

6.小时表天分区和小时分区顺序错误,怎么办?_第2张图片

2.6查询数据

SELECT
     pt_day
    ,pt_hour
    ,id
FROM bi.test_partition
WHERE pt_day = '20240127'
ORDER BY pt_day
        ,pt_hour
        ,id
ASC
;

查询结果
从执行结果可以看出,修复表结构后,已经无法查询到数据了。

三、恢复数据

3.1方案1 直接移动原分区数据到新分区下

3.2方案2 将分区路径指导原数据路径

3.3方案3 通过临时表恢复数据

你可能感兴趣的:(#,DDL相关,hive)