hive更新列中的所有值

eulz3vhy  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(544)

我有一个外部分区的Hive表。其中一列是名为olddate的字符串,该字符串的日期格式不同(dd-mm-yy)。我想更新列并以yyyy-mm-dd格式存储日期。所有年份都是20xx年。
所以我想到了这个
从表中选择concat('20',split(olddate,'-')[2],'-',split(olddate,'-')[1],'-',split(olddate,'-')[0])
这给了我我想要的日期格式。现在如何用新日期覆盖旧日期?

3phpmpom

3phpmpom1#

@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;
wr98u20j

wr98u20j2#

您可以通过使用表本身的内容覆盖表来实现更新,只需根据您的转换更改日期字段,如以下伪代码:

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

h7appiyu3#

由于它是一个分区表,因此必须使用日期值创建文件夹名称。因此无法更新值。
解决方法之一是创建一个新表,运行上面的查询并将数据插入新表。
之后,可以删除现有表并将此新表视为所需表。

相关问题