prestodb/presto · error · PrestoException

HIVE_FILESYSTEM_ERROR

HIVE_FILESYSTEM_ERROR

Error message

Failed getting FileSystem: ${path}

What it means

A validation guard in the S3 Select record-cursor provider: it proactively resolves a FileSystem for the split's path via hdfsEnvironment.getFileSystem and wraps any failure (bad scheme, missing authority, underlying Hadoop FileSystem creation error) in this exception before record-cursor creation can proceed.

Source

Thrown at presto-hive/src/main/java/com/facebook/presto/hive/s3select/S3SelectRecordCursorProvider.java:86

            ConnectorSession session,
            HiveFileSplit fileSplit,
            Properties schema,
            List<HiveColumnHandle> columns,
            TupleDomain<HiveColumnHandle> effectivePredicate,
            DateTimeZone hiveStorageTimeZone,
            TypeManager typeManager,
            boolean s3SelectPushdownEnabled)
    {
        if (!s3SelectPushdownEnabled) {
            return Optional.empty();
        }

        Path path = new Path(fileSplit.getPath());
        try {
            this.hdfsEnvironment.getFileSystem(session.getUser(), path, configuration);
        }
        catch (IOException e) {
            throw new PrestoException(HIVE_FILESYSTEM_ERROR, "Failed getting FileSystem: " + path, e);
        }

        // Query is not going to filter any data, no need to use S3 Select.
        if (!hasFilters(schema, effectivePredicate, columns)) {
            return Optional.empty();
        }

        String serdeName = getDeserializerClassName(schema);
        Optional<S3SelectDataType> s3SelectDataTypeOptional = S3SelectSerDeDataTypeMapper.getDataType(serdeName);

        if (s3SelectDataTypeOptional.isPresent()) {
            S3SelectDataType s3SelectDataType = s3SelectDataTypeOptional.get();

            IonSqlQueryBuilder queryBuilder = new IonSqlQueryBuilder(typeManager, s3SelectDataType);
            String ionSqlQuery = queryBuilder.buildSql(columns, effectivePredicate);
            Optional<S3SelectLineRecordReader> recordReader = S3SelectLineRecordReaderProvider.get(configuration, clientConfig, path, fileSplit.getStart(), fileSplit.getLength(), fileSplit.getFileSize(), schema, ionSqlQuery, s3ClientFactory, s3SelectDataType);

            // If S3 Select data type is not mapped to a S3SelectLineRecordReader it will return Optional.empty()

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Verify the path scheme (e.g. s3a://, s3://) has a configured Hadoop FileSystem implementation in the cluster
  2. Check that the S3/HDFS credentials and configuration for the user are correct
  3. Confirm the table location URI in the metastore is well-formed and points to an accessible location
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-hive/src/main/java/com/facebook/presto/hive/s3select/S3SelectRecordCursorProvider.java:86 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/78be9fd8f195fe38. Report an issue: GitHub.