Hive: ошибка выполнения, если условие содержит подзапрос

У меня две таблицы. Таблица 1 - большая, а таблица 2 - маленькая. Я хотел бы извлечь данные из таблицы 1, если значения в Table1.column1 совпадают со значениями в Table2.column1. И в таблице 1, и в таблице 2 есть столбец column1. Вот мой код.

select *
from Table1
where condition1
and condition2
and column1 in (select column1 from Table2)

Условие 1 и Условие 2 предназначены для ограничения размера извлекаемой таблицы. Не уверен, что это действительно работает. Потом получил execution error, return code 1. Я на платформе Hue.

ИЗМЕНИТЬ

Как было предложено @yammanuruarun, я попробовал следующий код.

SELECT *
FROM
  (SELECT *
   FROM Table1
   WHERE condition1
     AND condition2) t1
INNER JOIN Table2 ON t1.column1 = t2.column1

Затем я получил следующую ошибку.

Error while processing statement: FAILED: Execution Error, return code 2 from 

org.apache.hadoop.hive.ql.exec.tez.TezTask. Application 

application_1580875150091_97539 failed 2 times due to AM Container for 

appattempt_1580875150091_97539_000002 exited with exitCode: 255 Failing this 

attempt.Diagnostics: [2020-02-07 14:35:53.944]Exception from container-launch.

Container id: container_e1237_1580875150091_97539_02_000001 Exit code: 255

Exception message: Launch container failed Shell output: main : command provided 1

 main : run as user is hive main : requested yarn user is hive Getting exit code

 file... Creating script paths... Writing pid file... Writing to tmp file /disk-
11/hadoop/yarn/local/nmPrivate/application_1580875150091_97539/container_e1237_1580875150091_97539_02_000001/container_e1237_1580875150091_97539_02_000001.pid.tmp

Writing to cgroup task files... Creating local dirs... Launching container... 

Getting exit code file... Creating script paths... [2020-02-07 14:35:53.967]Container exited with a non-zero exit code 255. Error file: prelaunch.err. Last 4096 bytes of prelaunch.err : Last 4096 bytes of stderr : 

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in 

thread "IPC Server idle connection scanner for port 26888" Halting due to Out Of 

Memory Error... Halting due to Out Of Memory Error... Halting due to Out Of Memory 
Error... 

Halting due to Out Of Memory Error... Halting due to Out Of Memory Error... 

Halting due to Out Of Memory Error... Halting due to Out Of Memory Error... 

Halting due to Out Of Memory Error... [2020-02-07 14:35:53.967]Container exited

 with a non-zero exit code 255. Error file: prelaunch.err. Last 4096 bytes of prelaunch.err : Last 4096 bytes of stderr : 

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in 

thread "IPC Server idle connection scanner for port 26888" Halting due to Out Of Memory Error... Halting due to Out Of Memory Error... 

Halting due to Out Of Memory Error... Halting due to Out Of Memory Error...

 Halting due to Out Of Memory Error... Halting due to Out Of Memory Error... 

Halting due to Out Of Memory Error... Halting due to Out Of Memory Error... 

For more detailed output, check the application tracking page: http://dcwipphm12002.edc.nam.gm.com:8088/cluster/app/application_1580875150091_97539 Then click on links to logs of each attempt. . Failing the application.

Похоже, это ошибка памяти. Есть ли способ оптимизировать свой запрос?


person Tracy Yang    schedule 06.02.2020    source источник
comment
1. Если у вас есть доступ, вы можете предоставить или проверить фактическое сообщение об ошибке в системе отслеживания вакансий. При выполнении задания у вас должен быть номер приложения. Просто код возврата работы не слишком поможет. Вы также можете найти URL-адрес средства отслеживания вакансий в журнале, который вставляется над ошибкой кода возврата. 2. Кроме этого, можно ли использовать join? выберите count (*) из Table1 t1, где condition1 и condition2 Внутреннее соединение Table2 t2 на t1.column1 = t2.column1; Поскольку вам нужны только совпадающие записи из обеих таблиц на основе заданного условия, я использовал внутреннее соединение.   -  person yammanuruarun    schedule 07.02.2020
comment
@yammanuruaruny Спасибо за советы. Не могли бы вы посоветовать, как увидеть фактическое сообщение об ошибке? У меня есть идентификатор приложения. Также не работает код внутреннего соединения. Похоже, я не могу присоединиться после определенных условий.   -  person Tracy Yang    schedule 07.02.2020
comment
Запрос, который я дал в комментарии выше, неверен. Где условия должны появиться после присоединения. С правильным псевдонимом оба этих запроса у меня работают нормально. выберите count () из Table1 t1 Inner Join Table2 t2 на t1.column1 = t2.column1, где condition1 и condition2; выберите count () из Table1 t1, где condition1 и condition2 и t1.column1 в (выберите t2.column1 из Table2 t2);   -  person yammanuruarun    schedule 07.02.2020
comment
Прямо над историей запросов / результатами будут напечатаны журналы задания запроса улья, как показано в ссылке на изображение, которая называется Где увидеть результат в тексте или на диаграмме. В этом журнале вы найдете некоторую информацию о вакансии вместе с job_id (что-то вроде job_124353131534), команду Kill, чтобы убить это задание hadoop, URL-адрес отслеживания или URL-адрес для отслеживания задания и т. Д. Вам нужно будет скопировать URL-адрес отслеживания и вставить его в браузер, чтобы просмотреть журналы сокращения карты, а затем просмотреть журнал сбойного сопоставителя / редуктора. static.packt-cdn.com/ продукты / 9781788995092 / графика /   -  person yammanuruarun    schedule 07.02.2020
comment
@yammanuruarun Спасибо. Таблица 1 очень большая и получает данные все время, я не думаю, что мы могли бы сначала присоединиться, а затем выполнить условия where. Я попробовал другой выполнить внутреннее соединение (см. Отредактированную часть вопроса), но все равно получил ошибки.   -  person Tracy Yang    schedule 08.02.2020
comment
Похоже, что tez используется в качестве механизма выполнения для hive, что не в моей компетенции. Все, что я предлагал выше, было для yarn или map-reduce в качестве механизма выполнения. Вы можете посмотреть блоги на предмет проблем с памятью tez при запуске join, чтобы получить лучшую помощь !!! Спасибо. community.cloudera.com/t5/Support-Questions/ stackoverflow.com/questions/48484391/ stackoverflow.com/questions/55919060/   -  person yammanuruarun    schedule 08.02.2020