如何使用 CTE 更新表 - Hive

问题描述

我是 hive 的新手,并尝试根据从另一个表 (table_B) 检索到的值使用新列更新表 (table_A)。 table_B 用作分类变量描述的查找表。

例如:table_A

index field_x field_y
1 L S
2 H H
3 M S

例如:table_B

variable_name variable_category variable_category_description
field_x L
field_x M
field_x H
field_y S
field_y H

基于 table_A 和 table_B,我需要获得下表。

index field_x field_x_description field_y field_y_description
1 L S
2 H H
3 M S

我尝试在 Hue Hive 编辑器中跟随,只是在开头添加一列。我的编辑器不支持更新语句。

CREATE TABLE table_C AS 
SELECT index,field_x,field_y,(SELECT variable_category_description
    FROM table_B 
    where table_B.variable_name = 'field_x' and  table_B.variable_category= table_A.field_x
AS field_x_description
FROM table_A

出现以下错误

编译语句时出错:Failed:ParseException line 5:5 无法识别表达式规范中 'SELECT' 'variable_category_description' 'FROM' 附近的输入

非常感谢对此进行修复。

解决方法

您需要使用 table_B 进行两个连接(INNER 或 LEFT)

CREATE TABLE table_C AS 
SELECT a.index,a.field_x,x.variable_category_description AS field_x_description,a.field_y,y.variable_category_description AS field_y_description
FROM table_A
     LEFT JOIN table_B x ON x.variable_name  = 'field_x' 
                        and x.variable_category = a.field_x

     LEFT JOIN table_B y ON y.variable_name  = 'field_y' 
                        and y.variable_category = a.field_y
;