Class PostGreSqlMetadataHandler

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

    public class PostGreSqlMetadataHandler
    extends JdbcMetadataHandler
    Handles metadata for PostGreSql. User must have access to `schemata`, `tables`, `columns`, `partitions` tables in information_schema.
    • Method Detail

      • doGetDataSourceCapabilities

        public GetDataSourceCapabilitiesResponse doGetDataSourceCapabilities​(BlockAllocator allocator,
                                                                             GetDataSourceCapabilitiesRequest request)
        Description copied from class: MetadataHandler
        Used to describe the types of capabilities supported by a data source. An engine can use this to determine what portions of the query to push down. A connector that returns any optimization will guarantee that the associated predicate will be pushed down.
        Overrides:
        doGetDataSourceCapabilities in class MetadataHandler
        Parameters:
        allocator - Tool for creating and managing Apache Arrow Blocks.
        request - Provides details about the catalog being used.
        Returns:
        A GetDataSourceCapabilitiesResponse object which returns a map of supported optimizations that the connector is advertising to the consumer. The connector assumes all responsibility for whatever is passed here.
      • getPartitionSchema

        public org.apache.arrow.vector.types.pojo.Schema getPartitionSchema​(String catalogName)
        Description copied from class: JdbcMetadataHandler
        Delegates creation of partition schema to database type implementation.
        Specified by:
        getPartitionSchema in class JdbcMetadataHandler
        Parameters:
        catalogName - Athena provided catalog name.
        Returns:
        schema. See Schema
      • getPartitions

        public void getPartitions​(BlockWriter blockWriter,
                                  GetTableLayoutRequest getTableLayoutRequest,
                                  QueryStatusChecker queryStatusChecker)
                           throws Exception
        Description copied from class: MetadataHandler
        Used to get the partitions that must be read from the request table in order to satisfy the requested predicate.
        Specified by:
        getPartitions in class JdbcMetadataHandler
        Parameters:
        blockWriter - Used to write rows (partitions) into the Apache Arrow response.
        getTableLayoutRequest - Provides details of the catalog, database, and table being queried as well as any filter predicate.
        queryStatusChecker - A QueryStatusChecker that you can use to stop doing work for a query that has already terminated
        Throws:
        Exception
      • doGetSplits

        public GetSplitsResponse doGetSplits​(BlockAllocator blockAllocator,
                                             GetSplitsRequest getSplitsRequest)
        Description copied from class: MetadataHandler
        Used to split-up the reads required to scan the requested batch of partition(s).
        Specified by:
        doGetSplits in class JdbcMetadataHandler
        Parameters:
        blockAllocator - Tool for creating and managing Apache Arrow Blocks.
        getSplitsRequest - Provides details of the catalog, database, table, andpartition(s) being queried as well as any filter predicate.
        Returns:
        A GetSplitsResponse which primarily contains: 1. A Set which represent read operations Amazon Athena must perform by calling your read function. 2. (Optional) A continuation token which allows you to paginate the generation of splits for large queries.
      • 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.
        Overrides:
        getArrayArrowTypeFromTypeName in class JdbcMetadataHandler
        Parameters:
        typeName - The column's TYPE_NAME (e.g. _int4, _text, _float8, etc...)
        precision - Used for BigDecimal ArrowType
        scale - Used for BigDecimal ArrowType
        Returns:
        ArrowType equivalent of the fieldType.
      • getMaterializedViewOrExternalTable

        protected PreparedStatement getMaterializedViewOrExternalTable​(Connection connection,
                                                                       String matviewname,
                                                                       String databaseName)
                                                                throws SQLException
        Returns Materialized View for Postgresql Or External Tables for Redshift - Case Insensitive Note: Redshift maintain Materialized View in the normal schema metadata as regular tables; however maintains External Tables in a separate metadata tables
        Parameters:
        connection -
        matviewname -
        databaseName -
        Returns:
        Prepared Statement
        Throws:
        SQLException
      • getCharColumns

        public static List<String> getCharColumns​(Connection connection,
                                                  String schema,
                                                  String table)
                                           throws SQLException
        Retrieves the names of columns with the data type 'CHAR' for a specified table in a PostgreSQL/Redshift database.
        Parameters:
        connection - the JDBC connection to the database
        schema - Postgresql/Redshift schema name
        table - Postgresql/Redshift table name
        Returns:
        a list of column names that have the data type 'CHAR'
        Throws:
        SQLException - if a database access error occurs