hivemall.tools.array.ArraySliceUDF Maven / Gradle / Ivy
The newest version!
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package hivemall.tools.array;
import hivemall.utils.hadoop.HiveUtils;
import hivemall.utils.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.UDFType;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
// @formatter:off
@Description(name = "array_slice",
value = "_FUNC_(array values, int offset [, int length]) - Slices the given array by the given offset and length parameters.",
extended = "SELECT \n" +
" array_slice(array(1,2,3,4,5,6),2,4),\n" +
" array_slice(\n" +
" array(\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\"),\n" +
" 0, -- offset\n" +
" 2 -- length\n" +
" ),\n" +
" array_slice(\n" +
" array(\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\"),\n" +
" 6, -- offset\n" +
" 3 -- length\n" +
" ),\n" +
" array_slice(\n" +
" array(\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\"),\n" +
" 6, -- offset\n" +
" 10 -- length\n" +
" ),\n" +
" array_slice(\n" +
" array(\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\"),\n" +
" 6 -- offset\n" +
" ),\n" +
" array_slice(\n" +
" array(\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\"),\n" +
" -3 -- offset\n" +
" ),\n" +
" array_slice(\n" +
" array(\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\"),\n" +
" -3, -- offset\n" +
" 2 -- length\n" +
" );\n" +
"\n" +
" [3,4]\n" +
" [\"zero\",\"one\"] \n" +
" [\"six\",\"seven\",\"eight\"]\n" +
" [\"six\",\"seven\",\"eight\",\"nine\",\"ten\"]\n" +
" [\"six\",\"seven\",\"eight\",\"nine\",\"ten\"]\n" +
" [\"eight\",\"nine\",\"ten\"]\n" +
" [\"eight\",\"nine\"]")
// @formatter:on
@UDFType(deterministic = true, stateful = false)
public final class ArraySliceUDF extends GenericUDF {
private ListObjectInspector valuesOI;
private PrimitiveObjectInspector offsetOI;
@Nullable
private PrimitiveObjectInspector lengthOI;
private final List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy