我正在 hive 中尝试在下面的代码中尝试在字段“word”上联接两个表。这是永远的,我想知道如何才能加快速度。在一个表中,“单词”字段包含大小写字母的混合,在另一表中,则全部为大写。

Code:

set hive.exec.compress.output=false;
set hive.mapred.mode=nonstrict;


DROP TABLE IF EXISTS newTable;
CREATE TABLE newTable AS
SELECT
      bh.inkey,
      bh.prid,
      bh.hname,
      bh.ptype,
      bh.band,
      bh.sles,
      bh.num_ducts,
      urg.R_NM

from table1 AS bh
INNER JOIN table2 AS urg
    ON LOWER(bh.word)=LOWER(urg.word);

最佳答案

我将基于table1用大写单词创建一个临时表。然后将这个表连接到table2而不使用任何字符串函数,因为table2.word都是大写的。除了table1和table2较大以外,较低的字符串函数还会导致查询速度变慢。

DROP TABLE IF EXISTS tmpTable;
CREATE TABLE tmpTable AS
SELECT bh.word,
      bh.inkey,
      bh.prid,
      bh.hname,
      bh.ptype,
      bh.band,
      bh.sles,
      bh.num_ducts
from table1 AS bh;

DROP TABLE IF EXISTS newTable;
CREATE TABLE newTable AS
SELECT
      tmp.inkey,
      tmp.prid,
      tmp.hname,
      tmp.ptype,
      tmp.band,
      tmp.sles,
      tmp.num_ducts,
      urg.R_NM
from tmpTable AS tmp
INNER JOIN table2 AS urg
    ON tmp.word=urg.word;

07-24 09:53