代码之家  ›  专栏  ›  技术社区  ›  noobie2023

hiveql运行太慢(需要提高性能)

  •  0
  • noobie2023  · 技术社区  · 8 年前

    我在研究蜂巢,而且是新的。

    我正在尝试改进以下代码的性能:

    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 .

    这个 源表 包含大约14亿行和 标签\表格 行数较少,但我将在中插入更多行 标签\表格 未来(其行数最终将超过10亿)。

    我的问题是:目前这个代码处理10000行大约需要半个小时 LIMIT 10,000 )。如果我增加 限制 1,000,000 当还原过程达到66.6%时,我的代码将被卡住。因为我有14亿行要处理,所以总时间对我来说太长了。是否有任何方法可以帮助增强此代码的性能?有人能给点建议吗?

    提前谢谢!

    1 回复  |  直到 8 年前
        1
  •  0
  •   MCardus    8 年前

    您可能需要保存子查询

     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
    

    我还建议您避免在配置单元中加入表,它们是常见的性能问题。

    this guide 为蜂窝提供一般的优化提示