Hive 配置单元查询以有条件地插入值
我有一个Hive 配置单元查询以有条件地插入值,hive,case,hiveql,case-when,Hive,Case,Hiveql,Case When,我有一个表1,其中包含一些被列入黑名单的名字。现在假设我收到一条记录“def”。配置单元查询应检查表1中是否存在“def”。如果不是,则应将name\u状态设置为blacklisted,否则null。名称“def”将在两种情况下插入。我面临的问题是,在配置单元中,我们不能仅在from子句中使用子查询 表1 ----blacklisted_names------ "abc" "xyz" ---------------
表1
,其中包含一些被列入黑名单的名字。现在假设我收到一条记录“def”
。配置单元查询应检查表1中是否存在“def”
。如果不是,则应将name\u状态设置为blacklisted
,否则null
。名称“def”
将在两种情况下插入。我面临的问题是,在配置单元中,我们不能仅在from
子句中使用子查询
表1
----blacklisted_names------
"abc"
"xyz"
---------------------------
表2(在收到“def”之前)
表2(收到“def”
后)
表2(收到“xyz”
后)
加入黑名单和用例,为加入的行分配“blaclisted”
insert into table2
select n.name,
case when b.name is not null then 'blacklisted' end as name_status
from new_rows n
left join table1 b --blacklisted
on n.name=b.name
您如何插入和接收rows@leftjoin从另一个表中,然后使用模板,如我的答案中所示。新行是另一个表
---name--|--name_status-----
|
"abc" | blacklisted
|
"def" | null
----------------------------
---name--|--name_status-----
|
"abc" | blacklisted
|
"def" | null
|
"xyz" | blaclisted
----------------------------
insert into table2
select n.name,
case when b.name is not null then 'blacklisted' end as name_status
from new_rows n
left join table1 b --blacklisted
on n.name=b.name