【问题标题】:MSCK REPAIR TABLE <tablename> showing no error but not detecting any partitionsMSCK REPAIR TABLE <tablename> 未显示错误但未检测到任何分区
【发布时间】:2019-04-26 22:38:59
【问题描述】:

我对 HIVE 环境非常陌生。

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

例如只有两个分区:

我创建了一个外部表:

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';

然后分区写入表中。

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

MSCK REPAIR TABLE test;

没有错误。

但是分区没有被读取。

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

我一直在阅读其他人的类似问题,但似乎与此问题不相似。

感谢您的帮助。

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

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

    • 当我们运行 msck repair table 时,hive 检查是否有任何新分区添加到 /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目录。

    【讨论】:

    • 你好舒。正如我发布的那样,我将位置设为/user/test/Partition_trial 而不是/user/test。它在创建外部表之后的代码集上。还是我错过了什么?
    猜你喜欢
    • 2018-12-02
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2018-04-19
    • 2015-07-19
    相关资源
    最近更新 更多