Я работаю над Hive и новым для него.
Я пытаюсь улучшить производительность следующего кода:
INSERT INTO target_table
(col1,col2,col3...) --- I have 64 columns in total
SELECT
t1.col1,t1.col2,t1.col3...
FROM (
SELECT
ts.col1,ts.col2,ts.col3...
FROM source_table ts
LEFT JOIN label_table tb
ON ( ts.colx = tb.colx AND ts.coly = tb.coly )
WHERE
ts.colx <> '' AND ts.colx <> 'NULL'
AND ts.colx IS NOT NULL
AND tb.colx IS NULL
LIMIT 10000
) t1
Цель этого кода - вставитьстроки в target_table
, которые относятся к source_table
и чьи colx
не найдены в label_table
.
* source_table
содержит около 1,4 миллиарда строк, а label_table
имеет меньше строк, ноЯ добавлю больше строк в label_table
в будущем (номер строки в конечном итоге превысит 1 миллиард).
Моя проблема: в настоящее время этот код будет обрабатывать 10000 строк примерно за полчаса (LIMIT
- это 10,000
).Если я увеличу LIMIT
до 1,000,000
, мой код застрянет, когда процесс сокращения достигнет 66,6%.Поскольку мне нужно обработать 1,4 миллиарда строк, общее время будет слишком большим для меня.Есть ли способ, который может помочь повысить производительность этого кода?Может ли кто-нибудь дать какой-нибудь совет?
Заранее спасибо!