Class JdbcMetadataHandler

  • All Implemented Interfaces:
    com.amazonaws.services.lambda.runtime.RequestStreamHandler
    Direct Known Subclasses:
    MultiplexingJdbcMetadataHandler

    public abstract class JdbcMetadataHandler
    extends com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
    Abstracts JDBC metadata handler and provides common reusable metadata handling.
    • Method Detail

      • getCredentialProvider

        protected com.amazonaws.athena.connector.credentials.CredentialsProvider getCredentialProvider()
      • doListSchemaNames

        public com.amazonaws.athena.connector.lambda.metadata.ListSchemasResponse doListSchemaNames​(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator,
                                                                                                    com.amazonaws.athena.connector.lambda.metadata.ListSchemasRequest listSchemasRequest)
                                                                                             throws Exception
        Specified by:
        doListSchemaNames in class com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
        Throws:
        Exception
      • doListTables

        public com.amazonaws.athena.connector.lambda.metadata.ListTablesResponse doListTables​(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator,
                                                                                              com.amazonaws.athena.connector.lambda.metadata.ListTablesRequest listTablesRequest)
                                                                                       throws Exception
        Specified by:
        doListTables in class com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
        Throws:
        Exception
      • listPaginatedTables

        protected com.amazonaws.athena.connector.lambda.metadata.ListTablesResponse listPaginatedTables​(Connection connection,
                                                                                                        com.amazonaws.athena.connector.lambda.metadata.ListTablesRequest listTablesRequest)
                                                                                                 throws SQLException
        This is default getAllTables no pagination. Override this if you want to support the behavior.
        Parameters:
        connection -
        listTablesRequest -
        Returns:
        Throws:
        SQLException
      • doGetTable

        public com.amazonaws.athena.connector.lambda.metadata.GetTableResponse doGetTable​(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator,
                                                                                          com.amazonaws.athena.connector.lambda.metadata.GetTableRequest getTableRequest)
                                                                                   throws Exception
        Specified by:
        doGetTable in class com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
        Throws:
        Exception
      • doGetQueryPassthroughSchema

        public com.amazonaws.athena.connector.lambda.metadata.GetTableResponse doGetQueryPassthroughSchema​(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator,
                                                                                                           com.amazonaws.athena.connector.lambda.metadata.GetTableRequest getTableRequest)
                                                                                                    throws Exception
        Overrides:
        doGetQueryPassthroughSchema in class com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
        Throws:
        Exception
      • convertDatasourceTypeToArrow

        protected Optional<org.apache.arrow.vector.types.pojo.ArrowType> convertDatasourceTypeToArrow​(int columnIndex,
                                                                                                      int precision,
                                                                                                      Map<String,​String> configOptions,
                                                                                                      ResultSetMetaData metadata)
                                                                                               throws SQLException
        A method that takes in a JDBC type; and converts it to Arrow Type This can be overriden by other Metadata Handlers extending JDBC
        Parameters:
        columnIndex -
        precision -
        configOptions -
        metadata -
        Returns:
        Arrow Type
        Throws:
        SQLException
      • getSchema

        protected org.apache.arrow.vector.types.pojo.Schema getSchema​(Connection jdbcConnection,
                                                                      com.amazonaws.athena.connector.lambda.domain.TableName tableName,
                                                                      org.apache.arrow.vector.types.pojo.Schema partitionSchema)
                                                               throws Exception
        Throws:
        Exception
      • getPartitionSchema

        public abstract org.apache.arrow.vector.types.pojo.Schema getPartitionSchema​(String catalogName)
        Delegates creation of partition schema to database type implementation.
        Parameters:
        catalogName - Athena provided catalog name.
        Returns:
        schema. See Schema
      • getPartitions

        public abstract void getPartitions​(com.amazonaws.athena.connector.lambda.data.BlockWriter blockWriter,
                                           com.amazonaws.athena.connector.lambda.metadata.GetTableLayoutRequest request,
                                           com.amazonaws.athena.connector.lambda.QueryStatusChecker queryStatusChecker)
                                    throws Exception
        Specified by:
        getPartitions in class com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
        Throws:
        Exception
      • doGetSplits

        public abstract com.amazonaws.athena.connector.lambda.metadata.GetSplitsResponse doGetSplits​(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator,
                                                                                                     com.amazonaws.athena.connector.lambda.metadata.GetSplitsRequest getSplitsRequest)
        Specified by:
        doGetSplits in class com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
      • getSplitClauses

        protected List<String> getSplitClauses​(com.amazonaws.athena.connector.lambda.domain.TableName tableName)
      • getArrayArrowTypeFromTypeName

        protected org.apache.arrow.vector.types.pojo.ArrowType getArrayArrowTypeFromTypeName​(String typeName,
                                                                                             int precision,
                                                                                             int scale)
        Converts an ARRAY column's TYPE_NAME (provided by the jdbc metadata) to an ArrowType.
        Parameters:
        typeName - The column's TYPE_NAME (e.g. _int4, _text, _float8, etc...)
        precision - Used for BigDecimal ArrowType
        scale - Used for BigDecimal ArrowType
        Returns:
        Utf8 ArrowType (VARCHAR)
      • setupQueryPassthroughSplit

        protected com.amazonaws.athena.connector.lambda.metadata.GetSplitsResponse setupQueryPassthroughSplit​(com.amazonaws.athena.connector.lambda.metadata.GetSplitsRequest request)
        Helper function that provides a single partition for Query Pass-Through
      • wrapNameWithEscapedCharacter

        protected String wrapNameWithEscapedCharacter​(String input)