All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.aliyun.odps.data.Record 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 com.aliyun.odps.data;

import java.math.BigDecimal;
import java.util.Date;

import com.aliyun.odps.Column;

/**
 * Record类的对象表示ODPS表中一条记录
 *
 * @see RecordReader#read
 * @see RecordWriter#write
 */
public interface Record {

  /**
   * 获得记录中包含的字段数量
   *
   * @return 字段 {@link Column} 数量
   */
  int getColumnCount();

  /**
   * 获得记录中包含的所有字段
   *
   * @return {@link Column}[]
   */
  Column[] getColumns();

  /**
   * 判断某列是否为NULL值,如果该列为null,则返回true
   * 
   * @param idx
   *          列序号,0起始
   * @return 如果该列为null,则返回true,否则false
   */
  boolean isNull(int idx);

  /**
   * 判断某列是否为NULL值,如果该列为null,则返回true
   * 
   * @param columnName
   *          列名
   * @return 如果该列为null,则返回true,否则false
   */
  boolean isNull(String columnName);

  /**
   * 设置列的值
   *
   * @param idx
   *     列的索引
   * @param value
   *     列的值 Object
   */
  void set(int idx, Object value);

  /**
   * 获取当前列的值
   *
   * @param idx
   *     列的索引
   * @return 对应索引列值的Object对象
   */
  Object get(int idx);

  /**
   * 设置列的值
   *
   * @param columnName
   *     列名
   * @param value
   *     列的值
   */
  void set(String columnName, Object value);

  /**
   * 获取列值
   *
   * @param columnName
   *     列名
   * @return 对应列名的Object对象
   */
  Object get(String columnName);


  /**
   * 设置对应索引列的值,该列必须为Bigint类型
   *
   * @param idx
   *     列索引
   * @param value
   *     列值
   * @see #set(int, Object)
   */
  void setBigint(int idx, Long value);

  /**
   * 获取对应索引列的值,该列必须为Bigint类型
   *
   * @param idx
   *     列索引
   * @return 对应索引列的值
   * @see #get(int)
   */
  Long getBigint(int idx);

  /**
   * 设置对应列名的值,该列必须为Bigint类型
   *
   * @param columnName
   *     列名
   * @param value
   *     列值
   * @see #set(String, Object)
   */
  void setBigint(String columnName, Long value);

  /**
   * 获取对应列名的值,该列必须为Bigint类型
   *
   * @param columnName
   *     列名
   * @return 列值
   * @see #get(String)
   */
  Long getBigint(String columnName);

  /**
   * 设置对应索引列的值,该列必须为Double类型
   *
   * @param idx
   *     列索引
   * @param value
   *     列值
   * @see #set(int, Object)
   */
  void setDouble(int idx, Double value);

  /**
   * 获取对应索引列的值,该列必须为Double类型
   *
   * @param idx
   *     列索引
   * @return 列值
   * @see #get(int)
   */
  Double getDouble(int idx);

  /**
   * 设置对应列名的值,该列必须为Double类型
   *
   * @param columnName
   *     列名
   * @param value
   *     列值
   * @see #set(String, Object)
   */
  void setDouble(String columnName, Double value);

  /**
   * 设置对应列的值,该列必须为Double类型
   *
   * @param columnName
   *     列名
   * @return 列值
   * @see #get(String)
   */
  Double getDouble(String columnName);

  /**
   * 设置对应索引列的值,该列必须为Boolean类型
   *
   * @param idx
   *     列索引
   * @param value
   *     列值
   * @see #set(int, Object)
   */
  void setBoolean(int idx, Boolean value);

  /**
   * 设置对应索引列的值,该列必须为Boolean类型
   *
   * @param idx
   *     列索引
   * @return 列值
   * @see #get(int)
   */
  Boolean getBoolean(int idx);

  /**
   * 设置对应列名的值,该列必须为Boolean类型
   *
   * @param columnName
   *     列名
   * @param value
   *     列值
   * @see #set(String, Object)
   */
  void setBoolean(String columnName, Boolean value);

  /**
   * 获取对应列名的值,该列必须为Boolean类型
   *
   * @param columnName
   *     列名
   * @return 列值
   * @see #get(String)
   */
  Boolean getBoolean(String columnName);

  /**
   * 设置对应索引列的值,该列必须为Datetime类型
   *
   * @param idx
   *     列索引
   * @param value
   *     列值
   * @see #set(int, Object)
   */
  void setDatetime(int idx, Date value);

  /**
   * 获取对应索引列的值,该列必须为Datetime类型
   *
   * @param idx
   *     列索引
   * @return 列值
   * @see #get(int)
   */
  Date getDatetime(int idx);

  /**
   * 设置对应列名的值,该列必须为Datetime类型
   *
   * @param columnName
   *     列名
   * @param value
   *     列值
   * @see #set(String, Object)
   */
  void setDatetime(String columnName, Date value);

  /**
   * 获取对应列名的值,该列必须为Datetime类型
   *
   * @param columnName
   *     列名
   * @return 列值
   * @see #get(String)
   */
  Date getDatetime(String columnName);

  /**
   * 设置对应索引列的值,该列必须为Decimal类型
   * Decimal 类型整数部分36位有效数字 小数部分保留18位有效数字
   * 与 ODPS 交互时 整数部分超过36位会发生异常, 小数部分超过18位会被截断
   * 使用 BigDecimal 需要注意,BigDecimal 精度与 ODPS Decimal 精度有差异
   * BigDecimal 精度为变长, ODPS Decimal 精度为定长18位
   * equals 判断时,不同精度的BigDecimal 会不等,建议使用 compareTo
   *
   * @param idx
   *     列索引
   * @param value
   *     列值
   * @see #set(int, Object)
   */
  void setDecimal(int idx, BigDecimal value);

  /**
   * 获取对应索引列的值,该列必须为Decimal类型
   *
   * @param idx
   *     列索引
   * @return 列值
   * @see #get(int)
   */
  BigDecimal getDecimal(int idx);

  /**
   * 设置对应列名的值,该列必须为Decimal类型
   * Decimal 类型整数部分36位有效数字 小数部分保留18位有效数字
   * 与 ODPS 交互时 整数部分超过36位会发生异常, 小数部分超过18位会被截断
   *
   * @param columnName
   *     列名
   * @param value
   *     列值
   * @see #set(String, Object)
   */
  void setDecimal(String columnName, BigDecimal value);

  /**
   * 获取对应列名的值,该列必须为Decimal类型
   *
   * @param columnName
   *     列名
   * @return 列值
   * @see #get(String)
   */
  BigDecimal getDecimal(String columnName);

  /**
   * 设置对应索引列的值,该列必须为String类型
   *
   * @param idx
   *     列索引
   * @param value
   *     列值
   * @see #set(int, Object)
   */
  void setString(int idx, String value);

  /**
   * 获取对应索引列的值,该列必须为String类型
   *
   * @param idx
   *     列索引
   * @return 列值
   * @see #get(int)
   */
  String getString(int idx);

  /**
   * 设置对应列名的值,该列必须为String类型
   *
   * @param columnName
   *     列名
   * @param value
   *     列值
   * @see #set(String, Object)
   */
  void setString(String columnName, String value);

  /**
   * 获取对应列名的值,该列必须为String类型
   *
   * @param columnName
   *     列名
   * @return 列值
   * @see #get(String)
   */
  String getString(String columnName);

  /**
   * 设置对应列索引的值,该列必须为String类型
   *
   * @param idx
   *     列索引
   * @param value
   *     列值
   * @see #set(int, Object)
   * 需要保证value.length就是需要传入的长度
   * 并且byte的值不会被复用
   */
  void setString(int idx, byte[] value);

  /**
   * 设置对应列名的值,该列必须为String类型
   *
   * @see #set(String, Object)
   * 需要保证value.length就是需要传入的长度
   * 并且byte的值不会被复用
   */
  void setString(String columnName, byte[] value);

  /**
   * 获取指定列索引的值
   *
   * @param idx
   *     列索引
   * @return 列值
   * @see #get(int)
   */
  byte[] getBytes(int idx);

  /**
   * 获取指定列名的值
   *
   * @param columnName
   *     列名
   * @return 列值
   * @see #get(String)
   */
  byte[] getBytes(String columnName);

  /**
   * 设置当前 {@link Record} 的所有 {@link Column} 的值, 数组大小请和Column大小保持一致
   *
   * @param values
   *     所有列的值
   */
  public void set(Object[] values);

  /**
   * 返回当前所有列值的数组
   */
  public Object[] toArray();

  /**
   * 生成当前Record的拷贝
   * 
   * @return 当前Record的拷贝
   */
  public Record clone();
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy