private void decodeArrayString( int index, Type field, Group pqGroup, String arrayString, char delim) throws IOException { // for parquet, we only have one-dimention array // anotation support: decimal, time, timestamp String[] splits = FormatHandlerUtil.getArraySplits(arrayString.toCharArray(), delim); for (String elementString : splits) { switch (field.asPrimitiveType().getPrimitiveTypeName()) { case BOOLEAN: pqGroup.add(index, Boolean.parseBoolean(elementString)); break; case INT32: if (columnSchemas.get(index).getType() == GPDBWritable.DATE) { pqGroup.add( index, (int) FormatHandlerUtil.getTimeDiff( elementString, "1970-01-01", "yyyy-mm-dd", 24 * 60 * 60 * 1000)); } else if (columnSchemas.get(index).getType() == GPDBWritable.TIME) { pqGroup.add( index, (int) FormatHandlerUtil.getTimeDiff(elementString, "00:00:00", "mm:hh:ss", 1)); } else { pqGroup.add(index, Integer.parseInt(elementString)); } break; case INT64: if (columnSchemas.get(index).getType() == GPDBWritable.TIMESTAMP) { pqGroup.add( index, FormatHandlerUtil.getTimeDiff( elementString, "1970-01-01 00:00:00", "yyyy-mm-dd mm:hh:ss", 1)); } else { pqGroup.add(index, Long.parseLong(elementString)); } break; case FLOAT: pqGroup.add(index, Float.parseFloat(elementString)); break; case DOUBLE: pqGroup.add(index, Double.parseDouble(elementString)); break; case INT96: case BINARY: case FIXED_LEN_BYTE_ARRAY: OriginalType type = field.getOriginalType(); if (type == OriginalType.UTF8 || type == OriginalType.JSON) { pqGroup.add(index, elementString); } else if (type == OriginalType.DECIMAL) { pqGroup.add(index, Binary.fromByteArray(elementString.getBytes())); } else if (type == OriginalType.INTERVAL) { pqGroup.add( index, Binary.fromByteArray(FormatHandlerUtil.getParquetInterval(elementString))); } else { pqGroup.add( index, Binary.fromByteArray(FormatHandlerUtil.octString2byteArray(elementString).array())); } break; default: throw new IOException( "internal error, you should not be here, pqtype:" + field.asPrimitiveType().getPrimitiveTypeName()); } } }