查找配置单元表中是否存在记录

roejwanj  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(312)

我想在配置单元表中插入一条记录,但在插入它之前,我想检查该记录是否已经存在于表中。如果是那样的话,我就不插入记录,宁愿跳过它。
我使用的配置单元版本是 Hive 1.1.0. 表结构:

hk                | diagnosisid  |    id   | cdcode
-----------------------------------------------------------
EXVWLOORV@#19690321F    |       1      |   7810  |    I9C
OHQQDUG@#19380630F      |       1      |   3643  |    I9C
VPLWK@#19610120F        |       1      |   2731  |    I9C

在插入记录之前,我想检查 hk 值是否已存在于配置单元表中。

guicsvcw

guicsvcw1#

方法:1:
如果您可以编写“if and loop”,那么您可以尝试这种方法。

select count(1) as cnt
from yourtable
where hk='new_value';

if (cnt=0){
---your insert query will be here
}else {
   --some message... "hk" already present in table.
}

方法:2:

INSERT INTO your_table_name
      (hk, diagnosisid, id, cdcode)
SELECT 'asdf' as hk,
       'asdf' as diagnosisid,
       'ss'   as id,
       'ddww' as cdcode
 WHERE 'asdf' 
        NOT IN (SELECT hk FROM your_table_name)

方法:3:
最后,您必须编写etl脚本来执行这些操作。
解决方案:
在您的场景中:(根据注解中提供的表)查询将是:

create table pid1(hk string,diagnosisid string,id string,cdcode string);
insert into pid1 values('EXVWLOORV@#19690321F','1','7810','I9C');
insert into pid1 values('OHQQDUG@#19380630F','1','3643','I9C');
insert into pid1 values('VPLWK@#19610120F','1','2731','I9C');

create table pid as select * from pid1 limit 1;

INSERT INTO pid
      (hk, diagnosisid, id, cdcode)
SELECT hk,
       diagnosisid,
       id,
       cdcode
from pid1
 WHERE hk NOT IN (SELECT hk FROM pid);

祝你一切顺利!!!

相关问题