Найти, существует ли запись в таблице Hive - PullRequest
0 голосов
/ 09 мая 2018

Я хочу вставить запись в таблицу hive , но перед ее вставкой я хочу проверить, существует ли эта запись в таблице.в этом случае я не буду вставлять запись и скорее пропущу ее.

Используемая версия куста Hive 1.1.0.

Структура таблицы:

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

перед вставкой записи я хочу проверить, присутствует ли значение hk или нет в таблице улья.

1 Ответ

0 голосов
/ 09 мая 2018

Подход ::: 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.
}

Approach ::: 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);

Всего наилучшего !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...