日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

UDF示例:兼容Hive

本文以在MaxCompute客戶端操作為例,為您介紹如何使用在MaxCompute兼容的Hive版本上開發的Hive UDF。

前提條件

已安裝MaxCompute客戶端。更多安裝操作,請參見安裝并配置MaxCompute客戶端

注意事項

使用兼容的Hive UDF時,您需要注意:

  • 在MaxCompute上使用add jar命令添加Hive UDF的資源時,您需要指定所有JAR包,MaxCompute無法自動將所有JAR包加入Classpath。

  • 調用Hive UDF時,需要在SQL語句前添加set odps.sql.hive.compatible=true;語句,與SQL語句一起提交執行。

  • Java UDF在分布式環境中運行時,請注意MaxCompute的Java沙箱限制。

  • UDF會起新進程計算,當集群資源緊張時,會有小概率因新進程啟動排隊超時而失敗。

Hive UDF代碼示例

Hive UDF代碼如下。

package com.aliyun.odps.compiler.hive;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class Collect extends GenericUDF {
  @Override
  public ObjectInspector initialize(ObjectInspector[] objectInspectors) throws UDFArgumentException {
    if (objectInspectors.length == 0) {
      throw new UDFArgumentException("Collect: input args should >= 1");
    }
    for (int i = 1; i < objectInspectors.length; i++) {
      if (objectInspectors[i] != objectInspectors[0]) {
        throw new UDFArgumentException("Collect: input oi should be the same for all args");
      }
    }
    return ObjectInspectorFactory.getStandardListObjectInspector(objectInspectors[0]);
  }
  @Override
  public Object evaluate(DeferredObject[] deferredObjects) throws HiveException {
    List<Object> objectList = new ArrayList<>(deferredObjects.length);
    for (DeferredObject deferredObject : deferredObjects) {
      objectList.add(deferredObject.get());
    }
    return objectList;
  }
  @Override
  public String getDisplayString(String[] strings) {
    return "Collect";
  }
}

該UDF代碼示例可以將任意類型、數量的參數打包成ARRAY輸出。假設Hive UDF對應的JAR包名稱為test.jar。

操作步驟

  1. 安裝并登錄MaxCompute客戶端

  2. Hive UDF代碼示例通過Hive平臺編譯為JAR包,執行如下命令將Hive UDF JAR包添加為MaxCompute資源。

    --添加資源。
    add jar test.jar;

    更多添加資源信息,請參見添加資源

  3. 執行如下命令注冊UDF函數。

    --注冊函數。
    create function hive_collect as 'com.aliyun.odps.compiler.hive.Collect' using 'test.jar';

    更多注冊函數信息,請參見注冊函數

  4. 執行如下SQL語句調用新建的UDF函數。

    --設置MaxCompute項目的模式為Hive兼容模式。
    set odps.sql.hive.compatible=true;
    --調用UDF函數。
    select hive_collect(4y, 5y, 6y);

    返回結果如下。

    +------+
    | _c0  |
    +------+
    | [4, 5, 6] |
    +------+