def METHOD_NAME(reader, index: int, batch_size_in: int, limit_in: int,
                    drop_last_in: bool, partitions: list, columns: list):
    """
    Get single batch data from MaxCompute table by indexing.
    Args:
        reader: MaxCompute table reader
        index: index of batch data
        batch_size_in: batch size
        limit_in: limit of data, None means fetch all data
        drop_last_in: whether drop last incomplete batch data
        partitions: table partitions
        columns: table columns
    Returns:
        single batch data (dataframe)
    """
    batch_size_in, limit_in = MaxComputeUtil._check_batch_args(
        reader, batch_size_in, limit_in)
    if drop_last_in:
        batch_num = math.floor(limit_in / batch_size_in)
    else:
        batch_num = math.ceil(limit_in / batch_size_in)
    if index < 0:
        raise ValueError(f'index must be non-negative, but got {index}')
    if index >= batch_num:
        raise ValueError(
            f'index must be less than batch_num, but got index={index}, batch_num={batch_num}'
        )
    start = index * batch_size_in
    end = (index + 1) * batch_size_in
    if end > limit_in:
        end = limit_in
    batch_item = reader[start:end]
    batch_data_list = []
    for record in batch_item:
        tmp_vals = [val for _, val in list(record)]
        tmp_vals = tmp_vals[:(len(tmp_vals) - len(partitions))]
        batch_data_list.append(tmp_vals)
    return pd.DataFrame(batch_data_list, columns=columns)