Hadoop 配置单元更新列中的所有值
我有一个外部分区的蜂箱表。其中一列是名为OLDDATE的字符串,该字符串的日期格式不同dd-MM-YY。我想更新列并以YYYY-MM-DD格式存储日期。所有年份均为20XX年 所以我想到了这个 从表中选择CONCAT'20',SPLITOLDDATE',-'[2],'-',SPLITOLDDATE',-'[1],'-',SPLITOLDDATE',-'[0]Hadoop 配置单元更新列中的所有值,hadoop,hive,Hadoop,Hive,我有一个外部分区的蜂箱表。其中一列是名为OLDDATE的字符串,该字符串的日期格式不同dd-MM-YY。我想更新列并以YYYY-MM-DD格式存储日期。所有年份均为20XX年 所以我想到了这个 从表中选择CONCAT'20',SPLITOLDDATE',-'[2],'-',SPLITOLDDATE',-'[1],'-',SPLITOLDDATE',-'[0] 这将以我想要的格式为我提供日期。现在,如何用新日期覆盖旧日期?您可以通过使用表本身的内容覆盖表来实现更新,只需根据您的转换更改日期字段,如
这将以我想要的格式为我提供日期。现在,如何用新日期覆盖旧日期?您可以通过使用表本身的内容覆盖表来实现更新,只需根据您的转换更改日期字段,如以下伪代码:
INSERT OVERWRITE table
SELECT
col1
, col2
...
, CONCAT('20',SPLIT(OLDDATE ,'-')[2],'-',SPLIT(OLDDATE ,'-')[1],'-',SPLIT(OLDDATE ,'-')[0]) AS olddate
...
, coln
FROM table;
您可以通过使用表自身的内容覆盖表来实现更新,只需根据您的转换更改日期字段,如以下伪代码:
INSERT OVERWRITE table
SELECT
col1
, col2
...
, CONCAT('20',SPLIT(OLDDATE ,'-')[2],'-',SPLIT(OLDDATE ,'-')[1],'-',SPLIT(OLDDATE ,'-')[0]) AS olddate
...
, coln
FROM table;
由于它是一个分区表,因此必须使用日期值创建文件夹名称。 因此,您无法更新这些值 解决方法之一是创建一个新表,运行上述查询并将数据插入新表
之后,您可以删除现有表并将此新表视为所需表。由于它是分区表,因此必须使用日期值创建文件夹名称。 因此,您无法更新这些值 解决方法之一是创建一个新表,运行上述查询并将数据插入新表 之后,您可以删除现有表并将此新表视为所需表。@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;
@用户2441441
要覆盖分区表,请执行以下操作:
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;
无法使用分区表:/-查询返回非零代码:40000,原因:失败:SemanticException 1:23需要指定分区列,因为目标表已分区。在标记附近遇到的错误不适用于分区表:/-查询返回非零代码:40000,原因:失败:SemanticException 1:23需要指定分区列,因为目标表已分区。在令牌附近遇到错误