MSCK REPAIR TABLE <tablename>显示无错误,但未检测到任何分区

时间:2019-04-26 10:19:46

标签: hadoop hive

我对 HIVE 环境非常陌生。

我正在尝试在带有分区的配置单元中创建一个外部表。

例如只有两个分区: enter image description here

我创建了一个外部表:

CREATE EXTERNAL TABLE test
(col1 INT, col2 BIGINT, col3 STRING, col4 STRING, col5 STRING, col6 STRING, 
col7 BOOLEAN, col8 INT, col9 TIMESTAMP, col10 INT, col11 TIMESTAMP, 
col12 STRING, col13 DOUBLE, col14 DOUBLE, col15 DOUBLE, 
col16 DOUBLE,col17 BIGINT, col18 INT)
PARTITIONED BY (dataDate STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
tblproperties ("skip.header.line.count"="1");

表已成功创建。然后添加第一个分区:

ALTER TABLE test ADD IF NOT EXISTS
PARTITION(dataDate='20171014')
LOCATION '/user/test/Partition_Trial';

然后将分区写入表中。

enter image description here

然后我尝试使用添加下一个分区

MSCK REPAIR TABLE test;

没有错误。

enter image description here

但是未读取分区。

enter image description here

我期望 MSCK 函数能够读取其他分区。

我一直在阅读其他人的类似问题,但是看起来并不像这个问题。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的 test 表是在 /user/test/ hdfs目录中创建的。

  • 当我们运行msck修复表时,配置单元会检查是否有任何新分区添加到/user/test/目录中,但 not all sub directories recursively

  • 即您所有的分区都在 /user/test/Partition_Trial 目录下(在测试目录内),这就是msck repair table无法找到新添加的分区的原因。

解决此问题的选项:

  1. 使用ALTER TABLE test ADD IF NOT EXISTS PARTITION添加所有分区。

    (or)

  2. 将表格位置更改为/user/test/Partition_Trial

    (or)

  3. 保持表位置不变,并将所有新分区添加到/user/test目录。