return TIMESTAMP; case StandardTypes.ARRAY: return fromPrestoType(parameter.next(), null).convertToArrayType(); case StandardTypes.MAP: Preconditions.checkArgument(parameter.next().equals(StandardTypes.VARCHAR), "The first parameter of MAP must be STRING"); return fromPrestoType(parameter.next(), null).convertToMapValueType(); default: return BINARY;
public FieldType fromPrestoType(String name) { TypeSignature typeSignature = TypeSignature.parseTypeSignature(name); return PrestoQueryExecution.fromPrestoType(typeSignature.getBase(), typeSignature.getParameters().stream() .filter(param -> param.getKind() == TYPE) .map(param -> param.getTypeSignature().getBase()).iterator()); }
@Override public List<SchemaField> getCollection(String project, String collection) { return dao.listTableColumns(project, collection).stream() // this field should be removed since the server sets it .filter(a -> !a.getColumnName().equals(prestoConfig.getCheckpointColumn())) .map(column -> { TypeSignature typeSignature = column.getDataType().getTypeSignature(); return new SchemaField(column.getColumnName(), PrestoQueryExecution.fromPrestoType(typeSignature.getBase(), typeSignature.getParameters().stream() .filter(param -> param.getKind() == TYPE) .map(param -> param.getTypeSignature().getBase()).iterator())); }).collect(Collectors.toList()); }
public Map<String, List<SchemaField>> getTables(String project, BiPredicate<String, String> filter) { HashMap<String, List<SchemaField>> map = new HashMap<>(); for (TableColumn tableColumn : dao.listTableColumns(project, null)) { if (tableColumn.getColumnName().startsWith("$") || !filter.test(tableColumn.getTable().getTableName(), tableColumn.getColumnName())) { continue; } TypeSignature typeSignature = tableColumn.getDataType().getTypeSignature(); FieldType fieldType = PrestoQueryExecution.fromPrestoType(typeSignature.getBase(), typeSignature.getParameters().stream() .filter(param -> param.getKind() == TYPE) .map(param -> param.getTypeSignature().getBase()).iterator()); SchemaField column = new SchemaField(tableColumn.getColumnName(), fieldType); map.computeIfAbsent(tableColumn.getTable().getTableName(), key -> new ArrayList()).add(column); } return map; }
.map(c -> { List<ClientTypeSignatureParameter> arguments = c.getTypeSignature().getArguments(); return new SchemaField(c.getName(), fromPrestoType(c.getTypeSignature().getRawType(), arguments.stream() .filter(argument -> argument.getKind() == com.facebook.presto.spi.type.ParameterKind.TYPE)