org.apache.pig.data.Tuple Maven / Gradle / Ivy
/*
* 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 org.apache.pig.data;
import java.io.Serializable;
import java.util.List;
import org.apache.hadoop.io.WritableComparable;
import org.apache.pig.classification.InterfaceAudience;
import org.apache.pig.classification.InterfaceStability;
import org.apache.pig.backend.executionengine.ExecException;
/**
* An ordered list of Data. A tuple has fields, numbered 0 through
* (number of fields - 1). The entry in the field can be any datatype,
* or it can be null.
*
* Tuples are constructed only by a {@link TupleFactory}. A
* {@link DefaultTupleFactory}
* is provided by the system. If users wish to use their own type of
* Tuple, they should also provide an implementation of {@link TupleFactory} to
* construct their types of Tuples.
*
*/
// Put in to make the compiler not complain about WritableComparable
// being a generic type.
@SuppressWarnings("unchecked")
@InterfaceAudience.Public
@InterfaceStability.Stable
public interface Tuple extends WritableComparable, Serializable {
/**
* Marker for indicating whether the value this object holds
* is a null
*/
public static byte NULL = 0x00;
/**
* Marker for indicating whether the value this object holds
* is not a null
*/
public static byte NOTNULL = 0x01;
/**
* Make this tuple reference the contents of another. This method does not copy
* the underlying data. It maintains references to the data from the original
* tuple (and possibly even to the data structure holding the data).
* @param t Tuple to reference.
*/
void reference(Tuple t);
/**
* Find the size of the tuple. Used to be called arity().
* @return number of fields in the tuple.
*/
int size();
/**
* Find out if a given field is null.
* @param fieldNum Number of field to check for null.
* @return true if the field is null, false otherwise.
* @throws ExecException if the field number given is greater
* than or equal to the number of fields in the tuple.
*/
boolean isNull(int fieldNum) throws ExecException;
/**
* Find the type of a given field.
* @param fieldNum Number of field to get the type for.
* @return type, encoded as a byte value. The values are defined in
* {@link DataType}. If the field is null, then DataType.UNKNOWN
* will be returned.
* @throws ExecException if the field number is greater than or equal to
* the number of fields in the tuple.
*/
byte getType(int fieldNum) throws ExecException;
/**
* Get the value in a given field.
* @param fieldNum Number of the field to get the value for.
* @return value, as an Object.
* @throws ExecException if the field number is greater than or equal to
* the number of fields in the tuple.
*/
Object get(int fieldNum) throws ExecException;
/**
* Get all of the fields in the tuple as a list.
* @return a list of objects containing the fields of the tuple
* in order.
*/
List