亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

hive中怎么設置變量傳遞

發布時間:2021-07-23 10:43:29 來源:億速云 閱讀:246 作者:Leah 欄目:云計算

hive中怎么設置變量傳遞,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

### org.apache.hadoop.hive.ql.parse.VariableSubstitution:

  public String substitute(HiveConf conf, String expr) {    if (expr == null) {      return expr;
    }    if (HiveConf.getBoolVar(conf, ConfVars.HIVEVARIABLESUBSTITUTE)) {
      l4j.debug("Substitution is on: " + expr);
    } else {      return expr;
    }    int depth = HiveConf.getIntVar(conf, ConfVars.HIVEVARIABLESUBSTITUTEDEPTH);    return substitute(conf, expr, depth);
  }123456789101112

如果開啟hive.variable.substitute(默認開啟),則使用SystemVariables的substitute方法和hive.variable.substitute.depth(默認為40)進行進一步的判斷:

  protected final String substitute(Configuration conf, String expr, int depth) {
    Matcher match = varPat.matcher("");
    String eval = expr;
    StringBuilder builder = new StringBuilder();    int s = 0;    for (; s <= depth; s++) {
      match.reset(eval);
      builder.setLength(0);      int prev = 0;      boolean found = false;      while (match.find(prev)) {
        String group = match.group();
        String var = group.substring(2, group.length() - 1); // remove ${ .. }
        String substitute = getSubstitute(conf, var);        if (substitute == null) {
          substitute = group;   // append as-is
        } else {
          found = true;
        }
        builder.append(eval.substring(prev, match.start())).append(substitute);
        prev = match.end();
      }      if (!found) {        return eval;
      }
      builder.append(eval.substring(prev));
      eval = builder.toString();
    }    if (s > depth) {      throw new IllegalStateException(          "Variable substitution depth is deeper than " + depth + " for expression " + expr);
    }    return eval;
  } 12345678910111213141516171819202122232425262728293031323334

如果使用的${}參數超過hive.variable.substitute.depth的數量,則直接拋出異常,所以我們在語句的前面直接加上set hive.variable.substitute.depth=100; 問題解決!

set命令的執行是在CommandProcessor實現類SetProcessor里具體執行,但是substitute語句同時也會在CompileProcessor中調用,也就是在hive語句編譯時就調用了,所以oozie在使用時調用beeline執行語句時,compile階段就報出異常。

但是為什么Hue直接執行這個語句時沒有問題? 因為hue在執行hive時使用的是python開發的beeswax,而beeswax是自己直接處理了這些變量,使用變量實際的值替換變量后再提交給hive執行:

def substitute_variables(input_data, substitutions):
  """
  Replaces variables with values from substitutions.
  """
  def f(value):
    if not isinstance(value, basestring):      return value

    new_value = Template(value).safe_substitute(substitutions)    if new_value != value:
      LOG.debug("Substituted %s -> %s" % (repr(value), repr(new_value)))    return new_value  return recursive_walk(f, input_data)

看完上述內容,你們掌握hive中怎么設置變量傳遞的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

垫江县| 黄龙县| 余姚市| 泰和县| 长子县| 锡林郭勒盟| 宜君县| 自治县| 秭归县| 宣城市| 山阳县| 灵宝市| 齐齐哈尔市| 新乡县| 沛县| 雅江县| 东海县| 聂拉木县| 石首市| 延吉市| 中方县| 潞西市| 黎城县| 金门县| 喀什市| 威海市| 青州市| 玛多县| 和林格尔县| 江永县| 安乡县| 龙泉市| 通榆县| 腾冲县| 中西区| 永定县| 沙河市| 温泉县| 四子王旗| 浦北县| 旬阳县|