prestodb/presto · error · PrestoException
NOT_SUPPORTED
NOT_SUPPORTED
Error message
arrays are not (yet?) supported for StringRowSerializer
What it means
StringRowSerializer.getArray is an explicitly unimplemented operation: arrays cannot be represented in this serializer's plain-string value format, so it unconditionally throws NOT_SUPPORTED. Any read path that retrieves an array-typed column from a StringRowSerializer-backed table fails immediately.
Source
Thrown at presto-accumulo/src/main/java/com/facebook/presto/accumulo/serializers/StringRowSerializer.java:130
if (family.equals(ROW_ID_COLUMN) && qualifier.equals(ROW_ID_COLUMN)) {
return;
}
value.set(entry.getValue().get());
columnValues.put(familyQualifierColumnMap.get(family.toString()).get(qualifier.toString()), value.toString());
}
@Override
public boolean isNull(String name)
{
return columnValues.get(name) == null;
}
@Override
public Block getArray(String name, Type type)
{
throw new PrestoException(NOT_SUPPORTED, "arrays are not (yet?) supported for StringRowSerializer");
}
@Override
public void setArray(Text text, Type type, Block block)
{
throw new PrestoException(NOT_SUPPORTED, "arrays are not (yet?) supported for StringRowSerializer");
}
@Override
public boolean getBoolean(String name)
{
return Boolean.parseBoolean(getFieldValue(name));
}
@Override
public void setBoolean(Text text, Boolean value)
{
text.set(value.toString().getBytes(UTF_8));View on GitHub (pinned to 55bb57d202)
Solutions
- Re-create or re-serialize the table with LexicoderRowSerializer, which supports arrays
- Drop the ARRAY column from the table schema
- Avoid selecting array columns in queries against StringRowSerializer tables
- Fork and implement getArray by encoding elements into the string format
Example fix
// before
throw new PrestoException(NOT_SUPPORTED, "arrays are not (yet?) supported for StringRowSerializer");
// after
List<Object> elems = new ArrayList<>();
for (int i = 0; i < Types.getArraySize(type); i++) {
elems.add(elementValue); // decoded from the string representation
}
return elementsBlock(elems); Defensive patterns
Strategy: type-guard
Validate before calling
if (Types.isArrayType(columnType)) {
throw new IllegalArgumentException("Column " + name + " is an ARRAY; StringRowSerializer cannot read it");
}
Block b = row.getArray(name, columnType); Type guard
static boolean isStringRowReadable(Type t) {
return !Types.isArrayType(t) && !Types.isMapType(t);
} Try / catch
try {
return row.getArray(name, type);
} catch (PrestoException e) {
if (e.getErrorCode().getCode() == StandardErrorCode.NOT_SUPPORTED.toErrorCode().getCode()) {
return null; // treat array column as absent for string serializer
}
throw e;
} Prevention
- Never declare ARRAY columns on tables using StringRowSerializer
- Guard read paths with Types.isArrayType before calling getArray
- Prefer LexicoderRowSerializer when the schema needs collections
- Document serializer limitations in table metadata
When it happens
Trigger: Querying or iterating a Row whose schema contains an ARRAY column and calling getArray(name, type) — e.g. during record decode of array-typed columns in a table configured with StringRowSerializer.
Common situations: Table schema was extended with an array column after the table was configured to use StringRowSerializer; running connector smoke tests that exercise arrays against string-serialized tables (testArray caller).
Understand the failure class
Background: Presto NOT_SUPPORTED error: what "not supported" means and how to fix it — this error's family across 3 libraries.
Related errors
- UNEXPECTED_ACCUMULO_ERROR
- NOT_SUPPORTED
- UNEXPECTED_ACCUMULO_ERROR
- ACCUMULO_TABLE_DNE
- Metadata for view %s already exists
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/84908622ef5a9173.
Report an issue: GitHub.