Hive更新列中的所有值

时间:2015-03-26 20:28:17

标签: hadoop hive

我有一个外部分区的Hive表。其中一列是名为OLDDATE的字符串,其日期格式不同(DD-MM-YY)。我想以YYYY-MM-DD格式更新列和存储日期。所有年份都是20XX。

所以我想到了这个

选择CONCAT(' 20',SPLIT(OLDDATE,' - ')[2],' - ',SPLIT(OLDDATE,&#39 ; - ')[1],' - ',SPLIT(OLDDATE,' - ')[0])来自表格

这给了我想要的格式的日期。现在如何用这个新日期覆盖旧日期?

3 个答案:

答案 0 :(得分:2)

您可以通过使用自己的内容覆盖表来实现更新,只需根据您的转换更改日期字段,就像这个伪代码一样:

INSERT OVERWRITE table
SELECT
    col1
  , col2
  ...
  , CONCAT('20',SPLIT(OLDDATE ,'-')[2],'-',SPLIT(OLDDATE ,'-')[1],'-',SPLIT(OLDDATE ,'-')[0]) AS olddate
  ...
  , coln
FROM table;

答案 1 :(得分:1)

由于是分区表,因此必须使用日期值创建文件夹名称。 因此,您无法更新值。

解决此问题的方法是创建一个新表并运行上述查询并将数据插入新表中。

之后,您可以删除现有表格并将此新表格视为所需的表格。

答案 2 :(得分:1)

@ user2441441 要覆盖分区表:

    INSERT OVERWRITE table PARTITION (p_col)
    SELECT
        col1
      , col2
      ...
      , CONCAT('20',SPLIT(OLDDATE ,'-')[2],'-',SPLIT(OLDDATE ,'-')[1],'- 
     ',SPLIT(OLDDATE ,'-')[0]) AS olddate
      ...
      , coln
      , p_col
   FROM table;