【问题标题】:HIve insert statement taking too longHIVe 插入语句耗时过长
【发布时间】:2017-02-18 15:17:17
【问题描述】:

我在单个文件 (test.hql) 中有 200 个插入语句,用于将它们插入到 ORC 格式的配置单元表中。每次插入都需要大量时间(40 秒),使得整个过程需要将近 2 个小时。有没有办法加快速度?

我本可以创建一个 tmp(文本格式)表,然后进行简单的插入覆盖,但这是不允许的。我无法创建新的 DDL。 -> 一种选择是在 shell 中破坏 test.hql 并在并行进程中执行。 有没有其他方法可以让我在 Hive 本身中快速插入这些插件??

【问题讨论】:

    标签: apache hive orc


    【解决方案1】:

    许多插入语句比单个语句慢。使用 UNION ALL 将 200 个插入转换为单个:

    INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] 
    select value1 as col1, value2 as col2... coln from default.dual union all
    select value1 as col1, value2 as col2... coln from default.dual union all
    ...
    select value1 as col1, value2 as col2... coln from default.dual;
    

    【讨论】:

      【解决方案2】:

      你可以创建一个输入文件并立即加载到表中。

      创建具有特定行格式的表(带分隔符)

      创建表测试(a字串,b字串)以','结尾的行格式字段存储为文本文件;

      然后将数据加载进去,

      LOAD DATA inpath "/path" 到表 table_name;

      【讨论】:

      • 是的,已经这样做了 - 但现在无法创建 DDL,项目要求种类
      • 每次插入都会启动一个新的 mapreduce 作业,这就是它花费太多时间的原因。可能将执行引擎切换到 spark 会减少时间。试试看。如果您使用的是 cloudera,您可以更改执行引擎。
      猜你喜欢
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多