Class JdbcMetadataHandler
- java.lang.Object
-
- com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
-
- com.amazonaws.athena.connectors.jdbc.manager.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.MetadataHandlerAbstracts JDBC metadata handler and provides common reusable metadata handling.
-
-
Field Summary
Fields Modifier and Type Field Description protected JDBCCaseResolvercaseResolverprotected JdbcQueryPassthroughjdbcQueryPassthroughstatic StringTABLES_AND_VIEWS
-
Constructor Summary
Constructors Modifier Constructor Description protectedJdbcMetadataHandler(DatabaseConnectionConfig databaseConnectionConfig, JdbcConnectionFactory jdbcConnectionFactory, Map<String,String> configOptions)protectedJdbcMetadataHandler(DatabaseConnectionConfig databaseConnectionConfig, JdbcConnectionFactory jdbcConnectionFactory, Map<String,String> configOptions, JDBCCaseResolver caseResolver)protectedJdbcMetadataHandler(DatabaseConnectionConfig databaseConnectionConfig, software.amazon.awssdk.services.secretsmanager.SecretsManagerClient secretsManager, software.amazon.awssdk.services.athena.AthenaClient athena, JdbcConnectionFactory jdbcConnectionFactory, Map<String,String> configOptions)protectedJdbcMetadataHandler(DatabaseConnectionConfig databaseConnectionConfig, software.amazon.awssdk.services.secretsmanager.SecretsManagerClient secretsManager, software.amazon.awssdk.services.athena.AthenaClient athena, JdbcConnectionFactory jdbcConnectionFactory, Map<String,String> configOptions, JDBCCaseResolver caseResolver)protectedJdbcMetadataHandler(String sourceType, Map<String,String> configOptions)Used only by Multiplexing handler.protectedJdbcMetadataHandler(String sourceType, Map<String,String> configOptions, JDBCCaseResolver caseResolver)Used only by Multiplexing handler.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected Optional<org.apache.arrow.vector.types.pojo.ArrowType>convertDatasourceTypeToArrow(int columnIndex, int precision, Map<String,String> configOptions, ResultSetMetaData metadata)A method that takes in a JDBC type; and converts it to Arrow Type This can be overriden by other Metadata Handlers extending JDBCcom.amazonaws.athena.connector.lambda.metadata.GetTableResponsedoGetQueryPassthroughSchema(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator, com.amazonaws.athena.connector.lambda.metadata.GetTableRequest getTableRequest)abstract com.amazonaws.athena.connector.lambda.metadata.GetSplitsResponsedoGetSplits(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator, com.amazonaws.athena.connector.lambda.metadata.GetSplitsRequest getSplitsRequest)com.amazonaws.athena.connector.lambda.metadata.GetTableResponsedoGetTable(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator, com.amazonaws.athena.connector.lambda.metadata.GetTableRequest getTableRequest)com.amazonaws.athena.connector.lambda.metadata.ListSchemasResponsedoListSchemaNames(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator, com.amazonaws.athena.connector.lambda.metadata.ListSchemasRequest listSchemasRequest)com.amazonaws.athena.connector.lambda.metadata.ListTablesResponsedoListTables(com.amazonaws.athena.connector.lambda.data.BlockAllocator blockAllocator, com.amazonaws.athena.connector.lambda.metadata.ListTablesRequest listTablesRequest)protected StringescapeNamePattern(String name, String escape)protected org.apache.arrow.vector.types.pojo.ArrowTypegetArrayArrowTypeFromTypeName(String typeName, int precision, int scale)Converts an ARRAY column's TYPE_NAME (provided by the jdbc metadata) to an ArrowType.protected ResultSetgetColumns(String catalogName, com.amazonaws.athena.connector.lambda.domain.TableName tableHandle, DatabaseMetaData metadata)protected com.amazonaws.athena.connector.credentials.CredentialsProvidergetCredentialProvider()protected JdbcConnectionFactorygetJdbcConnectionFactory()abstract voidgetPartitions(com.amazonaws.athena.connector.lambda.data.BlockWriter blockWriter, com.amazonaws.athena.connector.lambda.metadata.GetTableLayoutRequest request, com.amazonaws.athena.connector.lambda.QueryStatusChecker queryStatusChecker)abstract org.apache.arrow.vector.types.pojo.SchemagetPartitionSchema(String catalogName)Delegates creation of partition schema to database type implementation.protected org.apache.arrow.vector.types.pojo.SchemagetSchema(Connection jdbcConnection, com.amazonaws.athena.connector.lambda.domain.TableName tableName, org.apache.arrow.vector.types.pojo.Schema partitionSchema)protected List<String>getSplitClauses(com.amazonaws.athena.connector.lambda.domain.TableName tableName)protected Set<String>listDatabaseNames(Connection jdbcConnection)protected com.amazonaws.athena.connector.lambda.metadata.ListTablesResponselistPaginatedTables(Connection connection, com.amazonaws.athena.connector.lambda.metadata.ListTablesRequest listTablesRequest)This is default getAllTables no pagination.protected List<com.amazonaws.athena.connector.lambda.domain.TableName>listTables(Connection jdbcConnection, String databaseName)protected com.amazonaws.athena.connector.lambda.metadata.GetSplitsResponsesetupQueryPassthroughSplit(com.amazonaws.athena.connector.lambda.metadata.GetSplitsRequest request)Helper function that provides a single partition for Query Pass-Throughprotected StringwrapNameWithEscapedCharacter(String input)-
Methods inherited from class com.amazonaws.athena.connector.lambda.handlers.MetadataHandler
doGetDataSourceCapabilities, doGetTableLayout, doHandleRequest, doPing, enhancePartitionSchema, getSecret, handleRequest, makeEncryptionKey, makeSpillLocation, onPing, resolveSecrets, resolveWithDefaultCredentials
-
-
-
-
Field Detail
-
TABLES_AND_VIEWS
public static final String TABLES_AND_VIEWS
- See Also:
- Constant Field Values
-
caseResolver
protected final JDBCCaseResolver caseResolver
-
jdbcQueryPassthrough
protected JdbcQueryPassthrough jdbcQueryPassthrough
-
-
Constructor Detail
-
JdbcMetadataHandler
protected JdbcMetadataHandler(String sourceType, Map<String,String> configOptions)
Used only by Multiplexing handler. All calls will be delegated to respective database handler.
-
JdbcMetadataHandler
protected JdbcMetadataHandler(String sourceType, Map<String,String> configOptions, JDBCCaseResolver caseResolver)
Used only by Multiplexing handler. All calls will be delegated to respective database handler.
-
JdbcMetadataHandler
protected JdbcMetadataHandler(DatabaseConnectionConfig databaseConnectionConfig, JdbcConnectionFactory jdbcConnectionFactory, Map<String,String> configOptions)
-
JdbcMetadataHandler
protected JdbcMetadataHandler(DatabaseConnectionConfig databaseConnectionConfig, JdbcConnectionFactory jdbcConnectionFactory, Map<String,String> configOptions, JDBCCaseResolver caseResolver)
-
JdbcMetadataHandler
protected JdbcMetadataHandler(DatabaseConnectionConfig databaseConnectionConfig, software.amazon.awssdk.services.secretsmanager.SecretsManagerClient secretsManager, software.amazon.awssdk.services.athena.AthenaClient athena, JdbcConnectionFactory jdbcConnectionFactory, Map<String,String> configOptions)
-
JdbcMetadataHandler
protected JdbcMetadataHandler(DatabaseConnectionConfig databaseConnectionConfig, software.amazon.awssdk.services.secretsmanager.SecretsManagerClient secretsManager, software.amazon.awssdk.services.athena.AthenaClient athena, JdbcConnectionFactory jdbcConnectionFactory, Map<String,String> configOptions, JDBCCaseResolver caseResolver)
-
-
Method Detail
-
getJdbcConnectionFactory
protected JdbcConnectionFactory getJdbcConnectionFactory()
-
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:
doListSchemaNamesin classcom.amazonaws.athena.connector.lambda.handlers.MetadataHandler- Throws:
Exception
-
listDatabaseNames
protected Set<String> listDatabaseNames(Connection jdbcConnection) throws SQLException
- Throws:
SQLException
-
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:
doListTablesin classcom.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
-
listTables
protected List<com.amazonaws.athena.connector.lambda.domain.TableName> listTables(Connection jdbcConnection, String databaseName) throws SQLException
- 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:
doGetTablein classcom.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:
doGetQueryPassthroughSchemain classcom.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
-
getColumns
protected ResultSet getColumns(String catalogName, com.amazonaws.athena.connector.lambda.domain.TableName tableHandle, DatabaseMetaData metadata) throws SQLException
- Throws:
SQLException
-
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:
getPartitionsin classcom.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:
doGetSplitsin classcom.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 ArrowTypescale- 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
-
-