├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── question---how-tos.md ├── dependabot.yml └── workflows │ ├── auto-approve.yml │ ├── codeql-analysis.yml │ ├── cut_release.yml │ ├── javadoc_sync.yaml │ ├── maven_push.yml │ ├── publish_to_maven_central.yml │ ├── run_release_tests.yml │ └── stalled.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── NOTICE ├── README.md ├── athena-aws-cmdb ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-aws-cmdb-connection.yaml ├── athena-aws-cmdb-package.yaml ├── athena-aws-cmdb.yaml ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── aws │ │ │ └── cmdb │ │ │ ├── AwsCmdbCompositeHandler.java │ │ │ ├── AwsCmdbMetadataHandler.java │ │ │ ├── AwsCmdbRecordHandler.java │ │ │ ├── TableProviderFactory.java │ │ │ └── tables │ │ │ ├── EmrClusterTableProvider.java │ │ │ ├── RdsTableProvider.java │ │ │ ├── TableProvider.java │ │ │ ├── ec2 │ │ │ ├── EbsTableProvider.java │ │ │ ├── Ec2TableProvider.java │ │ │ ├── ImagesTableProvider.java │ │ │ ├── RouteTableProvider.java │ │ │ ├── SecurityGroupsTableProvider.java │ │ │ ├── SubnetTableProvider.java │ │ │ └── VpcTableProvider.java │ │ │ └── s3 │ │ │ ├── S3BucketsTableProvider.java │ │ │ └── S3ObjectsTableProvider.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── aws │ └── cmdb │ ├── AwsCmdbMetadataHandlerTest.java │ ├── AwsCmdbRecordHandlerTest.java │ ├── TableProviderFactoryTest.java │ └── tables │ ├── AbstractTableProviderTest.java │ ├── EmrClusterTableProviderTest.java │ ├── RdsTableProviderTest.java │ ├── ec2 │ ├── EbsTableProviderTest.java │ ├── Ec2TableProviderTest.java │ ├── ImagesTableProviderTest.java │ ├── RouteTableProviderTest.java │ ├── SecurityGroupsTableProviderTest.java │ ├── SubnetTableProviderTest.java │ └── VpcTableProviderTest.java │ └── s3 │ ├── S3BucketsTableProviderTest.java │ └── S3ObjectsTableProviderTest.java ├── athena-clickhouse ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-clickhouse-package.yaml ├── athena-clickhouse.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── clickhouse │ │ │ ├── ClickHouseCompositeHandler.java │ │ │ ├── ClickHouseConstants.java │ │ │ ├── ClickHouseMetadataHandler.java │ │ │ ├── ClickHouseMuxCompositeHandler.java │ │ │ ├── ClickHouseMuxMetadataHandler.java │ │ │ ├── ClickHouseMuxRecordHandler.java │ │ │ ├── ClickHouseRecordHandler.java │ │ │ ├── ClickHouseUtil.java │ │ │ └── resolver │ │ │ └── ClickhouseJDBCCaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── clickhouse │ ├── ClickHouseMetadataHandlerTest.java │ ├── ClickHouseMuxJdbcMetadataHandlerTest.java │ └── ClickHouseMuxJdbcRecordHandlerTest.java ├── athena-cloudera-hive ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-cloudera-hive-connection.yaml ├── athena-cloudera-hive-package.yaml ├── athena-cloudera-hive.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── cloudera │ │ │ ├── ClouderaHiveEnvironmentProperties.java │ │ │ ├── HiveCompositeHandler.java │ │ │ ├── HiveConstants.java │ │ │ ├── HiveFederationExpressionParser.java │ │ │ ├── HiveJdbcConnectionFactory.java │ │ │ ├── HiveMetadataHandler.java │ │ │ ├── HiveMuxCompositeHandler.java │ │ │ ├── HiveMuxMetadataHandler.java │ │ │ ├── HiveMuxRecordHandler.java │ │ │ ├── HiveQueryStringBuilder.java │ │ │ └── HiveRecordHandler.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── cloudera │ ├── ClouderaHiveEnvironmentPropertiesTest.java │ ├── HiveJdbcConnectionFactoryTest.java │ ├── HiveMetadataHandlerTest.java │ ├── HiveMuxMetadataHandlerTest.java │ ├── HiveMuxRecordHandlerTest.java │ ├── HiveQueryStringBuilderTest.java │ ├── HiveRecordHandlerTest.java │ └── integ │ └── HiveIntegTest.java ├── athena-cloudera-impala ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-cloudera-impala-connection.yaml ├── athena-cloudera-impala-package.yaml ├── athena-cloudera-impala.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── cloudera │ │ │ ├── ImpalaCompositeHandler.java │ │ │ ├── ImpalaConstants.java │ │ │ ├── ImpalaEnvironmentProperties.java │ │ │ ├── ImpalaFederationExpressionParser.java │ │ │ ├── ImpalaJdbcConnectionFactory.java │ │ │ ├── ImpalaMetadataHandler.java │ │ │ ├── ImpalaMuxCompositeHandler.java │ │ │ ├── ImpalaMuxMetadataHandler.java │ │ │ ├── ImpalaMuxRecordHandler.java │ │ │ ├── ImpalaQueryStringBuilder.java │ │ │ └── ImpalaRecordHandler.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── cloudera │ ├── ImpalaEnvironmentPropertiesTest.java │ ├── ImpalaJdbcConnectionFactoryTest.java │ ├── ImpalaMetadataHandlerTest.java │ ├── ImpalaMuxMetadataHandlerTest.java │ ├── ImpalaMuxRecordHandlerTest.java │ ├── ImpalaQueryStringBuilderTest.java │ ├── ImpalaRecordHandlerTest.java │ └── integ │ └── ImpalaIntegTest.java ├── athena-cloudwatch-metrics ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-cloudwatch-metrics-connection.yaml ├── athena-cloudwatch-metrics-package.yaml ├── athena-cloudwatch-metrics.yaml ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── cloudwatch │ │ │ └── metrics │ │ │ ├── MetricStatSerDe.java │ │ │ ├── MetricUtils.java │ │ │ ├── MetricsCompositeHandler.java │ │ │ ├── MetricsExceptionFilter.java │ │ │ ├── MetricsMetadataHandler.java │ │ │ ├── MetricsRecordHandler.java │ │ │ └── tables │ │ │ ├── MetricSamplesTable.java │ │ │ ├── MetricsTable.java │ │ │ └── Table.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── cloudwatch │ └── metrics │ ├── MetricStatSerDeTest.java │ ├── MetricUtilsTest.java │ ├── MetricsMetadataHandlerTest.java │ ├── MetricsRecordHandlerTest.java │ └── TestUtils.java ├── athena-cloudwatch ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-cloudwatch-connection.yaml ├── athena-cloudwatch-package.yaml ├── athena-cloudwatch.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── cloudwatch │ │ │ ├── CloudwatchCompositeHandler.java │ │ │ ├── CloudwatchExceptionFilter.java │ │ │ ├── CloudwatchMetadataHandler.java │ │ │ ├── CloudwatchRecordHandler.java │ │ │ ├── CloudwatchTableName.java │ │ │ ├── CloudwatchTableResolver.java │ │ │ ├── CloudwatchUtils.java │ │ │ └── qpt │ │ │ └── CloudwatchQueryPassthrough.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── cloudwatch │ ├── CloudwatchMetadataHandlerTest.java │ ├── CloudwatchRecordHandlerTest.java │ └── integ │ └── CloudwatchIntegTest.java ├── athena-datalakegen2 ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-datalakegen2-connection.yaml ├── athena-datalakegen2-package.yaml ├── athena-datalakegen2.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── datalakegen2 │ │ │ ├── DataLakeGen2CompositeHandler.java │ │ │ ├── DataLakeGen2Constants.java │ │ │ ├── DataLakeGen2DataType.java │ │ │ ├── DataLakeGen2EnvironmentProperties.java │ │ │ ├── DataLakeGen2FederationExpressionParser.java │ │ │ ├── DataLakeGen2JdbcConnectionFactory.java │ │ │ ├── DataLakeGen2MetadataHandler.java │ │ │ ├── DataLakeGen2MuxCompositeHandler.java │ │ │ ├── DataLakeGen2MuxMetadataHandler.java │ │ │ ├── DataLakeGen2MuxRecordHandler.java │ │ │ ├── DataLakeGen2QueryStringBuilder.java │ │ │ ├── DataLakeGen2RecordHandler.java │ │ │ └── resolver │ │ │ └── DataLakeGen2CaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── datalakegen2 │ ├── DataLakeGen2DataTypeTest.java │ ├── DataLakeGen2MetadataHandlerTest.java │ ├── DataLakeGen2MuxMetadataHandlerTest.java │ ├── DataLakeGen2MuxRecordHandlerTest.java │ ├── DataLakeQueryStringBuilderTest.java │ ├── DataLakeRecordHandlerTest.java │ └── integ │ └── DataLakeGen2IntegTest.java ├── athena-db2-as400 ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-db2-as400-connection.yaml ├── athena-db2-as400-package.yaml ├── athena-db2-as400.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── db2as400 │ │ │ ├── Db2As400CompositeHandler.java │ │ │ ├── Db2As400Constants.java │ │ │ ├── Db2As400EnvironmentProperties.java │ │ │ ├── Db2As400MetadataHandler.java │ │ │ ├── Db2As400MuxCompositeHandler.java │ │ │ ├── Db2As400MuxMetadataHandler.java │ │ │ ├── Db2As400MuxRecordHandler.java │ │ │ ├── Db2As400QueryStringBuilder.java │ │ │ └── Db2As400RecordHandler.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── db2as400 │ ├── Db2As400CompositeHandlerTest.java │ ├── Db2As400MetadataHandlerTest.java │ ├── Db2As400QueryStringBuilderTest.java │ ├── Db2As400RecordHandlerTest.java │ └── integ │ └── Db2As400IntegTest.java ├── athena-db2 ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-db2-connection.yaml ├── athena-db2-package.yaml ├── athena-db2.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── db2 │ │ │ ├── Db2CompositeHandler.java │ │ │ ├── Db2Constants.java │ │ │ ├── Db2EnvironmentProperties.java │ │ │ ├── Db2FederationExpressionParser.java │ │ │ ├── Db2MetadataHandler.java │ │ │ ├── Db2MuxCompositeHandler.java │ │ │ ├── Db2MuxMetadataHandler.java │ │ │ ├── Db2MuxRecordHandler.java │ │ │ ├── Db2QueryStringBuilder.java │ │ │ └── Db2RecordHandler.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── db2 │ ├── Db2MetadataHandlerTest.java │ ├── Db2QueryStringBuilderTest.java │ ├── Db2RecordHandlerTest.java │ └── integ │ └── Db2IntegTest.java ├── athena-docdb ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-docdb-connection.yaml ├── athena-docdb-package.yaml ├── athena-docdb.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── docdb │ │ │ ├── DocDBCaseInsensitiveResolver.java │ │ │ ├── DocDBCompositeHandler.java │ │ │ ├── DocDBConnectionFactory.java │ │ │ ├── DocDBEnvironmentProperties.java │ │ │ ├── DocDBFieldResolver.java │ │ │ ├── DocDBMetadataHandler.java │ │ │ ├── DocDBRecordHandler.java │ │ │ ├── QueryUtils.java │ │ │ ├── SchemaUtils.java │ │ │ ├── TypeUtils.java │ │ │ ├── integ │ │ │ └── DocDbIntegTestHandler.java │ │ │ └── qpt │ │ │ └── DocDBQueryPassthrough.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── docdb │ ├── DocDBConnectionFactoryTest.java │ ├── DocDBEnvironmentPropertiesTest.java │ ├── DocDBMetadataHandlerTest.java │ ├── DocDBRecordHandlerTest.java │ ├── DocumentGenerator.java │ ├── QueryUtilsTest.java │ ├── SchemaUtilsTest.java │ ├── StubbingCursor.java │ ├── TestBase.java │ ├── TypeUtilsTest.java │ ├── UnsupportedType.java │ └── integ │ └── DocDbIntegTest.java ├── athena-dynamodb ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-dynamodb-connection.yaml ├── athena-dynamodb-package.yaml ├── athena-dynamodb.yaml ├── etc │ └── test-config.json ├── native-libs │ ├── libsqlite4java-linux-amd64-1.0.392.so │ ├── libsqlite4java-linux-i386-1.0.392.so │ ├── libsqlite4java-osx-1.0.392.dylib │ ├── sqlite4java-win32-x64-1.0.392.dll │ └── sqlite4java-win32-x86-1.0.392.dll ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── dynamodb │ │ │ ├── DynamoDBCompositeHandler.java │ │ │ ├── DynamoDBMetadataHandler.java │ │ │ ├── DynamoDBRecordHandler.java │ │ │ ├── constants │ │ │ └── DynamoDBConstants.java │ │ │ ├── credentials │ │ │ └── CrossAccountCredentialsProviderV2.java │ │ │ ├── model │ │ │ ├── DynamoDBIndex.java │ │ │ ├── DynamoDBPaginatedTables.java │ │ │ └── DynamoDBTable.java │ │ │ ├── qpt │ │ │ └── DDBQueryPassthrough.java │ │ │ ├── resolver │ │ │ ├── DynamoDBFieldResolver.java │ │ │ └── DynamoDBTableResolver.java │ │ │ ├── throttling │ │ │ └── DynamoDBExceptionFilter.java │ │ │ └── util │ │ │ ├── DDBPredicateUtils.java │ │ │ ├── DDBRecordMetadata.java │ │ │ ├── DDBTableUtils.java │ │ │ ├── DDBTypeUtils.java │ │ │ └── IncrementingValueNameProducer.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── dynamodb │ ├── DDBFieldResolverTest.java │ ├── DDBPredicateUtilsTest.java │ ├── DDBTypeUtilsTest.java │ ├── DdbTableUtils.java │ ├── DynamoDBMetadataHandlerTest.java │ ├── DynamoDBRecordHandlerTest.java │ ├── DynamoDbIntegTest.java │ └── TestBase.java ├── athena-elasticsearch ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-elasticsearch-connection.yaml ├── athena-elasticsearch-package.yaml ├── athena-elasticsearch.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── elasticsearch │ │ │ ├── AWSRequestSigningApacheInterceptor.java │ │ │ ├── AwsElasticsearchFactory.java │ │ │ ├── AwsRestHighLevelClient.java │ │ │ ├── AwsRestHighLevelClientFactory.java │ │ │ ├── CacheableAwsRestHighLevelClient.java │ │ │ ├── ElasticsearchCompositeHandler.java │ │ │ ├── ElasticsearchDomainMapProvider.java │ │ │ ├── ElasticsearchFieldResolver.java │ │ │ ├── ElasticsearchGlueTypeMapper.java │ │ │ ├── ElasticsearchMetadataHandler.java │ │ │ ├── ElasticsearchQueryUtils.java │ │ │ ├── ElasticsearchRecordHandler.java │ │ │ ├── ElasticsearchSchemaUtils.java │ │ │ ├── ElasticsearchTypeUtils.java │ │ │ └── qpt │ │ │ └── ElasticsearchQueryPassthrough.java │ └── resources │ │ └── log4j2.xml │ └── test │ ├── java │ └── com │ │ └── amazonaws │ │ └── athena │ │ └── connectors │ │ └── elasticsearch │ │ ├── CacheableAwsRestHighLevelClientTest.java │ │ ├── ElasticsearchDomainMapProviderTest.java │ │ ├── ElasticsearchFieldResolverGenerativeTest.java │ │ ├── ElasticsearchFieldResolverTest.java │ │ ├── ElasticsearchGlueTypeMapperTest.java │ │ ├── ElasticsearchMetadataHandlerTest.java │ │ ├── ElasticsearchQueryUtilsTest.java │ │ ├── ElasticsearchRecordHandlerTest.java │ │ ├── ElasticsearchSchemaUtilsTest.java │ │ ├── ElasticsearchTypeUtilsTest.java │ │ └── integ │ │ ├── ElasticsearchIndexUtils.java │ │ └── ElasticsearchIntegTest.java │ └── resources │ └── mockito-extensions │ ├── README.md │ └── org.mockito.plugins.MockMaker ├── athena-example ├── LICENSE.txt ├── README.md ├── athena-example.yaml ├── pom.xml ├── sample_data.csv └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── example │ │ │ ├── ExampleCompositeHandler.java │ │ │ ├── ExampleMetadataHandler.java │ │ │ ├── ExampleRecordHandler.java │ │ │ └── ExampleUserDefinedFuncHandler.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── example │ ├── ExampleMetadataHandlerTest.java │ ├── ExampleRecordHandlerTest.java │ └── ExampleUserDefinedFuncHandlerTest.java ├── athena-federation-integ-test ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── amazonaws │ │ └── athena │ │ └── connector │ │ └── integ │ │ ├── ConnectorStackAttributesProvider.java │ │ ├── ConnectorStackFactory.java │ │ ├── ConnectorStackProvider.java │ │ ├── IntegrationTestBase.java │ │ ├── clients │ │ └── CloudFormationClient.java │ │ ├── data │ │ ├── ConnectorPackagingAttributes.java │ │ ├── ConnectorStackAttributes.java │ │ ├── ConnectorVpcAttributes.java │ │ ├── ConnectorVpcSubnetAttributes.java │ │ ├── SecretsManagerCredentials.java │ │ └── TestConfig.java │ │ ├── providers │ │ ├── ConnectorEnvironmentVarsProvider.java │ │ ├── ConnectorPackagingAttributesProvider.java │ │ ├── ConnectorVpcAttributesProvider.java │ │ └── SecretsManagerCredentialsProvider.java │ │ └── stacks │ │ ├── ConnectorStack.java │ │ └── ConnectorWithVpcStack.java │ └── resources │ └── log4j2.xml ├── athena-federation-sdk-tools ├── LICENSE.txt ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── amazonaws │ │ └── athena │ │ └── connector │ │ └── validation │ │ ├── ConnectorValidator.java │ │ ├── ConstraintParser.java │ │ ├── FederationServiceProvider.java │ │ ├── LambdaMetadataProvider.java │ │ └── LambdaRecordProvider.java │ └── resources │ └── log4j2.xml ├── athena-federation-sdk ├── LICENSE.txt ├── README.md ├── athena-federation-sdk.yaml ├── checkstyle.xml ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connector │ │ │ ├── credentials │ │ │ ├── CredentialsProvider.java │ │ │ ├── CrossAccountCredentialsProvider.java │ │ │ ├── DefaultCredentials.java │ │ │ ├── DefaultCredentialsProvider.java │ │ │ └── StaticCredentialsProvider.java │ │ │ ├── lambda │ │ │ ├── CollectionsUtils.java │ │ │ ├── QueryStatusChecker.java │ │ │ ├── ThrottlingInvoker.java │ │ │ ├── connection │ │ │ │ ├── EnvironmentConstants.java │ │ │ │ └── EnvironmentProperties.java │ │ │ ├── data │ │ │ │ ├── ArrowSchemaUtils.java │ │ │ │ ├── ArrowTypeComparator.java │ │ │ │ ├── AthenaFederationIpcOption.java │ │ │ │ ├── Block.java │ │ │ │ ├── BlockAllocator.java │ │ │ │ ├── BlockAllocatorImpl.java │ │ │ │ ├── BlockAllocatorRegistry.java │ │ │ │ ├── BlockSpiller.java │ │ │ │ ├── BlockUtils.java │ │ │ │ ├── BlockWriter.java │ │ │ │ ├── DateTimeFormatterUtil.java │ │ │ │ ├── FieldBuilder.java │ │ │ │ ├── FieldResolver.java │ │ │ │ ├── RecordBatchSerDe.java │ │ │ │ ├── S3BlockSpillReader.java │ │ │ │ ├── S3BlockSpiller.java │ │ │ │ ├── SchemaAware.java │ │ │ │ ├── SchemaBuilder.java │ │ │ │ ├── SchemaSerDe.java │ │ │ │ ├── SimpleBlockWriter.java │ │ │ │ ├── SpillConfig.java │ │ │ │ ├── SupportedTypes.java │ │ │ │ ├── TimeZoneKey.java │ │ │ │ ├── projectors │ │ │ │ │ ├── ArrowValueProjector.java │ │ │ │ │ ├── ArrowValueProjectorImpl.java │ │ │ │ │ ├── ListArrowValueProjector.java │ │ │ │ │ ├── ProjectorUtils.java │ │ │ │ │ ├── SimpleArrowValueProjector.java │ │ │ │ │ └── StructArrowValueProjector.java │ │ │ │ └── writers │ │ │ │ │ ├── GeneratedRowWriter.java │ │ │ │ │ ├── extractors │ │ │ │ │ ├── BigIntExtractor.java │ │ │ │ │ ├── BitExtractor.java │ │ │ │ │ ├── DateDayExtractor.java │ │ │ │ │ ├── DateMilliExtractor.java │ │ │ │ │ ├── DecimalExtractor.java │ │ │ │ │ ├── Extractor.java │ │ │ │ │ ├── Float4Extractor.java │ │ │ │ │ ├── Float8Extractor.java │ │ │ │ │ ├── IntExtractor.java │ │ │ │ │ ├── SmallIntExtractor.java │ │ │ │ │ ├── TinyIntExtractor.java │ │ │ │ │ ├── VarBinaryExtractor.java │ │ │ │ │ └── VarCharExtractor.java │ │ │ │ │ ├── fieldwriters │ │ │ │ │ ├── BigIntFieldWriter.java │ │ │ │ │ ├── BitFieldWriter.java │ │ │ │ │ ├── DateDayFieldWriter.java │ │ │ │ │ ├── DateMilliFieldWriter.java │ │ │ │ │ ├── DecimalFieldWriter.java │ │ │ │ │ ├── FieldWriter.java │ │ │ │ │ ├── FieldWriterFactory.java │ │ │ │ │ ├── Float4FieldWriter.java │ │ │ │ │ ├── Float8FieldWriter.java │ │ │ │ │ ├── IntFieldWriter.java │ │ │ │ │ ├── SmallIntFieldWriter.java │ │ │ │ │ ├── TinyIntFieldWriter.java │ │ │ │ │ ├── VarBinaryFieldWriter.java │ │ │ │ │ └── VarCharFieldWriter.java │ │ │ │ │ └── holders │ │ │ │ │ ├── NullableDecimalHolder.java │ │ │ │ │ ├── NullableVarBinaryHolder.java │ │ │ │ │ └── NullableVarCharHolder.java │ │ │ ├── domain │ │ │ │ ├── Split.java │ │ │ │ ├── TableName.java │ │ │ │ ├── predicate │ │ │ │ │ ├── AllOrNoneValueSet.java │ │ │ │ │ ├── ConstraintEvaluator.java │ │ │ │ │ ├── ConstraintProjector.java │ │ │ │ │ ├── Constraints.java │ │ │ │ │ ├── EquatableValueSet.java │ │ │ │ │ ├── LiteralValueMarker.java │ │ │ │ │ ├── Marker.java │ │ │ │ │ ├── MarkerFactory.java │ │ │ │ │ ├── OrderByField.java │ │ │ │ │ ├── Range.java │ │ │ │ │ ├── Ranges.java │ │ │ │ │ ├── SortedRangeSet.java │ │ │ │ │ ├── ValueMarker.java │ │ │ │ │ ├── ValueMarkerComparator.java │ │ │ │ │ ├── ValueSet.java │ │ │ │ │ ├── expression │ │ │ │ │ │ ├── ConstantExpression.java │ │ │ │ │ │ ├── FederationExpression.java │ │ │ │ │ │ ├── FunctionCallExpression.java │ │ │ │ │ │ └── VariableExpression.java │ │ │ │ │ └── functions │ │ │ │ │ │ ├── FunctionName.java │ │ │ │ │ │ ├── OperatorType.java │ │ │ │ │ │ └── StandardFunctions.java │ │ │ │ └── spill │ │ │ │ │ ├── S3SpillLocation.java │ │ │ │ │ ├── SpillLocation.java │ │ │ │ │ └── SpillLocationVerifier.java │ │ │ ├── exceptions │ │ │ │ ├── AthenaConnectorException.java │ │ │ │ └── FederationThrottleException.java │ │ │ ├── handlers │ │ │ │ ├── AthenaExceptionFilter.java │ │ │ │ ├── CompositeHandler.java │ │ │ │ ├── FederationCapabilities.java │ │ │ │ ├── GlueMetadataHandler.java │ │ │ │ ├── MetadataHandler.java │ │ │ │ ├── RecordHandler.java │ │ │ │ ├── SerDeVersion.java │ │ │ │ └── UserDefinedFunctionHandler.java │ │ │ ├── metadata │ │ │ │ ├── GetDataSourceCapabilitiesRequest.java │ │ │ │ ├── GetDataSourceCapabilitiesResponse.java │ │ │ │ ├── GetSplitsRequest.java │ │ │ │ ├── GetSplitsResponse.java │ │ │ │ ├── GetTableLayoutRequest.java │ │ │ │ ├── GetTableLayoutResponse.java │ │ │ │ ├── GetTableRequest.java │ │ │ │ ├── GetTableResponse.java │ │ │ │ ├── ListSchemasRequest.java │ │ │ │ ├── ListSchemasResponse.java │ │ │ │ ├── ListTablesRequest.java │ │ │ │ ├── ListTablesResponse.java │ │ │ │ ├── MetadataRequest.java │ │ │ │ ├── MetadataRequestType.java │ │ │ │ ├── MetadataResponse.java │ │ │ │ ├── glue │ │ │ │ │ ├── DefaultGlueType.java │ │ │ │ │ ├── GlueFieldLexer.java │ │ │ │ │ └── GlueTypeParser.java │ │ │ │ └── optimizations │ │ │ │ │ ├── DataSourceOptimizations.java │ │ │ │ │ ├── OptimizationSubType.java │ │ │ │ │ ├── pushdown │ │ │ │ │ ├── ComplexExpressionPushdownSubType.java │ │ │ │ │ ├── FilterPushdownSubType.java │ │ │ │ │ ├── HintsSubtype.java │ │ │ │ │ ├── LimitPushdownSubType.java │ │ │ │ │ ├── PushdownSubTypes.java │ │ │ │ │ ├── SubTypeProperties.java │ │ │ │ │ └── TopNPushdownSubType.java │ │ │ │ │ └── querypassthrough │ │ │ │ │ ├── QueryPassthrough.java │ │ │ │ │ └── QueryPassthroughSignature.java │ │ │ ├── records │ │ │ │ ├── ReadRecordsRequest.java │ │ │ │ ├── ReadRecordsResponse.java │ │ │ │ ├── RecordRequest.java │ │ │ │ ├── RecordRequestType.java │ │ │ │ ├── RecordResponse.java │ │ │ │ └── RemoteReadRecordsResponse.java │ │ │ ├── request │ │ │ │ ├── FederationRequest.java │ │ │ │ ├── FederationResponse.java │ │ │ │ ├── PingRequest.java │ │ │ │ └── PingResponse.java │ │ │ ├── resolver │ │ │ │ └── CaseResolver.java │ │ │ ├── security │ │ │ │ ├── AesGcmBlockCrypto.java │ │ │ │ ├── BlockCrypto.java │ │ │ │ ├── CachableSecretsManager.java │ │ │ │ ├── EncryptionKey.java │ │ │ │ ├── EncryptionKeyFactory.java │ │ │ │ ├── FederatedIdentity.java │ │ │ │ ├── KmsKeyFactory.java │ │ │ │ ├── LocalKeyFactory.java │ │ │ │ └── NoOpBlockCrypto.java │ │ │ ├── serde │ │ │ │ ├── BaseDeserializer.java │ │ │ │ ├── BaseSerializer.java │ │ │ │ ├── BlockDeserializer.java │ │ │ │ ├── BlockSerializer.java │ │ │ │ ├── DelegatingDeserializer.java │ │ │ │ ├── DelegatingSerializer.java │ │ │ │ ├── FederatedIdentitySerDe.java │ │ │ │ ├── ObjectMapperFactory.java │ │ │ │ ├── PingRequestSerDe.java │ │ │ │ ├── PingResponseSerDe.java │ │ │ │ ├── SchemaDeserializer.java │ │ │ │ ├── SchemaSerializer.java │ │ │ │ ├── TypedDeserializer.java │ │ │ │ ├── TypedSerializer.java │ │ │ │ ├── VersionedObjectMapperFactory.java │ │ │ │ ├── VersionedSerDe.java │ │ │ │ ├── v2 │ │ │ │ │ ├── AllOrNoneValueSetSerDe.java │ │ │ │ │ ├── ArrowRecordBatchSerDe.java │ │ │ │ │ ├── ArrowTypeSerDe.java │ │ │ │ │ ├── BlockSerDe.java │ │ │ │ │ ├── ConstraintsSerDe.java │ │ │ │ │ ├── EncryptionKeySerDe.java │ │ │ │ │ ├── EquatableValueSetSerDe.java │ │ │ │ │ ├── FederationRequestSerDe.java │ │ │ │ │ ├── FederationResponseSerDe.java │ │ │ │ │ ├── GetSplitsRequestSerDe.java │ │ │ │ │ ├── GetSplitsResponseSerDe.java │ │ │ │ │ ├── GetTableLayoutRequestSerDe.java │ │ │ │ │ ├── GetTableLayoutResponseSerDe.java │ │ │ │ │ ├── GetTableRequestSerDe.java │ │ │ │ │ ├── GetTableResponseSerDe.java │ │ │ │ │ ├── LambdaFunctionExceptionSerDe.java │ │ │ │ │ ├── ListSchemasRequestSerDe.java │ │ │ │ │ ├── ListSchemasResponseSerDe.java │ │ │ │ │ ├── ListTablesRequestSerDe.java │ │ │ │ │ ├── ListTablesResponseSerDe.java │ │ │ │ │ ├── MarkerSerDe.java │ │ │ │ │ ├── MetadataRequestDeserializer.java │ │ │ │ │ ├── MetadataRequestSerializer.java │ │ │ │ │ ├── ObjectMapperFactoryV2.java │ │ │ │ │ ├── RangeSerDe.java │ │ │ │ │ ├── ReadRecordsRequestSerDe.java │ │ │ │ │ ├── ReadRecordsResponseSerDe.java │ │ │ │ │ ├── RemoteReadRecordsResponseSerDe.java │ │ │ │ │ ├── S3SpillLocationSerDe.java │ │ │ │ │ ├── SchemaSerDe.java │ │ │ │ │ ├── SortedRangeSetSerDe.java │ │ │ │ │ ├── SpillLocationSerDe.java │ │ │ │ │ ├── SplitSerDe.java │ │ │ │ │ ├── TableNameSerDe.java │ │ │ │ │ ├── UserDefinedFunctionRequestSerDe.java │ │ │ │ │ ├── UserDefinedFunctionResponseSerDe.java │ │ │ │ │ └── ValueSetSerDe.java │ │ │ │ ├── v3 │ │ │ │ │ ├── ArrowRecordBatchSerDeV3.java │ │ │ │ │ ├── BlockSerDeV3.java │ │ │ │ │ ├── ObjectMapperFactoryV3.java │ │ │ │ │ └── SchemaSerDeV3.java │ │ │ │ ├── v4 │ │ │ │ │ ├── ArrowRecordBatchSerDeV4.java │ │ │ │ │ ├── BlockSerDeV4.java │ │ │ │ │ ├── ConstantExpressionSerDeV4.java │ │ │ │ │ ├── ConstraintsSerDeV4.java │ │ │ │ │ ├── FederationExpressionSerDeV4.java │ │ │ │ │ ├── FederationRequestSerDeV4.java │ │ │ │ │ ├── FederationResponseSerDeV4.java │ │ │ │ │ ├── FunctionCallExpressionSerDeV4.java │ │ │ │ │ ├── FunctionNameSerDeV4.java │ │ │ │ │ ├── GetDataSourceCapabilitiesRequestSerDeV4.java │ │ │ │ │ ├── GetDataSourceCapabilitiesResponseSerDeV4.java │ │ │ │ │ ├── ObjectMapperFactoryV4.java │ │ │ │ │ ├── OptimizationSubTypeSerDeV4.java │ │ │ │ │ ├── OrderByFieldSerDeV4.java │ │ │ │ │ ├── SchemaSerDeV4.java │ │ │ │ │ └── VariableExpressionSerDeV4.java │ │ │ │ └── v5 │ │ │ │ │ ├── ConstraintsSerDeV5.java │ │ │ │ │ ├── FederationRequestSerDeV5.java │ │ │ │ │ ├── GetTableRequestSerDeV5.java │ │ │ │ │ └── ObjectMapperFactoryV5.java │ │ │ └── udf │ │ │ │ ├── UserDefinedFunctionRequest.java │ │ │ │ ├── UserDefinedFunctionResponse.java │ │ │ │ └── UserDefinedFunctionType.java │ │ │ └── util │ │ │ ├── PaginatedRequestIterator.java │ │ │ └── PaginationHelper.java │ └── resources │ │ └── com │ │ └── amazonaws │ │ └── athena │ │ └── connector │ │ └── lambda │ │ └── data │ │ └── zone-index.properties │ └── test │ ├── java │ └── com │ │ └── amazonaws │ │ └── athena │ │ └── connector │ │ ├── credentials │ │ └── DefaultCredentialsProviderTest.java │ │ ├── lambda │ │ ├── QueryStatusCheckerTest.java │ │ ├── ThrottlingInvokerTest.java │ │ ├── data │ │ │ ├── ArrowSchemaUtilsTest.java │ │ │ ├── BlockTest.java │ │ │ ├── BlockUtilsPropertiesTest.java │ │ │ ├── BlockUtilsTest.java │ │ │ ├── DateTimeFormatterUtilTest.java │ │ │ ├── FieldResolverTest.java │ │ │ ├── S3BlockSpillerTest.java │ │ │ ├── TimeZoneKeyTest.java │ │ │ ├── UnitTestBlockUtils.java │ │ │ └── helpers │ │ │ │ ├── CustomFieldVector.java │ │ │ │ ├── FieldsGenerator.java │ │ │ │ └── ValuesGenerator.java │ │ ├── domain │ │ │ ├── predicate │ │ │ │ ├── AllOrNoneValueSetTest.java │ │ │ │ ├── EquatableValueSetTest.java │ │ │ │ ├── MarkerTest.java │ │ │ │ ├── RangeTest.java │ │ │ │ └── SortedRangeSetTest.java │ │ │ └── spill │ │ │ │ └── SpillLocationVerifierTest.java │ │ ├── handlers │ │ │ ├── CompositeHandlerTest.java │ │ │ ├── GlueMetadataHandlerTest.java │ │ │ └── UserDefinedFunctionHandlerTest.java │ │ ├── metadata │ │ │ └── glue │ │ │ │ ├── GlueFieldLexerTest.java │ │ │ │ └── GlueTypeParserTest.java │ │ ├── security │ │ │ ├── BlockCryptoTest.java │ │ │ ├── CacheableSecretsManagerTest.java │ │ │ └── IdentityUtil.java │ │ ├── serde │ │ │ ├── BlockSerializationTest.java │ │ │ ├── ConstraintSerializationTest.java │ │ │ ├── MarkerSerializationTest.java │ │ │ ├── ObjectMapperUtil.java │ │ │ ├── PingRequestSerDeTest.java │ │ │ ├── PingResponseSerDeTest.java │ │ │ ├── SchemaSerializationTest.java │ │ │ ├── TestPojo.java │ │ │ ├── TypedSerDeTest.java │ │ │ ├── v2 │ │ │ │ ├── ArrowSerDeTest.java │ │ │ │ ├── GetSplitsRequestSerDeTest.java │ │ │ │ ├── GetSplitsResponseSerDeTest.java │ │ │ │ ├── GetTableLayoutRequestSerDeTest.java │ │ │ │ ├── GetTableLayoutResponseSerDeTest.java │ │ │ │ ├── GetTableRequestSerDeTest.java │ │ │ │ ├── GetTableResponseSerDeTest.java │ │ │ │ ├── LambdaFunctionExceptionSerDeTest.java │ │ │ │ ├── ListSchemasRequestSerDeTest.java │ │ │ │ ├── ListSchemasResponseSerDeTest.java │ │ │ │ ├── ListTablesRequestSerDeTest.java │ │ │ │ ├── ListTablesResponseSerDeTest.java │ │ │ │ ├── ObjectMapperFactoryV2Test.java │ │ │ │ ├── ReadRecordsRequestSerDeTest.java │ │ │ │ ├── ReadRecordsResponseSerDeTest.java │ │ │ │ ├── RemoteReadRecordsResponseSerDeTest.java │ │ │ │ ├── UserDefinedFunctionRequestSerDeTest.java │ │ │ │ └── UserDefinedFunctionResponseSerDeTest.java │ │ │ ├── v3 │ │ │ │ └── ObjectMapperFactoryV3Test.java │ │ │ ├── v4 │ │ │ │ ├── GetDataSourceCapabilitiesResponseSerDeTest.java │ │ │ │ ├── ObjectMapperFactoryV4Test.java │ │ │ │ └── ReadRecordsRequestSerDeV4Test.java │ │ │ └── v5 │ │ │ │ ├── GetTableRequestSerDeV5Test.java │ │ │ │ ├── ObjectMapperFactoryV5Test.java │ │ │ │ └── ReadRecordsRequestSerDeV5Test.java │ │ └── utils │ │ │ └── TestUtils.java │ │ └── util │ │ ├── PaginatedRequestIteratorTest.java │ │ └── PaginationHelperTest.java │ └── resources │ ├── log4j2-test.xml │ └── serde │ ├── PingRequest.json │ ├── PingRequestForwardsCompatible.json │ ├── PingResponse.json │ ├── PingResponseForwardsCompatible.json │ ├── v2 │ ├── GetSplitsRequest.json │ ├── GetSplitsResponse.json │ ├── GetTableLayoutRequest.json │ ├── GetTableLayoutResponse.json │ ├── GetTableRequest.json │ ├── GetTableResponse.json │ ├── LambdaFunctionException.json │ ├── ListSchemasRequest.json │ ├── ListSchemasResponse.json │ ├── ListTablesRequest.json │ ├── ListTablesResponse.json │ ├── ReadRecordsRequest.json │ ├── ReadRecordsResponse.json │ ├── RemoteReadRecordsResponse.json │ ├── UserDefinedFunctionRequest.json │ └── UserDefinedFunctionResponse.json │ ├── v4 │ ├── GetDataSourceCapabilitiesResponse.json │ └── ReadRecordsRequest.json │ └── v5 │ ├── GetTableRequest.json │ └── ReadRecordsRequest.json ├── athena-gcs ├── Dockerfile ├── LICENSE.txt ├── README.md ├── assembly.xml ├── athena-gcs-connection.yaml ├── athena-gcs.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── gcs │ │ │ ├── GcsCompositeHandler.java │ │ │ ├── GcsConstants.java │ │ │ ├── GcsEnvironmentProperties.java │ │ │ ├── GcsMetadataHandler.java │ │ │ ├── GcsRecordHandler.java │ │ │ ├── GcsThrottlingExceptionFilter.java │ │ │ ├── GcsUtil.java │ │ │ ├── common │ │ │ └── PartitionUtil.java │ │ │ ├── filter │ │ │ └── FilterExpressionBuilder.java │ │ │ └── storage │ │ │ └── StorageMetadata.java │ └── resources │ │ └── log4j2.xml │ └── test │ ├── java │ └── com │ │ └── amazonaws │ │ └── athena │ │ └── connectors │ │ └── gcs │ │ ├── GcsCompositeHandlerTest.java │ │ ├── GcsExceptionFilterTest.java │ │ ├── GcsMetadataHandlerTest.java │ │ ├── GcsRecordHandlerTest.java │ │ ├── GcsTestUtils.java │ │ ├── GcsUtilsTest.java │ │ ├── GenericGcsTest.java │ │ ├── common │ │ └── PartitionUtilTest.java │ │ ├── filter │ │ └── FilterExpressionBuilderTest.java │ │ ├── integ │ │ └── GcsIntegTest.java │ │ └── storage │ │ └── StorageMetadataTest.java │ └── resources │ └── person-data.parquet ├── athena-google-bigquery ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-google-bigquery-connection.yaml ├── athena-google-bigquery.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── google │ │ │ └── bigquery │ │ │ ├── BigQueryCompositeHandler.java │ │ │ ├── BigQueryConstants.java │ │ │ ├── BigQueryEnvironmentProperties.java │ │ │ ├── BigQueryExceptionFilter.java │ │ │ ├── BigQueryExceptions.java │ │ │ ├── BigQueryFederationExpressionParser.java │ │ │ ├── BigQueryMetadataHandler.java │ │ │ ├── BigQueryRecordHandler.java │ │ │ ├── BigQueryRowReader.java │ │ │ ├── BigQuerySqlUtils.java │ │ │ ├── BigQueryStorageApiUtils.java │ │ │ ├── BigQueryUtils.java │ │ │ └── qpt │ │ │ └── BigQueryQueryPassthrough.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── google │ └── bigquery │ ├── BigQueryCompositeHandlerTest.java │ ├── BigQueryFederationExpressionParserTest.java │ ├── BigQueryMetadataHandlerTest.java │ ├── BigQueryPage.java │ ├── BigQueryRecordHandlerTest.java │ ├── BigQuerySqlUtilsTest.java │ ├── BigQueryStorageApiUtilsTest.java │ ├── BigQueryTestUtils.java │ ├── BigQueryUtilsTest.java │ └── integ │ └── BigQueryIntegTest.java ├── athena-hbase ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-hbase-connection.yaml ├── athena-hbase-package.yaml ├── athena-hbase.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── hbase │ │ │ ├── HbaseCompositeHandler.java │ │ │ ├── HbaseConnectionFactory.java │ │ │ ├── HbaseEnvironmentProperties.java │ │ │ ├── HbaseFieldResolver.java │ │ │ ├── HbaseKerberosUtils.java │ │ │ ├── HbaseMetadataHandler.java │ │ │ ├── HbaseRecordHandler.java │ │ │ ├── HbaseSchemaUtils.java │ │ │ ├── HbaseTableNameUtils.java │ │ │ ├── connection │ │ │ ├── HBaseConnection.java │ │ │ ├── HbaseConnectionFactory.java │ │ │ ├── ResultProcessor.java │ │ │ └── UnrecoverableException.java │ │ │ ├── integ │ │ │ ├── HbaseIntegTestHandler.java │ │ │ ├── HbaseRowBuilder.java │ │ │ └── HbaseTableUtils.java │ │ │ └── qpt │ │ │ └── HbaseQueryPassthrough.java │ └── resources │ │ ├── core-site.xml │ │ ├── hbase-site.xml │ │ ├── log4j2.xml │ │ └── sample_data.hbase │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── hbase │ ├── HbaseConnectionFactoryTest.java │ ├── HbaseFieldResolverTest.java │ ├── HbaseMetadataHandlerTest.java │ ├── HbaseRecordHandlerTest.java │ ├── HbaseSchemaUtilsTest.java │ ├── HbaseTableNameUtilsTest.java │ ├── TestBase.java │ ├── TestUtils.java │ ├── connection │ ├── HBaseConnectionTest.java │ └── HbaseConnectionFactoryTest.java │ └── integ │ └── HbaseIntegTest.java ├── athena-hortonworks-hive ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-hortonworks-hive-connection.yaml ├── athena-hortonworks-hive-package.yaml ├── athena-hortonworks-hive.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── hortonworks │ │ │ ├── HiveCompositeHandler.java │ │ │ ├── HiveConstants.java │ │ │ ├── HiveFederationExpressionParser.java │ │ │ ├── HiveJdbcConnectionFactory.java │ │ │ ├── HiveMetadataHandler.java │ │ │ ├── HiveMuxCompositeHandler.java │ │ │ ├── HiveMuxMetadataHandler.java │ │ │ ├── HiveMuxRecordHandler.java │ │ │ ├── HiveQueryStringBuilder.java │ │ │ ├── HiveRecordHandler.java │ │ │ └── HortonworksEnvironmentProperties.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── hortonworks │ ├── HiveJdbcConnectionFactoryTest.java │ ├── HiveMetadataHandlerTest.java │ ├── HiveMuxMetadataHandlerTest.java │ ├── HiveMuxRecordHandlerTest.java │ ├── HiveQueryStringBuilderTest.java │ ├── HiveRecordHandlerTest.java │ └── integ │ └── HiveIntegTest.java ├── athena-jdbc ├── LICENSE.txt ├── README.md ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── jdbc │ │ │ ├── JdbcEnvironmentProperties.java │ │ │ ├── MultiplexingJdbcCompositeHandler.java │ │ │ ├── MultiplexingJdbcMetadataHandler.java │ │ │ ├── MultiplexingJdbcRecordHandler.java │ │ │ ├── connection │ │ │ ├── DatabaseConnectionConfig.java │ │ │ ├── DatabaseConnectionConfigBuilder.java │ │ │ ├── DatabaseConnectionInfo.java │ │ │ ├── GenericJdbcConnectionFactory.java │ │ │ └── JdbcConnectionFactory.java │ │ │ ├── manager │ │ │ ├── DefaultJdbcFederationExpressionParser.java │ │ │ ├── FederationExpressionParser.java │ │ │ ├── JDBCUtil.java │ │ │ ├── JdbcArrowTypeConverter.java │ │ │ ├── JdbcFederationExpressionParser.java │ │ │ ├── JdbcMetadataHandler.java │ │ │ ├── JdbcMetadataHandlerFactory.java │ │ │ ├── JdbcRecordHandler.java │ │ │ ├── JdbcRecordHandlerFactory.java │ │ │ ├── JdbcSplitQueryBuilder.java │ │ │ ├── PreparedStatementBuilder.java │ │ │ └── TypeAndValue.java │ │ │ ├── qpt │ │ │ └── JdbcQueryPassthrough.java │ │ │ ├── resolver │ │ │ ├── DefaultJDBCCaseResolver.java │ │ │ └── JDBCCaseResolver.java │ │ │ └── splits │ │ │ ├── IntegerSplitter.java │ │ │ ├── SplitInfo.java │ │ │ ├── SplitRange.java │ │ │ ├── Splitter.java │ │ │ └── SplitterFactory.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── jdbc │ ├── MultiplexingJdbcMetadataHandlerTest.java │ ├── MultiplexingJdbcRecordHandlerTest.java │ ├── TestBase.java │ ├── connection │ ├── DatabaseConnectionConfigBuilderTest.java │ └── GenericJdbcConnectionFactoryTest.java │ ├── integ │ └── JdbcTableUtils.java │ ├── manager │ ├── JDBCUtilTest.java │ ├── JdbcArrowTypeConverterTest.java │ ├── JdbcMetadataHandlerTest.java │ └── JdbcRecordHandlerTest.java │ ├── resolver │ └── DefaultJDBCCaseResolverTest.java │ └── splits │ ├── IntegerSplitterTest.java │ └── SplitterFactoryTest.java ├── athena-kafka ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-kafka-package.yaml ├── athena-kafka.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── kafka │ │ │ ├── GlueRegistryReader.java │ │ │ ├── KafkaCompositeHandler.java │ │ │ ├── KafkaConstants.java │ │ │ ├── KafkaMetadataHandler.java │ │ │ ├── KafkaRecordHandler.java │ │ │ ├── KafkaUtils.java │ │ │ ├── dto │ │ │ ├── AvroTopicSchema.java │ │ │ ├── KafkaField.java │ │ │ ├── Message.java │ │ │ ├── SplitParameters.java │ │ │ ├── TopicPartitionPiece.java │ │ │ ├── TopicResultSet.java │ │ │ └── TopicSchema.java │ │ │ └── serde │ │ │ ├── KafkaCsvDeserializer.java │ │ │ ├── KafkaDeserializer.java │ │ │ └── KafkaJsonDeserializer.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── kafka │ ├── KafkaAbstractDeserializerTest.java │ ├── KafkaCompositeHandlerTest.java │ ├── KafkaCsvDeserializerTest.java │ ├── KafkaJsonDeserializerTest.java │ ├── KafkaMetadataHandlerTest.java │ ├── KafkaRecordHandlerTest.java │ ├── KafkaUtilsTest.java │ └── integ │ └── KafkaIntegTest.java ├── athena-msk ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-msk-connection.yaml ├── athena-msk-package.yaml ├── athena-msk.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── msk │ │ │ ├── AmazonMskCompositeHandler.java │ │ │ ├── AmazonMskConstants.java │ │ │ ├── AmazonMskEnvironmentProperties.java │ │ │ ├── AmazonMskMetadataHandler.java │ │ │ ├── AmazonMskRecordHandler.java │ │ │ ├── AmazonMskUtils.java │ │ │ ├── GlueRegistryReader.java │ │ │ ├── consumer │ │ │ ├── BaseMskConsumer.java │ │ │ ├── MskAvroConsumer.java │ │ │ ├── MskConsumer.java │ │ │ ├── MskDefaultConsumer.java │ │ │ ├── MskProtobufConsumer.java │ │ │ └── MskRecordProcessor.java │ │ │ ├── dto │ │ │ ├── AvroTopicSchema.java │ │ │ ├── MSKField.java │ │ │ ├── Message.java │ │ │ ├── SplitParameters.java │ │ │ ├── TopicPartitionPiece.java │ │ │ ├── TopicResultSet.java │ │ │ └── TopicSchema.java │ │ │ └── serde │ │ │ ├── MskCsvDeserializer.java │ │ │ ├── MskDeserializer.java │ │ │ └── MskJsonDeserializer.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── msk │ ├── AmazonMskCompositeHandlerTest.java │ ├── AmazonMskMetadataHandlerTest.java │ ├── AmazonMskRecordHandlerTest.java │ ├── AmazonMskUtilsTest.java │ ├── MskAbstractDeserializerTest.java │ ├── MskCsvDeserializerTest.java │ ├── MskJsonDeserializerTest.java │ └── integ │ └── AmazonMskIntegTest.java ├── athena-mysql ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-mysql-connection.yaml ├── athena-mysql-package.yaml ├── athena-mysql.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── mysql │ │ │ ├── MySqlCompositeHandler.java │ │ │ ├── MySqlConstants.java │ │ │ ├── MySqlEnvironmentProperties.java │ │ │ ├── MySqlFederationExpressionParser.java │ │ │ ├── MySqlMetadataHandler.java │ │ │ ├── MySqlMuxCompositeHandler.java │ │ │ ├── MySqlMuxMetadataHandler.java │ │ │ ├── MySqlMuxRecordHandler.java │ │ │ ├── MySqlQueryStringBuilder.java │ │ │ ├── MySqlRecordHandler.java │ │ │ └── resolver │ │ │ └── MySqlJDBCCaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── mysql │ ├── MySqlFederationExpressionParserTest.java │ ├── MySqlMetadataHandlerTest.java │ ├── MySqlMuxJdbcMetadataHandlerTest.java │ ├── MySqlMuxJdbcRecordHandlerTest.java │ ├── MySqlQueryStringBuilderTest.java │ ├── MySqlRecordHandlerTest.java │ └── integ │ └── MySqlIntegTest.java ├── athena-neptune ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-neptune-connection.yaml ├── athena-neptune-package.yaml ├── athena-neptune.yaml ├── docs │ ├── README.md │ ├── aws-glue-sample-scripts │ │ ├── PropertyGraph.md │ │ ├── RDF.md │ │ ├── README.md │ │ ├── assets │ │ │ ├── airportrdf_props.png │ │ │ ├── airportrdf_schema.png │ │ │ ├── connector-propertygraph.png │ │ │ ├── customquery-exampletable.png │ │ │ ├── customtable.png │ │ │ ├── routerdf.png │ │ │ ├── routerdf_nopfx.png │ │ │ ├── table.png │ │ │ ├── table_custom.png │ │ │ └── table_route.png │ │ ├── automation │ │ │ ├── config.json │ │ │ ├── package-lock.json │ │ │ ├── package.json │ │ │ └── script.js │ │ ├── cfn │ │ │ └── cfn_nac_glue.yaml │ │ └── manual │ │ │ ├── sample-cli-rdf.sh │ │ │ └── sample-cli-script.sh │ ├── neptune-cluster-setup │ │ ├── README.md │ │ └── assets │ │ │ ├── Notebook-1.png │ │ │ ├── Notebook-2.png │ │ │ ├── Notebook-3.png │ │ │ ├── Notebook-4.png │ │ │ └── Notebook-5.png │ └── neptune-connector-setup │ │ ├── README.md │ │ └── assets │ │ ├── connector-clusterId.png │ │ ├── connector-clusterendpoint.png │ │ ├── connector-console.png │ │ ├── connector-parameters1.png │ │ ├── connector-parameters2.png │ │ ├── connector-securitygroup1.png │ │ ├── connector-securitygroup2.png │ │ ├── connector-securitygroup3.png │ │ ├── connector-securitygroup4.png │ │ └── connector-subnet.png ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── neptune │ │ │ ├── Constants.java │ │ │ ├── Enums.java │ │ │ ├── NeptuneCompositeHandler.java │ │ │ ├── NeptuneConnection.java │ │ │ ├── NeptuneEnvironmentProperties.java │ │ │ ├── NeptuneMetadataHandler.java │ │ │ ├── NeptuneRecordHandler.java │ │ │ ├── propertygraph │ │ │ ├── GremlinQueryPreProcessor.java │ │ │ ├── NeptuneGremlinConnection.java │ │ │ ├── PropertyGraphHandler.java │ │ │ └── rowwriters │ │ │ │ ├── CustomSchemaRowWriter.java │ │ │ │ ├── EdgeRowWriter.java │ │ │ │ └── VertexRowWriter.java │ │ │ ├── qpt │ │ │ └── NeptuneQueryPassthrough.java │ │ │ └── rdf │ │ │ ├── NeptuneSparqlConnection.java │ │ │ ├── NeptuneSparqlRepository.java │ │ │ ├── RDFHandler.java │ │ │ └── SparqlRowWriter.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── neptune │ ├── NeptuneMetadataHandlerTest.java │ ├── NeptuneRecordHandlerTest.java │ └── TestBase.java ├── athena-oracle ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-oracle-connection.yaml ├── athena-oracle-package.yaml ├── athena-oracle.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── oracle │ │ │ ├── OracleCompositeHandler.java │ │ │ ├── OracleConstants.java │ │ │ ├── OracleEnvironmentProperties.java │ │ │ ├── OracleFederationExpressionParser.java │ │ │ ├── OracleJdbcConnectionFactory.java │ │ │ ├── OracleMetadataHandler.java │ │ │ ├── OracleMuxCompositeHandler.java │ │ │ ├── OracleMuxMetadataHandler.java │ │ │ ├── OracleMuxRecordHandler.java │ │ │ ├── OracleQueryStringBuilder.java │ │ │ ├── OracleRecordHandler.java │ │ │ └── resolver │ │ │ └── OracleJDBCCaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── oracle │ ├── OracleJdbcConnectionFactoryTest.java │ ├── OracleMetadataHandlerTest.java │ ├── OracleMuxJdbcMetadataHandlerTest.java │ ├── OracleMuxJdbcRecordHandlerTest.java │ ├── OracleRecordHandlerTest.java │ └── integ │ └── OracleIntegTest.java ├── athena-postgresql ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-postgresql-connection.yaml ├── athena-postgresql-package.yaml ├── athena-postgresql.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── postgresql │ │ │ ├── PostGreSqlCompositeHandler.java │ │ │ ├── PostGreSqlConstants.java │ │ │ ├── PostGreSqlEnvironmentProperties.java │ │ │ ├── PostGreSqlMetadataHandler.java │ │ │ ├── PostGreSqlMuxCompositeHandler.java │ │ │ ├── PostGreSqlMuxMetadataHandler.java │ │ │ ├── PostGreSqlMuxRecordHandler.java │ │ │ ├── PostGreSqlQueryStringBuilder.java │ │ │ ├── PostGreSqlRecordHandler.java │ │ │ ├── PostgreSqlFederationExpressionParser.java │ │ │ └── resolver │ │ │ └── PostGreSqlJDBCCaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── postgresql │ ├── PostGreSqlMetadataHandlerTest.java │ ├── PostGreSqlMuxJdbcMetadataHandlerTest.java │ ├── PostGreSqlMuxJdbcRecordHandlerTest.java │ ├── PostGreSqlRecordHandlerTest.java │ └── integ │ └── PostGreSqlIntegTest.java ├── athena-redis ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-redis-connection.yaml ├── athena-redis-package.yaml ├── athena-redis.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── redis │ │ │ ├── KeyType.java │ │ │ ├── RedisCompositeHandler.java │ │ │ ├── RedisMetadataHandler.java │ │ │ ├── RedisRecordHandler.java │ │ │ ├── ValueConverter.java │ │ │ ├── ValueType.java │ │ │ ├── integ │ │ │ └── RedisIntegTestHandler.java │ │ │ ├── lettuce │ │ │ ├── RedisCommandsWrapper.java │ │ │ ├── RedisConnectionFactory.java │ │ │ └── RedisConnectionWrapper.java │ │ │ └── qpt │ │ │ └── RedisQueryPassthrough.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── redis │ ├── RedisMetadataHandlerTest.java │ ├── RedisRecordHandlerTest.java │ ├── TestBase.java │ ├── integ │ └── RedisIntegTest.java │ └── util │ ├── MockKeyScanCursor.java │ └── MockScoredValueScanCursor.java ├── athena-redshift ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-redshift-connection.yaml ├── athena-redshift-package.yaml ├── athena-redshift.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── redshift │ │ │ ├── RedshiftCompositeHandler.java │ │ │ ├── RedshiftConstants.java │ │ │ ├── RedshiftEnvironmentProperties.java │ │ │ ├── RedshiftMetadataHandler.java │ │ │ ├── RedshiftMuxCompositeHandler.java │ │ │ ├── RedshiftMuxMetadataHandler.java │ │ │ ├── RedshiftMuxRecordHandler.java │ │ │ ├── RedshiftRecordHandler.java │ │ │ └── resolver │ │ │ └── RedshiftJDBCCaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── redshift │ ├── RedshiftMetadataHandlerTest.java │ ├── RedshiftMuxJdbcMetadataHandlerTest.java │ ├── RedshiftMuxJdbcRecordHandlerTest.java │ ├── RedshiftRecordHandlerTest.java │ └── integ │ └── RedshiftIntegTest.java ├── athena-saphana ├── Dockerfile ├── LICENSE.txt ├── README.md ├── assembly.xml ├── athena-saphana-connection.yaml ├── athena-saphana.yaml ├── checkstyle-suppressions.xml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── saphana │ │ │ ├── SaphanaCompositeHandler.java │ │ │ ├── SaphanaConstants.java │ │ │ ├── SaphanaEnvironmentProperties.java │ │ │ ├── SaphanaFederationExpressionParser.java │ │ │ ├── SaphanaMetadataHandler.java │ │ │ ├── SaphanaMuxCompositeHandler.java │ │ │ ├── SaphanaMuxMetadataHandler.java │ │ │ ├── SaphanaMuxRecordHandler.java │ │ │ ├── SaphanaQueryStringBuilder.java │ │ │ ├── SaphanaRecordHandler.java │ │ │ └── resolver │ │ │ └── SaphanaJDBCCaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── saphana │ ├── SaphanaMetadataHandlerTest.java │ ├── SaphanaMuxJdbcMetadataHandlerTest.java │ ├── SaphanaMuxJdbcRecordHandlerTest.java │ ├── SaphanaQueryStringBuilderTest.java │ ├── SaphanaRecordHandlerTest.java │ ├── integ │ └── SaphanaIntegTest.java │ └── resolver │ └── SaphanaJDBCCaseResolverTest.java ├── athena-snowflake ├── Dockerfile ├── LICENSE.txt ├── README.md ├── assembly.xml ├── athena-snowflake-connection.yaml ├── athena-snowflake.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── snowflake │ │ │ ├── SnowflakeCompositeHandler.java │ │ │ ├── SnowflakeConstants.java │ │ │ ├── SnowflakeEnvironmentProperties.java │ │ │ ├── SnowflakeFederationExpressionParser.java │ │ │ ├── SnowflakeMetadataHandler.java │ │ │ ├── SnowflakeMuxCompositeHandler.java │ │ │ ├── SnowflakeMuxMetadataHandler.java │ │ │ ├── SnowflakeMuxRecordHandler.java │ │ │ ├── SnowflakeQueryStringBuilder.java │ │ │ ├── SnowflakeRecordHandler.java │ │ │ └── resolver │ │ │ └── SnowflakeJDBCCaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── snowflake │ ├── SnowflakeMetadataHandlerTest.java │ ├── SnowflakeMuxJdbcMetadataHandlerTest.java │ ├── SnowflakeMuxJdbcRecordHandlerTest.java │ ├── SnowflakeQueryStringBuilderTest.java │ ├── SnowflakeRecordHandlerTest.java │ ├── integ │ └── SnowflakeIntegTest.java │ └── resolver │ └── SnowflakeJDBCCaseResolverTest.java ├── athena-sqlserver ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-sqlserver-connection.yaml ├── athena-sqlserver-package.yaml ├── athena-sqlserver.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── sqlserver │ │ │ ├── SqlServerCompositeHandler.java │ │ │ ├── SqlServerConstants.java │ │ │ ├── SqlServerDataType.java │ │ │ ├── SqlServerEnvironmentProperties.java │ │ │ ├── SqlServerFederationExpressionParser.java │ │ │ ├── SqlServerJdbcConnectionFactory.java │ │ │ ├── SqlServerMetadataHandler.java │ │ │ ├── SqlServerMuxCompositeHandler.java │ │ │ ├── SqlServerMuxMetadataHandler.java │ │ │ ├── SqlServerMuxRecordHandler.java │ │ │ ├── SqlServerQueryStringBuilder.java │ │ │ ├── SqlServerRecordHandler.java │ │ │ └── resolver │ │ │ └── SQLServerJDBCCaseResolver.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── sqlserver │ ├── SqlServerMetadataHandlerTest.java │ ├── SqlServerMuxMetadataHandlerTest.java │ ├── SqlServerMuxRecordHandlerTest.java │ ├── SqlServerQueryStringBuilderTest.java │ ├── SqlServerRecordHandlerTest.java │ └── integ │ └── SqlServerIntegTest.java ├── athena-synapse ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-synapse-connection.yaml ├── athena-synapse-package.yaml ├── athena-synapse.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── synapse │ │ │ ├── SynapseCompositeHandler.java │ │ │ ├── SynapseConstants.java │ │ │ ├── SynapseDataType.java │ │ │ ├── SynapseEnvironmentProperties.java │ │ │ ├── SynapseFederationExpressionParser.java │ │ │ ├── SynapseJdbcConnectionFactory.java │ │ │ ├── SynapseMetadataHandler.java │ │ │ ├── SynapseMuxCompositeHandler.java │ │ │ ├── SynapseMuxMetadataHandler.java │ │ │ ├── SynapseMuxRecordHandler.java │ │ │ ├── SynapseQueryStringBuilder.java │ │ │ ├── SynapseRecordHandler.java │ │ │ ├── SynapseUtil.java │ │ │ └── resolver │ │ │ └── SynapseJDBCCaseResolver.java │ └── resources │ │ ├── log4j2.xml │ │ └── templates │ │ ├── getPartitions.st │ │ └── rowCount.st │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── synapse │ ├── SynapseMetadataHandlerTest.java │ ├── SynapseMuxMetadataHandlerTest.java │ ├── SynapseMuxRecordHandlerTest.java │ ├── SynapseQueryStringBuilderTest.java │ ├── SynapseRecordHandlerTest.java │ └── integ │ └── AzureSynapseIntegTest.java ├── athena-teradata ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-teradata-connection.yaml ├── athena-teradata-package.yaml ├── athena-teradata.yaml ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── teradata │ │ │ ├── TeradataCompositeHandler.java │ │ │ ├── TeradataConstants.java │ │ │ ├── TeradataEnvironmentProperties.java │ │ │ ├── TeradataFederationExpressionParser.java │ │ │ ├── TeradataMetadataHandler.java │ │ │ ├── TeradataMuxCompositeHandler.java │ │ │ ├── TeradataMuxMetadataHandler.java │ │ │ ├── TeradataMuxRecordHandler.java │ │ │ ├── TeradataQueryStringBuilder.java │ │ │ └── TeradataRecordHandler.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── teradata │ ├── TeradataEnvironmentPropertiesTest.java │ ├── TeradataMetadataHandlerTest.java │ ├── TeradataMuxJdbcMetadataHandlerTest.java │ ├── TeradataMuxJdbcRecordHandlerTest.java │ ├── TeradataRecordHandlerTest.java │ └── integ │ └── TeradataIntegTest.java ├── athena-timestream ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-timestream-connection.yaml ├── athena-timestream-package.yaml ├── athena-timestream.yaml ├── docs │ └── img │ │ └── timestream_glue_example.png ├── etc │ └── test-config.json ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── timestream │ │ │ ├── TimestreamClientBuilder.java │ │ │ ├── TimestreamCompositeHandler.java │ │ │ ├── TimestreamMetadataHandler.java │ │ │ ├── TimestreamRecordHandler.java │ │ │ ├── TimestreamSchemaUtils.java │ │ │ ├── TimestreamType.java │ │ │ ├── qpt │ │ │ └── TimestreamQueryPassthrough.java │ │ │ └── query │ │ │ ├── DescribeTableQueryBuilder.java │ │ │ ├── PredicateBuilder.java │ │ │ ├── QueryFactory.java │ │ │ └── SelectQueryBuilder.java │ └── resources │ │ ├── Timestream.stg │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── timestream │ ├── TestUtils.java │ ├── TimestreamClientBuilderTest.java │ ├── TimestreamMetadataHandlerTest.java │ ├── TimestreamRecordHandlerTest.java │ ├── integ │ ├── TimestreamIntegTest.java │ └── TimestreamWriteRecordRequestBuilder.java │ └── query │ ├── DescribeTableQueryBuilderTest.java │ └── SelectQueryBuilderTest.java ├── athena-tpcds ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-tpcds-connection.yaml ├── athena-tpcds-package.yaml ├── athena-tpcds.yaml ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── tpcds │ │ │ ├── TPCDSCompositeHandler.java │ │ │ ├── TPCDSMetadataHandler.java │ │ │ ├── TPCDSRecordHandler.java │ │ │ ├── TPCDSUtils.java │ │ │ ├── mock │ │ │ └── pagination │ │ │ │ └── TPCDSMockMetadataHandler.java │ │ │ └── qpt │ │ │ └── TPCDSQueryPassthrough.java │ └── resources │ │ ├── log4j2.xml │ │ └── queries │ │ ├── q1.sql │ │ ├── q10.sql │ │ ├── q11.sql │ │ ├── q12.sql │ │ ├── q13.sql │ │ ├── q14a.sql │ │ ├── q14b.sql │ │ ├── q15.sql │ │ ├── q16.sql │ │ ├── q17.sql │ │ ├── q18.sql │ │ ├── q19.sql │ │ ├── q2.sql │ │ ├── q20.sql │ │ ├── q21.sql │ │ ├── q22.sql │ │ ├── q23a.sql │ │ ├── q23b.sql │ │ ├── q24a.sql │ │ ├── q24b.sql │ │ ├── q25.sql │ │ ├── q26.sql │ │ ├── q27.sql │ │ ├── q28.sql │ │ ├── q29.sql │ │ ├── q3.sql │ │ ├── q30.sql │ │ ├── q31.sql │ │ ├── q32.sql │ │ ├── q33.sql │ │ ├── q34.sql │ │ ├── q35.sql │ │ ├── q37.sql │ │ ├── q38.sql │ │ ├── q39a.sql │ │ ├── q39b.sql │ │ ├── q4.sql │ │ ├── q40.sql │ │ ├── q41.sql │ │ ├── q42.sql │ │ ├── q43.sql │ │ ├── q44.sql │ │ ├── q45.sql │ │ ├── q46.sql │ │ ├── q47.sql │ │ ├── q48.sql │ │ ├── q49.sql │ │ ├── q5.sql │ │ ├── q50.sql │ │ ├── q51.sql │ │ ├── q52.sql │ │ ├── q53.sql │ │ ├── q54.sql │ │ ├── q55.sql │ │ ├── q56.sql │ │ ├── q57.sql │ │ ├── q59.sql │ │ ├── q6.sql │ │ ├── q60.sql │ │ ├── q61.sql │ │ ├── q62.sql │ │ ├── q63.sql │ │ ├── q64.sql │ │ ├── q65.sql │ │ ├── q66.sql │ │ ├── q67.sql │ │ ├── q68.sql │ │ ├── q69.sql │ │ ├── q7.sql │ │ ├── q71.sql │ │ ├── q73.sql │ │ ├── q74.sql │ │ ├── q75.sql │ │ ├── q76.sql │ │ ├── q77.sql │ │ ├── q78.sql │ │ ├── q79.sql │ │ ├── q8.sql │ │ ├── q80.sql │ │ ├── q81.sql │ │ ├── q82.sql │ │ ├── q83.sql │ │ ├── q84.sql │ │ ├── q85.sql │ │ ├── q87.sql │ │ ├── q88.sql │ │ ├── q89.sql │ │ ├── q9.sql │ │ ├── q90.sql │ │ ├── q91.sql │ │ ├── q92.sql │ │ ├── q93.sql │ │ ├── q94.sql │ │ ├── q95.sql │ │ ├── q96.sql │ │ ├── q97.sql │ │ ├── q98.sql │ │ └── q99.sql │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── tpcds │ ├── TPCDSMetadataHandlerTest.java │ ├── TPCDSRecordHandlerTest.java │ └── mock │ └── pagination │ └── TPCDSMockMetadataHandlerTest.java ├── athena-udfs ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-udfs-package.yaml ├── athena-udfs.yaml ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── udfs │ │ │ └── AthenaUDFHandler.java │ └── resources │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── udfs │ └── AthenaUDFHandlerTest.java ├── athena-vertica ├── Dockerfile ├── LICENSE.txt ├── README.md ├── athena-vertica-connection.yaml ├── athena-vertica.yaml ├── av.jpg ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── amazonaws │ │ │ └── athena │ │ │ └── connectors │ │ │ └── vertica │ │ │ ├── VerticaCompositeHandler.java │ │ │ ├── VerticaConstants.java │ │ │ ├── VerticaEnvironmentProperties.java │ │ │ ├── VerticaMetadataHandler.java │ │ │ ├── VerticaRecordHandler.java │ │ │ ├── VerticaSchemaUtils.java │ │ │ └── query │ │ │ ├── PredicateBuilder.java │ │ │ ├── QueryFactory.java │ │ │ └── VerticaExportQueryBuilder.java │ └── resources │ │ ├── Vertica.stg │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── amazonaws │ └── athena │ └── connectors │ └── vertica │ ├── TestBase.java │ ├── VerticaMetadataHandlerTest.java │ ├── VerticaRecordHandlerTest.java │ └── VerticaSchemaUtilsTest.java ├── checkstyle.xml ├── codecov.yml ├── docs ├── img │ ├── athena_federation_demo.png │ ├── athena_federation_flow.png │ ├── athena_federation_summary.png │ └── hbase_glue_example.png └── resources │ └── Athena-ML.ipynb ├── pom.xml ├── tools ├── bump_versions │ ├── bump_connectors_version.py │ ├── bump_sdk_version.py │ └── common.py ├── config_json_validator.py ├── prepare_dev_env.sh ├── publish.sh └── validate_connector.sh └── validation_testing ├── Dockerfile ├── README.md ├── build.sh ├── cdk_federation_infra_provisioning ├── ATHENA_INFRA_SPINUP_ROOT └── app │ ├── README.md │ ├── cdk.json │ ├── glue_scripts │ ├── dynamodb.py │ ├── mysql.py │ ├── mysql_create_case_insensitive_data.py │ ├── opensearch.py │ ├── postgresql.py │ ├── postgresql_create_case_insensitive_data.py │ ├── redshift.py │ └── redshift_create_case_insensitive_data.py │ ├── lib │ ├── app.ts │ └── stacks │ │ ├── dynamo-stack.ts │ │ ├── opensearch-stack.ts │ │ ├── rds-generic-stack.ts │ │ ├── redshift-stack.ts │ │ └── stack-props.ts │ ├── package.json │ ├── resources │ └── tpcds_specs.json │ └── tsconfig.json ├── cleanup.sh ├── deploy_infra.sh ├── main.py ├── run_cleanup_infra.sh ├── run_glue.sh ├── run_release_tests.sh ├── run_tests.sh └── scripts ├── exec_release_test_queries.py └── glue_job_synchronous_execution.py /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG] with connector " 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots / Exceptions / Errors** 24 | If applicable, add screenshots, exception stack traces, or error messages to help explain your problem. Stack traces for exceptions thrown by your Connector can be found in CloudWatch Logs under the 'aws/lambda/' log group. 25 | 26 | **Connector Details (please complete the following information):** 27 | - Version: [e.g. 2020.04.01 - if you are unsure, look at the tags on the Lambda function. One of the tag should contain the version if you deployed via Serverless Application Repo.] 28 | - Name [e.g. redis, hbase, jdbc] 29 | - Athena Query IDs [if applicable] 30 | 31 | **Additional context** 32 | Add any other context about the problem here. 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[FEATURE] Feature request" 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? If yes, please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question---how-tos.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question / How-Tos 3 | about: Ask a question 4 | title: "[QUESTION] General question" 5 | labels: question 6 | assignees: '' 7 | 8 | --- 9 | 10 | I have a question that I don't think is related to a bug or feature request. 11 | 12 | 13 | -------------------------------------------------------------------------------- /.github/workflows/publish_to_maven_central.yml: -------------------------------------------------------------------------------- 1 | name: Publish to maven central 2 | 3 | on: 4 | release: 5 | types: [ published ] 6 | workflow_dispatch: 7 | 8 | jobs: 9 | release: 10 | name: Publish to maven central 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout Codebase 15 | uses: actions/checkout@v4 16 | 17 | - name: Set up Maven Central Repository 18 | uses: actions/setup-java@v4 19 | with: 20 | java-version: '11' 21 | distribution: 'adopt' 22 | server-id: central 23 | server-username: MAVEN_USERNAME 24 | server-password: MAVEN_PASSWORD 25 | gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} 26 | gpg-passphrase: MAVEN_GPG_PASSPHRASE 27 | 28 | - name: Publish to Apache Maven Central 29 | run: mvn clean deploy --batch-mode -Dmaven.compiler.release=11 -am -P release -pl ".,athena-federation-sdk,athena-dynamodb,athena-cloudwatch,athena-cloudwatch-metrics,athena-aws-cmdb,athena-jdbc,athena-mysql" 30 | env: 31 | MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} 32 | MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} 33 | MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} 34 | AWS_REGION: us-east-1 35 | -------------------------------------------------------------------------------- /.github/workflows/stalled.yml: -------------------------------------------------------------------------------- 1 | name: Label Stalled PRs 2 | on: 3 | schedule: 4 | - cron: '15 15 * * *' # Run every day at 15:15 UTC / 7:15 PST / 8:15 PDT 5 | workflow_dispatch: 6 | jobs: 7 | cleanup: 8 | runs-on: ubuntu-latest 9 | name: Stale PRs 10 | steps: 11 | - uses: aws-actions/stale-issue-cleanup@v6 12 | with: 13 | stale-pr-label: 'stalled' 14 | stale-pr-message: 'This PR is stalled because it has been open for 30 days with no activity.' 15 | days-before-stale: 30 16 | repo-token: ${{ secrets.GITHUB_TOKEN }} 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | */target 2 | */dependency-reduced-pom.xml 3 | dependency-reduced-pom.xml 4 | */*.xml.unformatted 5 | .idea/ 6 | /target/ 7 | **/*.iml 8 | .classpath 9 | .factorypath 10 | .project 11 | */.settings/ 12 | */.DS_Store 13 | .settings/org.eclipse.m2e.core.prefs 14 | .vscode/settings.json 15 | */packaged.yaml 16 | .DS_Store 17 | */.jqwik-database 18 | dist 19 | node_modules 20 | package-lock.json 21 | cdk.out 22 | .env 23 | **/*.dylib 24 | */dynamodb-local-metadata.json 25 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | -------------------------------------------------------------------------------- /athena-aws-cmdb/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-aws-cmdb-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-aws-cmdb-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-aws-cmdb/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena AWS CMDB Connector 2 | 3 | This connector enables Amazon Athena to communicate with various AWS Services, making your AWS Resource inventory accessible via SQL. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-cmdb.html). 6 | -------------------------------------------------------------------------------- /athena-clickhouse/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-clickhouse-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-clickhouse-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) -------------------------------------------------------------------------------- /athena-clickhouse/src/main/java/com/amazonaws/athena/connectors/clickhouse/ClickHouseCompositeHandler.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-clickhouse 4 | * %% 5 | * Copyright (C) 2024 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.clickhouse; 21 | 22 | import com.amazonaws.athena.connector.lambda.handlers.CompositeHandler; 23 | 24 | /** 25 | * Boilerplate composite handler that allows one to use a single Lambda function for both Metadata and Data. 26 | */ 27 | public class ClickHouseCompositeHandler 28 | extends CompositeHandler 29 | { 30 | public ClickHouseCompositeHandler() 31 | { 32 | super(new ClickHouseMetadataHandler(System.getenv()), new ClickHouseRecordHandler(System.getenv())); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /athena-cloudera-hive/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-cloudera-hive-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-cloudera-hive-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-cloudera-hive/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Cloudera Hive Connector 2 | 3 | This connector enables Amazon Athena to access your Cloudera Hive databases. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-cloudera-hive.html). 6 | -------------------------------------------------------------------------------- /athena-cloudera-impala/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-cloudera-impala-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-cloudera-impala-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-cloudera-impala/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Cloudera Impala Connector 2 | 3 | This connector enables Amazon Athena to access your Cloudera Impala databases. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-cloudera-impala.html). -------------------------------------------------------------------------------- /athena-cloudwatch-metrics/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-cloudwatch-metrics-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-cloudwatch-metrics-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-cloudwatch-metrics/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Cloudwatch Metrics Connector 2 | 3 | This connector enables Amazon Athena to communicate with Cloudwatch Metrics, making your metrics data accessible via SQL. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-cwmetrics.html). -------------------------------------------------------------------------------- /athena-cloudwatch/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-cloudwatch-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-cloudwatch-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-cloudwatch/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Cloudwatch Connector 2 | 3 | This connector enables Amazon Athena to communicate with Cloudwatch, making your log data accessible via SQL. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-cloudwatch.html). -------------------------------------------------------------------------------- /athena-datalakegen2/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-datalakegen2-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-datalakegen2-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-datalakegen2/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena DataLake Gen2 Connector 2 | 3 | This connector enables Amazon Athena to access your Azure Data Lake Storage Gen2. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-adls-gen2.html). 6 | -------------------------------------------------------------------------------- /athena-datalakegen2/src/main/java/com/amazonaws/athena/connectors/datalakegen2/DataLakeGen2Constants.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-datalakegen2 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.datalakegen2; 21 | 22 | public class DataLakeGen2Constants 23 | { 24 | public static final String NAME = "datalakegentwo"; 25 | public static final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 26 | public static final int DEFAULT_PORT = 1433; 27 | public static final String QUOTE_CHARACTER = "\""; 28 | 29 | private DataLakeGen2Constants() {} 30 | } 31 | -------------------------------------------------------------------------------- /athena-datalakegen2/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /athena-db2-as400/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-db2-as400-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-db2-as400-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-db2-as400/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda DB2 AS400 Connector 2 | 3 | This connector enables Amazon Athena to access your DB2 on iSeries (AS400) databases. 4 | 5 | Documentation has moved [here]. -------------------------------------------------------------------------------- /athena-db2-as400/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /athena-db2/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-db2-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-db2-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-db2/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda DB2 Connector 2 | 3 | This connector enables Amazon Athena to access your DB2 databases. 4 | 5 | Documentation has moved [here]. -------------------------------------------------------------------------------- /athena-db2/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /athena-docdb/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena DocumentDB Connector 2 | 3 | This connector enables Amazon Athena to communicate with your DocumentDB instance(s), making your DocumentDB data accessible via SQL. The also works with any MongoDB compatible endpoint. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-docdb.html). 6 | -------------------------------------------------------------------------------- /athena-docdb/src/test/java/com/amazonaws/athena/connectors/docdb/UnsupportedType.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-docdb 4 | * %% 5 | * Copyright (C) 2019 - 2020 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.docdb; 21 | 22 | /** 23 | * This is a place holder that is used as a type we won't really be able to coerce meaningfully with 24 | * a blanket strategy even as we add increasing type support. Basically, we wanted a type that we'd 25 | * never expect to actually get asked to add support for so that we know when these tests break. 26 | */ 27 | public class UnsupportedType 28 | { 29 | 30 | @Override 31 | public String toString() 32 | { 33 | return "UnsupportedType{}"; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /athena-dynamodb/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-dynamodb-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-dynamodb-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-dynamodb/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena DynamoDB Connector 2 | 3 | This connector enables Amazon Athena to communicate with DynamoDB, making your tables accessible via SQL. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-dynamodb.html). 6 | -------------------------------------------------------------------------------- /athena-dynamodb/native-libs/libsqlite4java-linux-amd64-1.0.392.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-dynamodb/native-libs/libsqlite4java-linux-amd64-1.0.392.so -------------------------------------------------------------------------------- /athena-dynamodb/native-libs/libsqlite4java-linux-i386-1.0.392.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-dynamodb/native-libs/libsqlite4java-linux-i386-1.0.392.so -------------------------------------------------------------------------------- /athena-dynamodb/native-libs/libsqlite4java-osx-1.0.392.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-dynamodb/native-libs/libsqlite4java-osx-1.0.392.dylib -------------------------------------------------------------------------------- /athena-dynamodb/native-libs/sqlite4java-win32-x64-1.0.392.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-dynamodb/native-libs/sqlite4java-win32-x64-1.0.392.dll -------------------------------------------------------------------------------- /athena-dynamodb/native-libs/sqlite4java-win32-x86-1.0.392.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-dynamodb/native-libs/sqlite4java-win32-x86-1.0.392.dll -------------------------------------------------------------------------------- /athena-elasticsearch/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-elasticsearch-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-elasticsearch-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-elasticsearch/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Elasticsearch Connector 2 | 3 | This connector enables Amazon Athena to communicate with your Elasticsearch instance(s) 4 | making your Elasticsearch data accessible via SQL. This connector will work with Amazon 5 | Elasticsearch Service as well as any Elasticsearch compatible endpoint configured with 6 | `Elasticsearch version 7.0` or higher. 7 | 8 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-opensearch.html). 9 | -------------------------------------------------------------------------------- /athena-elasticsearch/src/main/java/com/amazonaws/athena/connectors/elasticsearch/AwsElasticsearchFactory.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-elasticsearch 4 | * %% 5 | * Copyright (C) 2019 - 2020 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.elasticsearch; 21 | 22 | import software.amazon.awssdk.services.elasticsearch.ElasticsearchClient; 23 | 24 | /** 25 | * This factory class provides an AWS ES Client. 26 | */ 27 | public class AwsElasticsearchFactory 28 | { 29 | /** 30 | * Gets a default AWS ES client. 31 | * @return default AWS ES client. 32 | */ 33 | public ElasticsearchClient getClient() 34 | { 35 | return ElasticsearchClient.create(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /athena-elasticsearch/src/test/resources/mockito-extensions/README.md: -------------------------------------------------------------------------------- 1 | # Mockito Configuration 2 | 3 | The file `org.mockito.plugins.MockMaker` contains a configuration (**mock-maker-inline**) allowing Mockito to mock 4 | methods and objects declared `final`. 5 | 6 | **NOTE: Failure to include this configuration will result in a runtime error when attempting to mock final methods 7 | and objects:** 8 | 9 | ``` 10 | Mockito cannot mock/spy because : 11 | – final class 12 | ``` -------------------------------------------------------------------------------- /athena-elasticsearch/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline -------------------------------------------------------------------------------- /athena-federation-integ-test/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /athena-federation-sdk-tools/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/credentials/CredentialsProvider.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-jdbc 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.credentials; 21 | 22 | /** 23 | * JDBC username and password provider. 24 | */ 25 | public interface CredentialsProvider 26 | { 27 | /** 28 | * Retrieves credential for database. 29 | * 30 | * @return JDBC credential. See {@link DefaultCredentials}. 31 | */ 32 | DefaultCredentials getCredential(); 33 | } 34 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/data/writers/extractors/Extractor.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.data.writers.extractors; 21 | 22 | /** 23 | * Used to extract a value for some context. This interface enables the use of a pseudo-code generator 24 | * for RowWriter which reduces object and branching overhead when translating from your source system to Apache 25 | * Arrow. 26 | *

27 | * For example of how to use this, see ExampleRecordHandler in athena-federation-sdk. 28 | */ 29 | public interface Extractor {} 30 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/data/writers/holders/NullableDecimalHolder.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.data.writers.holders; 21 | 22 | import org.apache.arrow.vector.holders.ValueHolder; 23 | 24 | import java.math.BigDecimal; 25 | 26 | public class NullableDecimalHolder 27 | implements ValueHolder 28 | { 29 | public int isSet; 30 | public BigDecimal value; 31 | } 32 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/data/writers/holders/NullableVarBinaryHolder.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.data.writers.holders; 21 | 22 | import org.apache.arrow.vector.holders.ValueHolder; 23 | 24 | public class NullableVarBinaryHolder 25 | implements ValueHolder 26 | { 27 | public int isSet; 28 | public byte[] value; 29 | } 30 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/data/writers/holders/NullableVarCharHolder.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.data.writers.holders; 21 | 22 | import org.apache.arrow.vector.holders.ValueHolder; 23 | 24 | public class NullableVarCharHolder 25 | implements ValueHolder 26 | { 27 | public int isSet; 28 | public String value; 29 | } 30 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/domain/predicate/ConstraintProjector.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.domain.predicate; 21 | 22 | public interface ConstraintProjector 23 | { 24 | boolean apply(Object value); 25 | } 26 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/domain/predicate/Ranges.java: -------------------------------------------------------------------------------- 1 | package com.amazonaws.athena.connector.lambda.domain.predicate; 2 | 3 | /*- 4 | * #%L 5 | * Amazon Athena Query Federation SDK 6 | * %% 7 | * Copyright (C) 2019 Amazon Web Services 8 | * %% 9 | * Licensed under the Apache License, Version 2.0 (the "License"); 10 | * you may not use this file except in compliance with the License. 11 | * You may obtain a copy of the License at 12 | * 13 | * http://www.apache.org/licenses/LICENSE-2.0 14 | * 15 | * Unless required by applicable law or agreed to in writing, software 16 | * distributed under the License is distributed on an "AS IS" BASIS, 17 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 | * See the License for the specific language governing permissions and 19 | * limitations under the License. 20 | * #L% 21 | */ 22 | 23 | import java.util.List; 24 | 25 | public interface Ranges 26 | { 27 | int getRangeCount(); 28 | 29 | /** 30 | * @return Allowed non-overlapping predicate ranges sorted in increasing order 31 | */ 32 | List getOrderedRanges(); 33 | 34 | /** 35 | * @return Single range encompassing all of allowed the ranges 36 | */ 37 | Range getSpan(); 38 | } 39 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/domain/predicate/ValueMarker.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.domain.predicate; 21 | 22 | import org.apache.arrow.vector.types.pojo.ArrowType; 23 | 24 | public interface ValueMarker 25 | { 26 | boolean isUpperUnbounded(); 27 | 28 | boolean isLowerUnbounded(); 29 | 30 | boolean isNullValue(); 31 | 32 | Object getValue(); 33 | 34 | Marker.Bound getBound(); 35 | 36 | ArrowType getType(); 37 | } 38 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/domain/predicate/functions/OperatorType.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.domain.predicate.functions; 21 | 22 | public enum OperatorType { 23 | UNARY, 24 | BINARY, 25 | VARARG 26 | } 27 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/metadata/optimizations/pushdown/LimitPushdownSubType.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.metadata.optimizations.pushdown; 21 | 22 | public enum LimitPushdownSubType 23 | implements PushdownSubTypes 24 | { 25 | INTEGER_CONSTANT("integer_constant"); 26 | 27 | private String subType; 28 | 29 | @Override 30 | public String getSubType() 31 | { 32 | return subType; 33 | } 34 | 35 | LimitPushdownSubType(String subType) 36 | { 37 | this.subType = subType; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/metadata/optimizations/pushdown/PushdownSubTypes.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.metadata.optimizations.pushdown; 21 | 22 | import java.util.Collections; 23 | import java.util.List; 24 | 25 | public interface PushdownSubTypes 26 | { 27 | String getSubType(); 28 | 29 | default List getProperties() 30 | { 31 | return Collections.emptyList(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/metadata/optimizations/pushdown/TopNPushdownSubType.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.metadata.optimizations.pushdown; 21 | 22 | public enum TopNPushdownSubType 23 | implements PushdownSubTypes 24 | { 25 | SUPPORTS_ORDER_BY("SUPPORTS_ORDER_BY"); 26 | 27 | private String subType; 28 | 29 | @Override 30 | public String getSubType() 31 | { 32 | return subType; 33 | } 34 | 35 | TopNPushdownSubType(String subType) 36 | { 37 | this.subType = subType; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/records/RecordRequestType.java: -------------------------------------------------------------------------------- 1 | package com.amazonaws.athena.connector.lambda.records; 2 | 3 | /*- 4 | * #%L 5 | * Amazon Athena Query Federation SDK 6 | * %% 7 | * Copyright (C) 2019 Amazon Web Services 8 | * %% 9 | * Licensed under the Apache License, Version 2.0 (the "License"); 10 | * you may not use this file except in compliance with the License. 11 | * You may obtain a copy of the License at 12 | * 13 | * http://www.apache.org/licenses/LICENSE-2.0 14 | * 15 | * Unless required by applicable law or agreed to in writing, software 16 | * distributed under the License is distributed on an "AS IS" BASIS, 17 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 | * See the License for the specific language governing permissions and 19 | * limitations under the License. 20 | * #L% 21 | */ 22 | 23 | /** 24 | * Enumerates the support Record request types. 25 | */ 26 | public enum RecordRequestType 27 | { 28 | /** 29 | * For reading records. 30 | */ 31 | READ_RECORDS; 32 | } 33 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/security/EncryptionKeyFactory.java: -------------------------------------------------------------------------------- 1 | package com.amazonaws.athena.connector.lambda.security; 2 | 3 | /*- 4 | * #%L 5 | * Amazon Athena Query Federation SDK 6 | * %% 7 | * Copyright (C) 2019 Amazon Web Services 8 | * %% 9 | * Licensed under the Apache License, Version 2.0 (the "License"); 10 | * you may not use this file except in compliance with the License. 11 | * You may obtain a copy of the License at 12 | * 13 | * http://www.apache.org/licenses/LICENSE-2.0 14 | * 15 | * Unless required by applicable law or agreed to in writing, software 16 | * distributed under the License is distributed on an "AS IS" BASIS, 17 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 | * See the License for the specific language governing permissions and 19 | * limitations under the License. 20 | * #L% 21 | */ 22 | 23 | /** 24 | * Defines a factory that can be used to create AES-GCM compatible encryption keys. 25 | */ 26 | public interface EncryptionKeyFactory 27 | { 28 | /** 29 | * @return A key that satisfies the specification defined in BlockCrypto 30 | */ 31 | EncryptionKey create(); 32 | } 33 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/udf/UserDefinedFunctionType.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connector.lambda.udf; 21 | 22 | public enum UserDefinedFunctionType 23 | { 24 | SCALAR 25 | } 26 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/java/com/amazonaws/athena/connector/lambda/security/IdentityUtil.java: -------------------------------------------------------------------------------- 1 | package com.amazonaws.athena.connector.lambda.security; 2 | 3 | /*- 4 | * #%L 5 | * Amazon Athena Query Federation SDK 6 | * %% 7 | * Copyright (C) 2019 Amazon Web Services 8 | * %% 9 | * Licensed under the Apache License, Version 2.0 (the "License"); 10 | * you may not use this file except in compliance with the License. 11 | * You may obtain a copy of the License at 12 | * 13 | * http://www.apache.org/licenses/LICENSE-2.0 14 | * 15 | * Unless required by applicable law or agreed to in writing, software 16 | * distributed under the License is distributed on an "AS IS" BASIS, 17 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 | * See the License for the specific language governing permissions and 19 | * limitations under the License. 20 | * #L% 21 | */ 22 | 23 | import java.util.Collections; 24 | 25 | public class IdentityUtil 26 | { 27 | private IdentityUtil() {} 28 | 29 | public static FederatedIdentity fakeIdentity() 30 | { 31 | return new FederatedIdentity("arn", "account", Collections.emptyMap(), Collections.emptyList()); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/PingRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "PingRequest", 3 | "identity" : { 4 | "id" : "UNKNOWN", 5 | "principal" : "UNKNOWN", 6 | "account" : "0123456789", 7 | "arn" : "testArn", 8 | "tags" : { }, 9 | "groups" : [ ] 10 | }, 11 | "catalogName" : "test-catalog", 12 | "queryId" : "test-query-id" 13 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/PingRequestForwardsCompatible.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "PingRequest", 3 | "identity" : { 4 | "id" : "UNKNOWN", 5 | "principal" : "UNKNOWN", 6 | "account" : "0123456789", 7 | "arn" : "testArn", 8 | "tags" : { }, 9 | "groups" : [ ], 10 | "newIdField" : "newIdFieldValue" 11 | }, 12 | "catalogName" : "test-catalog", 13 | "queryId" : "test-query-id", 14 | "newField" : "newFieldValue" 15 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/PingResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "PingResponse", 3 | "catalogName" : "test-catalog", 4 | "queryId" : "test-query-id", 5 | "sourceType" : "test-source-type", 6 | "capabilities" : 23, 7 | "serDeVersion" : 2 8 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/PingResponseForwardsCompatible.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "PingResponse", 3 | "catalogName" : "test-catalog", 4 | "queryId" : "test-query-id", 5 | "sourceType" : "test-source-type", 6 | "capabilities" : 23, 7 | "serDeVersion" : 2, 8 | "newField" : "newFieldValue" 9 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/GetSplitsResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "GetSplitsResponse", 3 | "catalogName" : "test-catalog", 4 | "splits" : [ { 5 | "spillLocation" : { 6 | "@type" : "S3SpillLocation", 7 | "bucket" : "athena-virtuoso-test", 8 | "key" : "lambda-spill/test-query-id/test-split-id-1", 9 | "directory" : true 10 | }, 11 | "encryptionKey" : { 12 | "key" : "dGVzdC1rZXktMQ==", 13 | "nonce" : "dGVzdC1ub25jZS0x" 14 | }, 15 | "properties" : { 16 | "month" : "11", 17 | "year" : "2017", 18 | "day" : "1" 19 | } 20 | }, { 21 | "spillLocation" : { 22 | "@type" : "S3SpillLocation", 23 | "bucket" : "athena-virtuoso-test", 24 | "key" : "lambda-spill/test-query-id/test-split-id-2", 25 | "directory" : true 26 | }, 27 | "encryptionKey" : { 28 | "key" : "dGVzdC1rZXktMg==", 29 | "nonce" : "dGVzdC1ub25jZS0y" 30 | }, 31 | "properties" : { 32 | "month" : "11", 33 | "year" : "2017", 34 | "day" : "2" 35 | } 36 | } ], 37 | "continuationToken" : "test-continuation-token" 38 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/GetTableRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "GetTableRequest", 3 | "identity" : { 4 | "id" : "UNKNOWN", 5 | "principal" : "UNKNOWN", 6 | "account" : "0123456789", 7 | "arn" : "testArn", 8 | "tags" : { }, 9 | "groups" : [ ] 10 | }, 11 | "queryId" : "test-query-id", 12 | "catalogName" : "test-catalog", 13 | "tableName" : { 14 | "schemaName" : "test-schema", 15 | "tableName" : "test-table" 16 | } 17 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/GetTableResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "GetTableResponse", 3 | "catalogName" : "test-catalog", 4 | "tableName" : { 5 | "schemaName" : "test-schema", 6 | "tableName" : "test-table" 7 | }, 8 | "schema" : "PAEAABAAAAAAAAoADgAGAA0ACAAKAAAAAAADABAAAAAAAQoADAAAAAgABAAKAAAACAAAAAgAAAAAAAAABAAAAMAAAAB0AAAAPAAAAAQAAABi////FAAAABQAAAAYAAAAAAAFARQAAAAAAAAAAAAAAAQABAAEAAAABAAAAGNvbDMAAAAAlv///xQAAAAUAAAAFAAAAAAAAgEYAAAAAAAAAAAAAACE////AAAAASAAAAADAAAAZGF5AMr///8UAAAAFAAAABQAAAAAAAIBGAAAAAAAAAAAAAAAuP///wAAAAEgAAAABQAAAG1vbnRoABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAFAAAABwAAAAAAAIBIAAAAAAAAAAAAAAACAAMAAgABwAIAAAAAAAAASAAAAAEAAAAeWVhcgAAAAA=", 9 | "partitionColumns" : [ "year", "month", "day" ] 10 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/LambdaFunctionException.json: -------------------------------------------------------------------------------- 1 | { 2 | "errorMessage": "Requested resource not found (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: RIB6NOH4BNMAK6KQG88R5VE583VV4KQNSO5AEMVJF66Q9ASUAAJG)", 3 | "errorType": "com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException", 4 | "stackTrace": [ 5 | "com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1701)", 6 | "com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1356)" 7 | ] 8 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/ListSchemasRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "ListSchemasRequest", 3 | "identity" : { 4 | "id" : "UNKNOWN", 5 | "principal" : "UNKNOWN", 6 | "account" : "0123456789", 7 | "arn" : "testArn", 8 | "tags" : { }, 9 | "groups" : [ ] 10 | }, 11 | "queryId" : "test-query-id", 12 | "catalogName" : "test-catalog" 13 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/ListSchemasResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "ListSchemasResponse", 3 | "catalogName" : "test-catalog", 4 | "schemas" : [ "schema1", "schema2" ] 5 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/ListTablesRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "ListTablesRequest", 3 | "identity" : { 4 | "id" : "UNKNOWN", 5 | "principal" : "UNKNOWN", 6 | "account" : "0123456789", 7 | "arn" : "testArn", 8 | "tags" : { }, 9 | "groups" : [ ] 10 | }, 11 | "queryId" : "test-query-id", 12 | "catalogName" : "test-catalog", 13 | "schemaName" : "test-schema", 14 | "nextToken" : "table4", 15 | "pageSize" : 25 16 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/ListTablesResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "ListTablesResponse", 3 | "tables" : [ { 4 | "schemaName" : "schema1", 5 | "tableName" : "table1" 6 | }, { 7 | "schemaName" : "schema1", 8 | "tableName" : "table2" 9 | } ], 10 | "catalogName" : "test-catalog", 11 | "nextToken" : "table3" 12 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/ReadRecordsResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "ReadRecordsResponse", 3 | "catalogName" : "test-catalog", 4 | "records" : { 5 | "aId" : "test-allocator-id", 6 | "schema" : "BAEAABAAAAAAAAoADgAGAA0ACAAKAAAAAAADABAAAAAAAQoADAAAAAgABAAKAAAACAAAAAgAAAAAAAAAAwAAAIgAAAA8AAAABAAAAJb///8UAAAAFAAAABQAAAAAAAIBGAAAAAAAAAAAAAAAhP///wAAAAEgAAAAAwAAAGRheQDK////FAAAABQAAAAUAAAAAAACARgAAAAAAAAAAAAAALj///8AAAABIAAAAAUAAABtb250aAASABgAFAATABIADAAAAAgABAASAAAAFAAAABQAAAAcAAAAAAACASAAAAAAAAAAAAAAAAgADAAIAAcACAAAAAAAAAEgAAAABAAAAHllYXIAAAAA", 7 | "records" : "7AAAABQAAAAAAAAADAAWAA4AFQAQAAQADAAAAJAAAAAAAAAAAAADABAAAAAAAwoAGAAMAAgABAAKAAAAFAAAAHgAAAAKAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAwAAAAAAAAAAIAAAAAAAAAOAAAAAAAAAAoAAAAAAAAAGAAAAAAAAAAAgAAAAAAAABoAAAAAAAAACgAAAAAAAAAAAAAAAMAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAA/wMAAAAAAADgBwAA4QcAAOIHAADjBwAA5AcAAOUHAADmBwAA5wcAAOgHAADpBwAA/wMAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAA/wMAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAA" 8 | } 9 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/RemoteReadRecordsResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "RemoteReadRecordsResponse", 3 | "catalogName" : "test-catalog", 4 | "schema" : "BAEAABAAAAAAAAoADgAGAA0ACAAKAAAAAAADABAAAAAAAQoADAAAAAgABAAKAAAACAAAAAgAAAAAAAAAAwAAAIgAAAA8AAAABAAAAJb///8UAAAAFAAAABQAAAAAAAIBGAAAAAAAAAAAAAAAhP///wAAAAEgAAAAAwAAAGRheQDK////FAAAABQAAAAUAAAAAAACARgAAAAAAAAAAAAAALj///8AAAABIAAAAAUAAABtb250aAASABgAFAATABIADAAAAAgABAASAAAAFAAAABQAAAAcAAAAAAACASAAAAAAAAAAAAAAAAgADAAIAAcACAAAAAAAAAEgAAAABAAAAHllYXIAAAAA", 5 | "remoteBlocks" : [ { 6 | "@type" : "S3SpillLocation", 7 | "bucket" : "athena-virtuoso-test", 8 | "key" : "lambda-spill/test-query-id/test-split-id-1", 9 | "directory" : true 10 | }, { 11 | "@type" : "S3SpillLocation", 12 | "bucket" : "athena-virtuoso-test", 13 | "key" : "lambda-spill/test-query-id/test-split-id-2", 14 | "directory" : true 15 | } ], 16 | "encryptionKey" : { 17 | "key" : "dGVzdC1rZXk=", 18 | "nonce" : "dGVzdC1ub25jZQ==" 19 | } 20 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/UserDefinedFunctionRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "UserDefinedFunctionRequest", 3 | "identity" : { 4 | "id" : "UNKNOWN", 5 | "principal" : "UNKNOWN", 6 | "account" : "0123456789", 7 | "arn" : "testArn", 8 | "tags" : { }, 9 | "groups" : [ ] 10 | }, 11 | "inputRecords" : { 12 | "aId" : "test-allocator-id", 13 | "schema" : "1AAAABAAAAAAAAoADgAGAA0ACAAKAAAAAAADABAAAAAAAQoADAAAAAgABAAKAAAACAAAAAgAAAAAAAAAAgAAAFQAAAAEAAAAxv///xQAAAAUAAAAFAAAAAAAAgEYAAAAAAAAAAAAAAC0////AAAAASAAAAAHAAAAZmFjdG9yMgAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAFAAAABwAAAAAAAIBIAAAAAAAAAAAAAAACAAMAAgABwAIAAAAAAAAASAAAAAHAAAAZmFjdG9yMQAAAAAA", 14 | "records" : "vAAAABQAAAAAAAAADAAWAA4AFQAQAAQADAAAACAAAAAAAAAAAAADABAAAAAAAwoAGAAMAAgABAAKAAAAFAAAAFgAAAABAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAgAAAAAAAAABAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAGAAAAAAAAAAEAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAA=" 15 | }, 16 | "outputSchema" : "lAAAABAAAAAAAAoADgAGAA0ACAAKAAAAAAADABAAAAAAAQoADAAAAAgABAAKAAAACAAAAAgAAAAAAAAAAQAAABgAAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAFAAAABwAAAAAAAIBIAAAAAAAAAAAAAAACAAMAAgABwAIAAAAAAAAASAAAAAHAAAAcHJvZHVjdAA=", 17 | "methodName" : "test-method", 18 | "functionType" : "SCALAR" 19 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v2/UserDefinedFunctionResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "UserDefinedFunctionResponse", 3 | "records" : { 4 | "aId" : "test-allocator-id", 5 | "schema" : "lAAAABAAAAAAAAoADgAGAA0ACAAKAAAAAAADABAAAAAAAQoADAAAAAgABAAKAAAACAAAAAgAAAAAAAAAAQAAABgAAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAFAAAABwAAAAAAAIBIAAAAAAAAAAAAAAACAAMAAgABwAIAAAAAAAAASAAAAAHAAAAcHJvZHVjdAA=", 6 | "records" : "jAAAABQAAAAAAAAADAAWAA4AFQAQAAQADAAAADAAAAAAAAAAAAADABAAAAAAAwoAGAAMAAgABAAKAAAAFAAAADgAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAQAAAAoAAAAAAAAAAAAAAAAAAAAAAAAA/wMAAAAAAAAAAAAAAgAAAAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAA" 7 | }, 8 | "methodName" : "test-method" 9 | } -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v4/GetDataSourceCapabilitiesResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "GetDataSourceCapabilitiesResponse", 3 | "catalogName" : "test-catalog", 4 | "capabilities" : { 5 | "supports_complex_expression_pushdown" : [ { 6 | "subType" : "supported_function_expression_types", 7 | "properties" : [ "$add", "$subtract" ] 8 | } ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /athena-federation-sdk/src/test/resources/serde/v5/GetTableRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type" : "GetTableRequest", 3 | "identity" : { 4 | "id" : "UNKNOWN", 5 | "principal" : "UNKNOWN", 6 | "account" : "0123456789", 7 | "arn" : "testArn", 8 | "tags" : { }, 9 | "groups" : [ ] 10 | }, 11 | "queryId" : "test-query-id", 12 | "catalogName" : "test-catalog", 13 | "tableName" : { 14 | "schemaName" : "test-schema", 15 | "tableName" : "test-table" 16 | }, 17 | "queryPassthroughArguments" : { 18 | "query" : "SELECT * FROM DUMMY_TABLE;" 19 | } 20 | } -------------------------------------------------------------------------------- /athena-gcs/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-gcs.zip ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-gcs.zip 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-gcs/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda GCS Connector 2 | 3 | This connector enables Amazon Athena to Google Cloud Storage. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-gcs.html). 6 | -------------------------------------------------------------------------------- /athena-gcs/src/test/resources/person-data.parquet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-gcs/src/test/resources/person-data.parquet -------------------------------------------------------------------------------- /athena-google-bigquery/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-google-bigquery-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-google-bigquery-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-google-bigquery/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Google BigQuery Connector 2 | 3 | This connector enables Amazon Athena to communicate with BigQuery, making your BigQuery data accessible. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-bigquery.html). 6 | -------------------------------------------------------------------------------- /athena-google-bigquery/src/main/java/com/amazonaws/athena/connectors/google/bigquery/BigQueryExceptions.java: -------------------------------------------------------------------------------- 1 | 2 | /*- 3 | * #%L 4 | * athena-google-bigquery 5 | * %% 6 | * Copyright (C) 2019 Amazon Web Services 7 | * %% 8 | * Licensed under the Apache License, Version 2.0 (the "License"); 9 | * you may not use this file except in compliance with the License. 10 | * You may obtain a copy of the License at 11 | * 12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | * 14 | * Unless required by applicable law or agreed to in writing, software 15 | * distributed under the License is distributed on an "AS IS" BASIS, 16 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | * See the License for the specific language governing permissions and 18 | * limitations under the License. 19 | * #L% 20 | */ 21 | 22 | package com.amazonaws.athena.connectors.google.bigquery; 23 | 24 | public class BigQueryExceptions 25 | { 26 | static class TooManyTablesException 27 | extends RuntimeException 28 | { 29 | TooManyTablesException() 30 | { 31 | super("Too many tables, exceeded max metadata results for schema count."); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /athena-hbase/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-hbase-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-hbase-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-hbase/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena HBase Connector 2 | 3 | This connector enables Amazon Athena to communicate with your HBase instance(s), making your HBase data accessible via SQL. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-hbase.html). 6 | -------------------------------------------------------------------------------- /athena-hbase/src/main/java/com/amazonaws/athena/connectors/hbase/connection/UnrecoverableException.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-hbase 4 | * %% 5 | * Copyright (C) 2019 - 2020 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.hbase.connection; 21 | 22 | /** 23 | * Used to indicate that a particular exception is not recoverable and thus not retriable by our HBaseConnection's 24 | * automatic retry and reconnect logic. 25 | */ 26 | public class UnrecoverableException 27 | extends Exception 28 | { 29 | public UnrecoverableException(String message, Throwable cause) 30 | { 31 | super(message, cause); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /athena-hortonworks-hive/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-hortonworks-hive-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-hortonworks-hive-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-hortonworks-hive/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Hortonworks Hive Connector 2 | 3 | This connector enables Amazon Athena to access your Hortonworks Hive databases. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-hortonworks.html). 6 | -------------------------------------------------------------------------------- /athena-hortonworks-hive/src/main/java/com/amazonaws/athena/connectors/hortonworks/HortonworksEnvironmentProperties.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 - 2024 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.hortonworks; 21 | 22 | import com.amazonaws.athena.connectors.jdbc.JdbcEnvironmentProperties; 23 | 24 | import java.util.Map; 25 | 26 | public class HortonworksEnvironmentProperties extends JdbcEnvironmentProperties 27 | { 28 | @Override 29 | protected String getConnectionStringPrefix(Map connectionProperties) 30 | { 31 | return "hive://jdbc:hive2://"; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /athena-jdbc/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Jdbc Connector 2 | 3 | The JDBC Connector is a compile-only project which is used as a dependency of several other connectors. As a result, this connector can no longer be deployed on its own as of [this PR](https://github.com/awslabs/aws-athena-query-federation/pull/662) from February 2022. 4 | 5 | If you used to use this connector to run federated queries agaisnt postgres, mysql, or redshift, you can now directly deploy our connectors for each one: [postgres](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-postgresql), [mysql](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-mysql), and [redshift](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-redshift). -------------------------------------------------------------------------------- /athena-jdbc/src/main/java/com/amazonaws/athena/connectors/jdbc/manager/JdbcMetadataHandlerFactory.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-jdbc 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.jdbc.manager; 21 | 22 | import com.amazonaws.athena.connectors.jdbc.connection.DatabaseConnectionConfig; 23 | 24 | public interface JdbcMetadataHandlerFactory 25 | { 26 | String getEngine(); 27 | JdbcMetadataHandler createJdbcMetadataHandler(DatabaseConnectionConfig config, java.util.Map configOptions); 28 | } 29 | -------------------------------------------------------------------------------- /athena-jdbc/src/main/java/com/amazonaws/athena/connectors/jdbc/manager/JdbcRecordHandlerFactory.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-jdbc 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.jdbc.manager; 21 | 22 | import com.amazonaws.athena.connectors.jdbc.connection.DatabaseConnectionConfig; 23 | 24 | public interface JdbcRecordHandlerFactory 25 | { 26 | String getEngine(); 27 | JdbcRecordHandler createJdbcRecordHandler(DatabaseConnectionConfig config, java.util.Map configOptions); 28 | } 29 | -------------------------------------------------------------------------------- /athena-jdbc/src/main/java/com/amazonaws/athena/connectors/jdbc/splits/Splitter.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-jdbc 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.jdbc.splits; 21 | 22 | import java.util.Iterator; 23 | 24 | /** 25 | * Split iterator for type T. 26 | * 27 | * @param type of splitter 28 | */ 29 | public interface Splitter 30 | extends Iterator> 31 | { 32 | /** 33 | * Provides the next split clause to be used in SQL queries. 34 | * @return SQL clause for the range, both endpoints inclusive. 35 | */ 36 | String nextRangeClause(); 37 | } 38 | -------------------------------------------------------------------------------- /athena-kafka/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-kafka-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-kafka-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-kafka/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Kafka Connector 2 | 3 | This connector enables Amazon Athena to access your Kafka clusters. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-kafka.html). 6 | -------------------------------------------------------------------------------- /athena-kafka/src/main/java/com/amazonaws/athena/connectors/kafka/KafkaCompositeHandler.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-kafka 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.kafka; 21 | 22 | import com.amazonaws.athena.connector.lambda.handlers.CompositeHandler; 23 | 24 | public class KafkaCompositeHandler 25 | extends CompositeHandler 26 | { 27 | public KafkaCompositeHandler() throws Exception 28 | { 29 | super(new KafkaMetadataHandler(System.getenv()), new KafkaRecordHandler(System.getenv())); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /athena-kafka/src/main/java/com/amazonaws/athena/connectors/kafka/dto/TopicPartitionPiece.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Athena Kafka Connector 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.kafka.dto; 21 | 22 | public class TopicPartitionPiece 23 | { 24 | public final long startOffset; 25 | public final long endOffset; 26 | 27 | /** 28 | * Creates PartitionSplit instance. 29 | * 30 | * @param startOffset 31 | * @param endOffset 32 | */ 33 | public TopicPartitionPiece(long startOffset, long endOffset) 34 | { 35 | this.startOffset = startOffset; 36 | this.endOffset = endOffset; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /athena-msk/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-msk-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-msk-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-msk/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda MSK Connector 2 | 3 | This connector enables Amazon Athena to access your kafka clusters. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-msk.html). 6 | -------------------------------------------------------------------------------- /athena-msk/src/main/java/com/amazonaws/athena/connectors/msk/AmazonMskCompositeHandler.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-msk 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.msk; 21 | 22 | import com.amazonaws.athena.connector.lambda.handlers.CompositeHandler; 23 | 24 | public class AmazonMskCompositeHandler 25 | extends CompositeHandler 26 | { 27 | public AmazonMskCompositeHandler() throws Exception 28 | { 29 | super(new AmazonMskMetadataHandler(new AmazonMskEnvironmentProperties().createEnvironment()), new AmazonMskRecordHandler(new AmazonMskEnvironmentProperties().createEnvironment())); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /athena-msk/src/main/java/com/amazonaws/athena/connectors/msk/consumer/MskRecordProcessor.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Athena MSK Connector 4 | * %% 5 | * Copyright (C) 2019 - 2024 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.msk.consumer; 21 | 22 | import com.amazonaws.athena.connector.lambda.data.BlockSpiller; 23 | import com.amazonaws.athena.connectors.msk.dto.SplitParameters; 24 | import org.apache.kafka.clients.consumer.ConsumerRecord; 25 | 26 | public interface MskRecordProcessor 27 | { 28 | void processRecord(BlockSpiller spiller, SplitParameters splitParameters, ConsumerRecord record); 29 | } 30 | -------------------------------------------------------------------------------- /athena-msk/src/main/java/com/amazonaws/athena/connectors/msk/dto/TopicPartitionPiece.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Athena MSK Connector 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.msk.dto; 21 | 22 | public class TopicPartitionPiece 23 | { 24 | public final long startOffset; 25 | public final long endOffset; 26 | 27 | /** 28 | * Creates PartitionSplit instance. 29 | * 30 | * @param startOffset 31 | * @param endOffset 32 | */ 33 | public TopicPartitionPiece(long startOffset, long endOffset) 34 | { 35 | this.startOffset = startOffset; 36 | this.endOffset = endOffset; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /athena-mysql/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-mysql-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-mysql-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-mysql/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda MySQL Connector 2 | 3 | This connector enables Amazon Athena to access your MySQL databases. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-mysql.html). 6 | -------------------------------------------------------------------------------- /athena-mysql/src/main/java/com/amazonaws/athena/connectors/mysql/MySqlConstants.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-mysql 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.mysql; 21 | 22 | public final class MySqlConstants 23 | { 24 | public static final String MYSQL_NAME = "mysql"; 25 | public static final String MYSQL_DRIVER_CLASS = "com.mysql.cj.jdbc.Driver"; 26 | public static final int MYSQL_DEFAULT_PORT = 3306; 27 | 28 | private MySqlConstants() {} 29 | } 30 | -------------------------------------------------------------------------------- /athena-mysql/src/main/java/com/amazonaws/athena/connectors/mysql/MySqlEnvironmentProperties.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 - 2024 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.mysql; 21 | 22 | import com.amazonaws.athena.connectors.jdbc.JdbcEnvironmentProperties; 23 | 24 | import java.util.Map; 25 | 26 | public class MySqlEnvironmentProperties extends JdbcEnvironmentProperties 27 | { 28 | @Override 29 | protected String getConnectionStringPrefix(Map connectionProperties) 30 | { 31 | return "mysql://jdbc:mysql://"; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /athena-neptune/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-neptune-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-neptune-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-neptune/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Neptune Connector 2 | 3 | This connector enables Amazon Athena to communicate with your Neptune Graph Database instance, making your Neptune graph data accessible via SQL. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-neptune.html). 6 | -------------------------------------------------------------------------------- /athena-neptune/docs/README.md: -------------------------------------------------------------------------------- 1 | # Neptune Athena Connector Example 2 | 3 | To get started with the Neptune Athena Connector, follow these steps: 4 | 5 | 1. Create a Amazon Neptune database cluster, if you do not already have one. Then populate the database with the sample `air routes` dataset. This is available in both Labeled Property Graph (LPG) and Resource Description Framework (RDF) formats. You may load both if you would like to test the connector against both formats. For more, see [neptune-cluster-setup/README.md](neptune-cluster-setup/README.md). 6 | 2. The connector requires you to define a table structure in AWS Glue. Follow [aws-glue-sample-scripts/README.md](aws-glue-sample-scripts/README.md) to setup for the `air routes` dataset. 7 | 3. Deploy the connector following [neptune-connector-setup/README.md](neptune-connector-setup/README.md). To use both LPG and RDF, deploy two copies of the connector. 8 | 9 | -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/airportrdf_props.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/airportrdf_props.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/airportrdf_schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/airportrdf_schema.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/connector-propertygraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/connector-propertygraph.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/customquery-exampletable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/customquery-exampletable.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/customtable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/customtable.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/routerdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/routerdf.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/routerdf_nopfx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/routerdf_nopfx.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/table.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/table_custom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/table_custom.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/assets/table_route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/aws-glue-sample-scripts/assets/table_route.png -------------------------------------------------------------------------------- /athena-neptune/docs/aws-glue-sample-scripts/automation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "automation", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "aws-sdk": "^2.992.0", 13 | "fs": "^0.0.1-security", 14 | "uuid": "^3.3.2" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-cluster-setup/assets/Notebook-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-cluster-setup/assets/Notebook-1.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-cluster-setup/assets/Notebook-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-cluster-setup/assets/Notebook-2.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-cluster-setup/assets/Notebook-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-cluster-setup/assets/Notebook-3.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-cluster-setup/assets/Notebook-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-cluster-setup/assets/Notebook-4.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-cluster-setup/assets/Notebook-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-cluster-setup/assets/Notebook-5.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-clusterId.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-clusterId.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-clusterendpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-clusterendpoint.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-console.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-parameters1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-parameters1.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-parameters2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-parameters2.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-securitygroup1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-securitygroup1.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-securitygroup2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-securitygroup2.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-securitygroup3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-securitygroup3.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-securitygroup4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-securitygroup4.png -------------------------------------------------------------------------------- /athena-neptune/docs/neptune-connector-setup/assets/connector-subnet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-neptune/docs/neptune-connector-setup/assets/connector-subnet.png -------------------------------------------------------------------------------- /athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/Enums.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-neptune 4 | * %% 5 | * Copyright (C) 2019 - 2021 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.neptune; 21 | 22 | public class Enums 23 | { 24 | public enum SpecialKeys { 25 | IN, OUT, ID 26 | } 27 | 28 | public enum TableSchemaMetaType { 29 | VERTEX, EDGE, VIEW 30 | } 31 | 32 | public enum GraphType{ 33 | PROPERTYGRAPH, RDF 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /athena-oracle/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Oracle Connector 2 | 3 | This connector enables Amazon Athena to access your Oracle databases. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-oracle.html). 6 | -------------------------------------------------------------------------------- /athena-oracle/src/main/java/com/amazonaws/athena/connectors/oracle/OracleConstants.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-oracle 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.oracle; 21 | 22 | public final class OracleConstants 23 | { 24 | public static final String ORACLE_NAME = "oracle"; 25 | public static final String ORACLE_DRIVER_CLASS = "oracle.jdbc.OracleDriver"; 26 | public static final int ORACLE_DEFAULT_PORT = 1521; 27 | 28 | private OracleConstants() {} 29 | } 30 | -------------------------------------------------------------------------------- /athena-postgresql/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-postgresql-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-postgresql-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in athena-postgresql.yaml because has two different handlers) -------------------------------------------------------------------------------- /athena-postgresql/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda PostgreSQL Connector 2 | 3 | This connector enables Amazon Athena to access your PostgreSQL databases. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-postgresql.html). 6 | -------------------------------------------------------------------------------- /athena-postgresql/etc/test-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "athena_work_group": "FederationIntegrationTests", 3 | "athena_result_location": "", /* The s3 bucket path used to store results of Athena queries */ 4 | "secrets_manager_secret": "federation/integ/postgresql", 5 | "environment_vars": 6 | { 7 | "spill_bucket": "kparwal-federation-integ-spills", 8 | "spill_prefix": "athena-spill", 9 | "disable_spill_encryption": "false", 10 | "spill_put_request_headers": "" 11 | }, 12 | "vpc_configuration": 13 | { 14 | "vpc_id": "vpc-3119604c", 15 | "security_group_id": "sg-f035dfe1", 16 | "subnet_ids": 17 | [ 18 | "subnet-f7311fa8", 19 | "subnet-83f6dbe5", 20 | "subnet-764f6457", 21 | "subnet-2a36cb66", 22 | "subnet-4d49387c", 23 | "subnet-55e50254" 24 | ], 25 | "availability_zones": 26 | [ 27 | "us-east-1a", 28 | "us-east-1b", 29 | "us-east-1c", 30 | "us-east-1d", 31 | "us-east-1e", 32 | "us-east-1f" 33 | ] 34 | }, 35 | "user_settings": 36 | { 37 | "postgres_db_name": "integ_table", 38 | "postgres_db_port": 5432, 39 | "postgres_table_movies": "movies", 40 | "postgres_table_bday": "bday" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /athena-postgresql/src/main/java/com/amazonaws/athena/connectors/postgresql/PostGreSqlConstants.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-postgresql 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.postgresql; 21 | 22 | public class PostGreSqlConstants 23 | { 24 | public static final String POSTGRES_NAME = "postgres"; 25 | public static final String POSTGRESQL_DRIVER_CLASS = "org.postgresql.Driver"; 26 | public static final int POSTGRESQL_DEFAULT_PORT = 5432; 27 | public static final String POSTGRES_QUOTE_CHARACTER = "\""; 28 | 29 | private PostGreSqlConstants() {} 30 | } 31 | -------------------------------------------------------------------------------- /athena-postgresql/src/main/java/com/amazonaws/athena/connectors/postgresql/PostGreSqlEnvironmentProperties.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 - 2024 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.postgresql; 21 | 22 | import com.amazonaws.athena.connectors.jdbc.JdbcEnvironmentProperties; 23 | 24 | import java.util.Map; 25 | 26 | public class PostGreSqlEnvironmentProperties extends JdbcEnvironmentProperties 27 | { 28 | @Override 29 | protected String getConnectionStringPrefix(Map connectionProperties) 30 | { 31 | return "postgres://jdbc:postgresql://"; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /athena-redis/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-redis-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-redis-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-redis/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Redis Connector 2 | 3 | This connector enables Amazon Athena to communicate with your Redis instance(s), making your Redis data accessible via SQL. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-redis.html). 6 | -------------------------------------------------------------------------------- /athena-redis/src/test/java/com/amazonaws/athena/connectors/redis/util/MockKeyScanCursor.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-redis 4 | * %% 5 | * Copyright (C) 2019 - 2021 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.redis.util; 21 | 22 | import io.lettuce.core.KeyScanCursor; 23 | 24 | import java.util.ArrayList; 25 | import java.util.List; 26 | 27 | public class MockKeyScanCursor extends KeyScanCursor { 28 | private List keys = new ArrayList<>(); 29 | 30 | public List getKeys() 31 | { 32 | return this.keys; 33 | } 34 | 35 | public void setKeys(List keys) 36 | { 37 | this.keys = keys; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /athena-redshift/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-redshift-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-redshift-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-redshift/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Redshift Connector 2 | 3 | This connector enables Amazon Athena to access your Redshift database using JDBC driver. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-redshift.html). 6 | -------------------------------------------------------------------------------- /athena-redshift/src/main/java/com/amazonaws/athena/connectors/redshift/RedshiftCompositeHandler.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-redshift 4 | * %% 5 | * Copyright (C) 2019 - 2024 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.redshift; 21 | 22 | import com.amazonaws.athena.connector.lambda.handlers.CompositeHandler; 23 | 24 | public class RedshiftCompositeHandler extends CompositeHandler 25 | { 26 | public RedshiftCompositeHandler() 27 | { 28 | super(new RedshiftMetadataHandler(new RedshiftEnvironmentProperties().createEnvironment()), new RedshiftRecordHandler(new RedshiftEnvironmentProperties().createEnvironment())); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /athena-redshift/src/main/java/com/amazonaws/athena/connectors/redshift/RedshiftConstants.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-redshift 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.redshift; 21 | 22 | public class RedshiftConstants 23 | { 24 | public static final String REDSHIFT_NAME = "redshift"; 25 | public static final String REDSHIFT_DRIVER_CLASS = "com.amazon.redshift.jdbc.Driver"; 26 | public static final int REDSHIFT_DEFAULT_PORT = 5439; 27 | 28 | private RedshiftConstants() {} 29 | } 30 | -------------------------------------------------------------------------------- /athena-redshift/src/main/java/com/amazonaws/athena/connectors/redshift/RedshiftEnvironmentProperties.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-redshift 4 | * %% 5 | * Copyright (C) 2019 - 2024 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.redshift; 21 | 22 | import com.amazonaws.athena.connectors.jdbc.JdbcEnvironmentProperties; 23 | 24 | import java.util.Map; 25 | 26 | public class RedshiftEnvironmentProperties extends JdbcEnvironmentProperties 27 | { 28 | @Override 29 | protected String getConnectionStringPrefix(Map connectionProperties) 30 | { 31 | return "redshift://jdbc:redshift://"; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /athena-saphana/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-saphana.zip ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-saphana.zip 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-saphana/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda SAP HANA Connector 2 | 3 | This connector enables Amazon Athena to access your SAP HANA SQL database or RDS instance(s) using JDBC driver. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-sap-hana.html). 6 | -------------------------------------------------------------------------------- /athena-saphana/assembly.xml: -------------------------------------------------------------------------------- 1 | 4 | zip 5 | 6 | false 7 | 8 | 9 | zip 10 | 11 | 12 | 13 | ${project.basedir}/conf 14 | 15 | 16 | 17 | ${project.build.directory}/classes 18 | / 19 | 20 | 21 | 22 | 23 | 24 | lib 25 | 26 | ${project.groupId}:${project.artifactId}:jar:* 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /athena-saphana/checkstyle-suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /athena-snowflake/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-snowflake.zip ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-snowflake.zip 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-snowflake/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Snowflake Connector 2 | 3 | This connector enables Amazon Athena to access your Snowflake SQL database or RDS instance(s) using JDBC driver. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-snowflake.html). 6 | -------------------------------------------------------------------------------- /athena-sqlserver/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-sqlserver-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-sqlserver-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-sqlserver/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda SQL Server Connector 2 | 3 | This connector enables Amazon Athena to access your Sql Server databases. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-microsoft-sql-server.html). 6 | -------------------------------------------------------------------------------- /athena-sqlserver/src/main/java/com/amazonaws/athena/connectors/sqlserver/SqlServerCompositeHandler.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-sqlserver 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.sqlserver; 21 | 22 | import com.amazonaws.athena.connector.lambda.handlers.CompositeHandler; 23 | 24 | public class SqlServerCompositeHandler extends CompositeHandler 25 | { 26 | public SqlServerCompositeHandler() 27 | { 28 | super(new SqlServerMetadataHandler(new SqlServerEnvironmentProperties().createEnvironment()), new SqlServerRecordHandler(new SqlServerEnvironmentProperties().createEnvironment())); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /athena-sqlserver/src/main/java/com/amazonaws/athena/connectors/sqlserver/SqlServerConstants.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-sqlserver 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.sqlserver; 21 | 22 | public final class SqlServerConstants 23 | { 24 | public static final String NAME = "sqlserver"; 25 | public static final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 26 | public static final int DEFAULT_PORT = 1433; 27 | public static final String SQLSERVER_QUOTE_CHARACTER = "\""; 28 | static final String PARTITION_NUMBER = "partition_number"; 29 | private SqlServerConstants() {} 30 | } 31 | -------------------------------------------------------------------------------- /athena-sqlserver/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /athena-synapse/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-synapse-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-synapse-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-synapse/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Synapse Connector 2 | 3 | This connector enables Amazon Athena to access your Azure Synapse database. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-azure-synapse.html). 6 | -------------------------------------------------------------------------------- /athena-synapse/src/main/java/com/amazonaws/athena/connectors/synapse/SynapseCompositeHandler.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-synapse 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.synapse; 21 | 22 | import com.amazonaws.athena.connector.lambda.handlers.CompositeHandler; 23 | 24 | public class SynapseCompositeHandler extends CompositeHandler 25 | { 26 | public SynapseCompositeHandler() 27 | { 28 | super(new SynapseMetadataHandler(new SynapseEnvironmentProperties().createEnvironment()), new SynapseRecordHandler(new SynapseEnvironmentProperties().createEnvironment())); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /athena-synapse/src/main/java/com/amazonaws/athena/connectors/synapse/SynapseConstants.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-synapse 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.synapse; 21 | 22 | public final class SynapseConstants 23 | { 24 | public static final String NAME = "synapse"; 25 | public static final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 26 | public static final int DEFAULT_PORT = 1433; 27 | public static final String QUOTE_CHARACTER = "\""; 28 | public static final String SQL_POOL = "azureServerless"; 29 | 30 | private SynapseConstants() {} 31 | } 32 | -------------------------------------------------------------------------------- /athena-synapse/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /athena-synapse/src/main/resources/templates/rowCount.st: -------------------------------------------------------------------------------- 1 | rowCount(name, schemaname) ::= << 2 | SELECT count(*) as row_count 3 | FROM sys.schemas s 4 | JOIN sys.tables t ON t.[schema_id] = s.[schema_id] 5 | JOIN sys.partitions p ON p.[object_id] = t.[object_id] 6 | JOIN sys.indexes i ON i.[object_id] = p.[object_id] 7 | AND i.[index_id] = p.[index_id] 8 | JOIN sys.data_spaces ds ON ds.[data_space_id] = i.[data_space_id] 9 | JOIN sys.index_columns AS ic ON ic.[object_id] = i.[object_id] 10 | AND ic.index_id = i.index_id 11 | AND ic.partition_ordinal >= 1 12 | JOIN sys.columns AS c ON t.[object_id] = c.[object_id] 13 | AND ic.column_id = c.column_id 14 | LEFT JOIN sys.partition_schemes ps ON ps.[data_space_id] = ds.[data_space_id] 15 | LEFT JOIN sys.partition_functions pf ON pf.[function_id] = ps.[function_id] 16 | LEFT JOIN sys.partition_range_values rv ON rv.[function_id] = pf.[function_id] 17 | AND rv.[boundary_id] = p.[partition_number] 18 | WHERE p.[index_id] <=1 and t.[name] = '$name$' and s.[name] = '$schemaname$' 19 | >> -------------------------------------------------------------------------------- /athena-teradata/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-teradata-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-teradata-2022.47.1.jar 15 | 16 | # Command can be overwritten by providing a different command in the template directly. 17 | # No need to specify here (already defined in .yaml file because legacy and connections use different) 18 | -------------------------------------------------------------------------------- /athena-teradata/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Lambda Teradata Connector 2 | 3 | This connector enables Amazon Athena to access your Teradata databases. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-teradata.html). 6 | -------------------------------------------------------------------------------- /athena-teradata/src/main/java/com/amazonaws/athena/connectors/teradata/TeradataConstants.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-teradata 4 | * %% 5 | * Copyright (C) 2019 - 2022 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | 21 | package com.amazonaws.athena.connectors.teradata; 22 | 23 | public final class TeradataConstants 24 | { 25 | public static final String TERADATA_NAME = "teradata"; 26 | public static final String TERADATA_DRIVER_CLASS = "com.teradata.jdbc.TeraDriver"; 27 | public static final int TERADATA_DEFAULT_PORT = 1025; 28 | public static final String TERADATA_QUOTE_CHARACTER = "\""; 29 | 30 | private TeradataConstants() {} 31 | } 32 | -------------------------------------------------------------------------------- /athena-timestream/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-timestream-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-timestream-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-timestream/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Timestream Connector 2 | 3 | 4 | This connector enables Amazon Athena to communicate with AWS Timestream, making your timeseries data accessible via Amazon Athena. 5 | 6 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-timestream.html). 7 | -------------------------------------------------------------------------------- /athena-timestream/docs/img/timestream_glue_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-timestream/docs/img/timestream_glue_example.png -------------------------------------------------------------------------------- /athena-timestream/src/main/java/com/amazonaws/athena/connectors/timestream/TimestreamSchemaUtils.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-timestream 4 | * %% 5 | * Copyright (C) 2019 - 2020 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.timestream; 21 | 22 | import com.amazonaws.athena.connector.lambda.data.FieldBuilder; 23 | import org.apache.arrow.vector.types.pojo.Field; 24 | 25 | public class TimestreamSchemaUtils 26 | { 27 | private TimestreamSchemaUtils() {} 28 | 29 | public static Field makeField(String name, String type) 30 | { 31 | TimestreamType timeStreamType = TimestreamType.fromId(type); 32 | return FieldBuilder.newBuilder(name, timeStreamType.getMinorType().getType()).build(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /athena-timestream/src/main/resources/Timestream.stg: -------------------------------------------------------------------------------- 1 | test_template() ::= <% 2 | test template for validating file is accessible. 3 | %> 4 | 5 | /** 6 | *@UsedBy: DescribeTableQueryBuilder.java 7 | *@Description: This template is used to obtain basic column and type information about tables. 8 | *@param builder An Instance of DescribeTableQueryBuilder. 9 | *@return A query that be used to describe a TimeStream table. 10 | */ 11 | describe_table(builder) ::= <% 12 | DESCRIBE ""."" 13 | %> 14 | 15 | select_query(builder) ::= <% 16 | 17 | WITH<\ ><\n> 18 | t1 AS ( ) <\ ><\n> 19 | 20 | SELECT<\ ><\n> 21 | }> 22 | }><\ > 23 | <\n>FROM<\ ><\n> 24 | t1"".""<\ ><\n> 25 | 26 | WHERE<\ > 27 | }> 28 | AND }><\ > 29 | 30 | %> -------------------------------------------------------------------------------- /athena-tpcds/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-tpcds-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-tpcds-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-tpcds/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena TPC-DS Connector 2 | 3 | This connector enables Amazon Athena to communicate with a source of randomly generated TPC-DS data for use in benchmarking and functional testing of Athena Federation. We do _not_ recommend the use of this connector as an alternative to S3 based data lake performance tests. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-tpcds.html). 6 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/java/com/amazonaws/athena/connectors/tpcds/TPCDSCompositeHandler.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * athena-tpcds 4 | * %% 5 | * Copyright (C) 2019 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.tpcds; 21 | 22 | import com.amazonaws.athena.connector.lambda.connection.EnvironmentProperties; 23 | import com.amazonaws.athena.connector.lambda.handlers.CompositeHandler; 24 | 25 | public class TPCDSCompositeHandler 26 | extends CompositeHandler 27 | { 28 | public TPCDSCompositeHandler() 29 | { 30 | super(new TPCDSMetadataHandler(new EnvironmentProperties().createEnvironment()), new TPCDSRecordHandler(new EnvironmentProperties().createEnvironment())); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q1.sql: -------------------------------------------------------------------------------- 1 | WITH customer_total_return AS 2 | ( SELECT 3 | sr_customer_sk AS ctr_customer_sk, 4 | sr_store_sk AS ctr_store_sk, 5 | sum(sr_return_amt) AS ctr_total_return 6 | FROM store_returns[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ] 7 | WHERE sr_returned_date_sk = d_date_sk AND d_year = 2000 8 | GROUP BY sr_customer_sk, sr_store_sk) 9 | SELECT c_customer_id 10 | FROM customer_total_return ctr1, store[ TABLE_SUFFIX ], customer[ TABLE_SUFFIX ] 11 | WHERE ctr1.ctr_total_return > 12 | (SELECT avg(ctr_total_return) * 1.2 13 | FROM customer_total_return ctr2 14 | WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk) 15 | AND s_store_sk = ctr1.ctr_store_sk 16 | AND s_state = 'TN' 17 | AND ctr1.ctr_customer_sk = c_customer_sk 18 | ORDER BY c_customer_id 19 | LIMIT 100 20 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q12.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_desc, 3 | i_category, 4 | i_class, 5 | i_current_price, 6 | sum(ws_ext_sales_price) AS itemrevenue, 7 | sum(ws_ext_sales_price) * 100 / sum(sum(ws_ext_sales_price)) 8 | OVER 9 | (PARTITION BY i_class) AS revenueratio 10 | FROM 11 | web_sales[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ] 12 | WHERE 13 | ws_item_sk = i_item_sk 14 | AND i_category IN ('Sports', 'Books', 'Home') 15 | AND ws_sold_date_sk = d_date_sk 16 | AND CAST(d_date as DATE) BETWEEN cast('1999-02-22' AS DATE) 17 | AND (cast('1999-02-22' AS DATE) + INTERVAL '30' day) 18 | GROUP BY 19 | i_item_id, i_item_desc, i_category, i_class, i_current_price 20 | ORDER BY 21 | i_category, i_class, i_item_id, i_item_desc, revenueratio 22 | LIMIT 100 23 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q15.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | ca_zip, 3 | sum(cs_sales_price) 4 | FROM catalog_sales[ TABLE_SUFFIX ], customer[ TABLE_SUFFIX ], customer_address[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ] 5 | WHERE cs_bill_customer_sk = c_customer_sk 6 | AND c_current_addr_sk = ca_address_sk 7 | AND (substr(ca_zip, 1, 5) IN ('85669', '86197', '88274', '83405', '86475', 8 | '85392', '85460', '80348', '81792') 9 | OR ca_state IN ('CA', 'WA', 'GA') 10 | OR cs_sales_price > 500) 11 | AND cs_sold_date_sk = d_date_sk 12 | AND d_qoy = 2 AND d_year = 2001 13 | GROUP BY ca_zip 14 | ORDER BY ca_zip 15 | LIMIT 100 16 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q16.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | count(DISTINCT cs_order_number) AS "order count ", 3 | sum(cs_ext_ship_cost) AS "total shipping cost ", 4 | sum(cs_net_profit) AS "total net profit " 5 | FROM 6 | catalog_sales cs1, date_dim, customer_address, call_center 7 | WHERE 8 | CAST(d_date as DATE) BETWEEN CAST('2002-02-01' AS DATE) AND (CAST('2002-02-01' AS DATE) + INTERVAL '60' day) 9 | AND cs1.cs_ship_date_sk = d_date_sk 10 | AND cs1.cs_ship_addr_sk = ca_address_sk 11 | AND ca_state = 'GA' 12 | AND cs1.cs_call_center_sk = cc_call_center_sk 13 | AND cc_county IN 14 | ('Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County') 15 | AND EXISTS(SELECT * 16 | FROM catalog_sales cs2 17 | WHERE cs1.cs_order_number = cs2.cs_order_number 18 | AND cs1.cs_warehouse_sk <> cs2.cs_warehouse_sk) 19 | AND NOT EXISTS(SELECT * 20 | FROM catalog_returns cr1 21 | WHERE cs1.cs_order_number = cr1.cr_order_number) 22 | ORDER BY count(DISTINCT cs_order_number) 23 | LIMIT 100 24 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q18.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_id, 3 | ca_country, 4 | ca_state, 5 | ca_county, 6 | avg(cast(cs_quantity AS DECIMAL(12, 2))) agg1, 7 | avg(cast(cs_list_price AS DECIMAL(12, 2))) agg2, 8 | avg(cast(cs_coupon_amt AS DECIMAL(12, 2))) agg3, 9 | avg(cast(cs_sales_price AS DECIMAL(12, 2))) agg4, 10 | avg(cast(cs_net_profit AS DECIMAL(12, 2))) agg5, 11 | avg(cast(c_birth_year AS DECIMAL(12, 2))) agg6, 12 | avg(cast(cd1.cd_dep_count AS DECIMAL(12, 2))) agg7 13 | FROM catalog_sales[ TABLE_SUFFIX ], customer_demographics[ TABLE_SUFFIX ] cd1, 14 | customer_demographics[ TABLE_SUFFIX ] cd2, customer[ TABLE_SUFFIX ], customer_address[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ] 15 | WHERE cs_sold_date_sk = d_date_sk AND 16 | cs_item_sk = i_item_sk AND 17 | cs_bill_cdemo_sk = cd1.cd_demo_sk AND 18 | cs_bill_customer_sk = c_customer_sk AND 19 | cd1.cd_gender = 'F' AND 20 | cd1.cd_education_status = 'Unknown' AND 21 | c_current_cdemo_sk = cd2.cd_demo_sk AND 22 | c_current_addr_sk = ca_address_sk AND 23 | c_birth_month IN (1, 6, 8, 9, 12, 2) AND 24 | d_year = 1998 AND 25 | ca_state IN ('MS', 'IN', 'ND', 'OK', 'NM', 'VA', 'MS') 26 | GROUP BY ROLLUP (i_item_id, ca_country, ca_state, ca_county) 27 | ORDER BY ca_country, ca_state, ca_county, i_item_id 28 | LIMIT 100 29 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q19.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_brand_id brand_id, 3 | i_brand brand, 4 | i_manufact_id, 5 | i_manufact, 6 | sum(ss_ext_sales_price) ext_price 7 | FROM date_dim[ TABLE_SUFFIX ], store_sales[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], customer[ TABLE_SUFFIX ], customer_address[ TABLE_SUFFIX ], store[ TABLE_SUFFIX ] 8 | WHERE d_date_sk = ss_sold_date_sk 9 | AND ss_item_sk = i_item_sk 10 | AND i_manager_id = 8 11 | AND d_moy = 11 12 | AND d_year = 1998 13 | AND ss_customer_sk = c_customer_sk 14 | AND c_current_addr_sk = ca_address_sk 15 | AND substr(ca_zip, 1, 5) <> substr(s_zip, 1, 5) 16 | AND ss_store_sk = s_store_sk 17 | GROUP BY i_brand, i_brand_id, i_manufact_id, i_manufact 18 | ORDER BY ext_price DESC, brand, brand_id, i_manufact_id, i_manufact 19 | LIMIT 100 20 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q20.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_desc, 3 | i_category, 4 | i_class, 5 | i_current_price, 6 | sum(cs_ext_sales_price) AS itemrevenue, 7 | sum(cs_ext_sales_price) * 100 / sum(sum(cs_ext_sales_price)) 8 | OVER 9 | (PARTITION BY i_class) AS revenueratio 10 | FROM catalog_sales[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ] 11 | WHERE cs_item_sk = i_item_sk 12 | AND i_category IN ('Sports', 'Books', 'Home') 13 | AND cs_sold_date_sk = d_date_sk 14 | AND CAST(d_date as DATE) BETWEEN cast('1999-02-22' AS DATE) 15 | AND (cast('1999-02-22' AS DATE) + INTERVAL '30' day) 16 | GROUP BY i_item_id, i_item_desc, i_category, i_class, i_current_price 17 | ORDER BY i_category, i_class, i_item_id, i_item_desc, revenueratio 18 | LIMIT 100 19 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q21.sql: -------------------------------------------------------------------------------- 1 | SELECT * 2 | FROM ( 3 | SELECT 4 | w_warehouse_name, 5 | i_item_id, 6 | sum(CASE WHEN (cast(d_date AS DATE) < cast('2000-03-11' AS DATE)) 7 | THEN inv_quantity_on_hand 8 | ELSE 0 END) AS inv_before, 9 | sum(CASE WHEN (cast(d_date AS DATE) >= cast('2000-03-11' AS DATE)) 10 | THEN inv_quantity_on_hand 11 | ELSE 0 END) AS inv_after 12 | FROM inventory[ TABLE_SUFFIX ], warehouse[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ] 13 | WHERE i_current_price BETWEEN 0.99 AND 1.49 14 | AND i_item_sk = inv_item_sk 15 | AND inv_warehouse_sk = w_warehouse_sk 16 | AND inv_date_sk = d_date_sk 17 | AND CAST(d_date as DATE) BETWEEN (cast('2000-03-11' AS DATE) - INTERVAL '30' day) 18 | AND (cast('2000-03-11' AS DATE) + INTERVAL '30' day) 19 | GROUP BY w_warehouse_name, i_item_id) x 20 | WHERE (CASE WHEN inv_before > 0 21 | THEN inv_after / inv_before 22 | ELSE NULL 23 | END) BETWEEN 2.0 / 3.0 AND 3.0 / 2.0 24 | ORDER BY w_warehouse_name, i_item_id 25 | LIMIT 100 -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q22.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_product_name, 3 | i_brand, 4 | i_class, 5 | i_category, 6 | avg(inv_quantity_on_hand) qoh 7 | FROM inventory[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], warehouse[ TABLE_SUFFIX ] 8 | WHERE inv_date_sk = d_date_sk 9 | AND inv_item_sk = i_item_sk 10 | AND inv_warehouse_sk = w_warehouse_sk 11 | AND d_month_seq BETWEEN 1200 AND 1200 + 11 12 | GROUP BY ROLLUP (i_product_name, i_brand, i_class, i_category) 13 | ORDER BY qoh, i_product_name, i_brand, i_class, i_category 14 | LIMIT 100 15 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q24a.sql: -------------------------------------------------------------------------------- 1 | WITH ssales AS 2 | (SELECT 3 | c_last_name, 4 | c_first_name, 5 | s_store_name, 6 | ca_state, 7 | s_state, 8 | i_color, 9 | i_current_price, 10 | i_manager_id, 11 | i_units, 12 | i_size, 13 | sum(ss_net_paid) netpaid 14 | FROM store_sales[ TABLE_SUFFIX ], store_returns[ TABLE_SUFFIX ], store[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], customer[ TABLE_SUFFIX ], customer_address[ TABLE_SUFFIX ] 15 | WHERE ss_ticket_number = sr_ticket_number 16 | AND ss_item_sk = sr_item_sk 17 | AND ss_customer_sk = c_customer_sk 18 | AND ss_item_sk = i_item_sk 19 | AND ss_store_sk = s_store_sk 20 | AND c_birth_country = upper(ca_country) 21 | AND s_zip = ca_zip 22 | AND s_market_id = 8 23 | GROUP BY c_last_name, c_first_name, s_store_name, ca_state, s_state, i_color, 24 | i_current_price, i_manager_id, i_units, i_size) 25 | SELECT 26 | c_last_name, 27 | c_first_name, 28 | s_store_name, 29 | sum(netpaid) paid 30 | FROM ssales 31 | WHERE i_color = 'pale' 32 | GROUP BY c_last_name, c_first_name, s_store_name 33 | HAVING sum(netpaid) > (SELECT 0.05 * avg(netpaid) 34 | FROM ssales) -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q24b.sql: -------------------------------------------------------------------------------- 1 | WITH ssales AS 2 | (SELECT 3 | c_last_name, 4 | c_first_name, 5 | s_store_name, 6 | ca_state, 7 | s_state, 8 | i_color, 9 | i_current_price, 10 | i_manager_id, 11 | i_units, 12 | i_size, 13 | sum(ss_net_paid) netpaid 14 | FROM store_sales[ TABLE_SUFFIX ], store_returns[ TABLE_SUFFIX ], store[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], customer[ TABLE_SUFFIX ], customer_address[ TABLE_SUFFIX ] 15 | WHERE ss_ticket_number = sr_ticket_number 16 | AND ss_item_sk = sr_item_sk 17 | AND ss_customer_sk = c_customer_sk 18 | AND ss_item_sk = i_item_sk 19 | AND ss_store_sk = s_store_sk 20 | AND c_birth_country = upper(ca_country) 21 | AND s_zip = ca_zip 22 | AND s_market_id = 8 23 | GROUP BY c_last_name, c_first_name, s_store_name, ca_state, s_state, 24 | i_color, i_current_price, i_manager_id, i_units, i_size) 25 | SELECT 26 | c_last_name, 27 | c_first_name, 28 | s_store_name, 29 | sum(netpaid) paid 30 | FROM ssales 31 | WHERE i_color = 'chiffon' 32 | GROUP BY c_last_name, c_first_name, s_store_name 33 | HAVING sum(netpaid) > (SELECT 0.05 * avg(netpaid) 34 | FROM ssales) 35 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q25.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_id, 3 | i_item_desc, 4 | s_store_id, 5 | s_store_name, 6 | sum(ss_net_profit) AS store_sales_profit, 7 | sum(sr_net_loss) AS store_returns_loss, 8 | sum(cs_net_profit) AS catalog_sales_profit 9 | FROM 10 | store_sales[ TABLE_SUFFIX ], store_returns[ TABLE_SUFFIX ], catalog_sales[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ] d1, 11 | date_dim[ TABLE_SUFFIX ] d2, date_dim[ TABLE_SUFFIX ] d3, store[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ] 12 | WHERE 13 | d1.d_moy = 4 14 | AND d1.d_year = 2001 15 | AND d1.d_date_sk = ss_sold_date_sk 16 | AND i_item_sk = ss_item_sk 17 | AND s_store_sk = ss_store_sk 18 | AND ss_customer_sk = sr_customer_sk 19 | AND ss_item_sk = sr_item_sk 20 | AND ss_ticket_number = sr_ticket_number 21 | AND sr_returned_date_sk = d2.d_date_sk 22 | AND d2.d_moy BETWEEN 4 AND 10 23 | AND d2.d_year = 2001 24 | AND sr_customer_sk = cs_bill_customer_sk 25 | AND sr_item_sk = cs_item_sk 26 | AND cs_sold_date_sk = d3.d_date_sk 27 | AND d3.d_moy BETWEEN 4 AND 10 28 | AND d3.d_year = 2001 29 | GROUP BY 30 | i_item_id, i_item_desc, s_store_id, s_store_name 31 | ORDER BY 32 | i_item_id, i_item_desc, s_store_id, s_store_name 33 | LIMIT 100 34 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q26.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_id, 3 | avg(cs_quantity) agg1, 4 | avg(cs_list_price) agg2, 5 | avg(cs_coupon_amt) agg3, 6 | avg(cs_sales_price) agg4 7 | FROM catalog_sales[ TABLE_SUFFIX ], customer_demographics[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], promotion[ TABLE_SUFFIX ] 8 | WHERE cs_sold_date_sk = d_date_sk AND 9 | cs_item_sk = i_item_sk AND 10 | cs_bill_cdemo_sk = cd_demo_sk AND 11 | cs_promo_sk = p_promo_sk AND 12 | cd_gender = 'M' AND 13 | cd_marital_status = 'S' AND 14 | cd_education_status = 'College' AND 15 | (p_channel_email = 'N' OR p_channel_event = 'N') AND 16 | d_year = 2000 17 | GROUP BY i_item_id 18 | ORDER BY i_item_id 19 | LIMIT 100 20 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q27.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_id, 3 | s_state, 4 | grouping(s_state) g_state, 5 | avg(ss_quantity) agg1, 6 | avg(ss_list_price) agg2, 7 | avg(ss_coupon_amt) agg3, 8 | avg(ss_sales_price) agg4 9 | FROM store_sales[ TABLE_SUFFIX ], customer_demographics[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ], store[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ] 10 | WHERE ss_sold_date_sk = d_date_sk AND 11 | ss_item_sk = i_item_sk AND 12 | ss_store_sk = s_store_sk AND 13 | ss_cdemo_sk = cd_demo_sk AND 14 | cd_gender = 'M' AND 15 | cd_marital_status = 'S' AND 16 | cd_education_status = 'College' AND 17 | d_year = 2002 AND 18 | s_state IN ('TN', 'TN', 'TN', 'TN', 'TN', 'TN') 19 | GROUP BY ROLLUP (i_item_id, s_state) 20 | ORDER BY i_item_id, s_state 21 | LIMIT 100 -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q29.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_id, 3 | i_item_desc, 4 | s_store_id, 5 | s_store_name, 6 | sum(ss_quantity) AS store_sales_quantity, 7 | sum(sr_return_quantity) AS store_returns_quantity, 8 | sum(cs_quantity) AS catalog_sales_quantity 9 | FROM 10 | store_sales[ TABLE_SUFFIX ], store_returns[ TABLE_SUFFIX ], catalog_sales[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ] d1, date_dim[ TABLE_SUFFIX ] d2, 11 | date_dim[ TABLE_SUFFIX ] d3, store[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ] 12 | WHERE 13 | d1.d_moy = 9 14 | AND d1.d_year = 1999 15 | AND d1.d_date_sk = ss_sold_date_sk 16 | AND i_item_sk = ss_item_sk 17 | AND s_store_sk = ss_store_sk 18 | AND ss_customer_sk = sr_customer_sk 19 | AND ss_item_sk = sr_item_sk 20 | AND ss_ticket_number = sr_ticket_number 21 | AND sr_returned_date_sk = d2.d_date_sk 22 | AND d2.d_moy BETWEEN 9 AND 9 + 3 23 | AND d2.d_year = 1999 24 | AND sr_customer_sk = cs_bill_customer_sk 25 | AND sr_item_sk = cs_item_sk 26 | AND cs_sold_date_sk = d3.d_date_sk 27 | AND d3.d_year IN (1999, 1999 + 1, 1999 + 2) 28 | GROUP BY 29 | i_item_id, i_item_desc, s_store_id, s_store_name 30 | ORDER BY 31 | i_item_id, i_item_desc, s_store_id, s_store_name 32 | LIMIT 100 -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q3.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | dt.d_year, 3 | it.i_brand_id brand_id, 4 | it.i_brand brand, 5 | SUM(ss_ext_sales_price) sum_agg 6 | FROM date_dim[ TABLE_SUFFIX ] dt, store_sales[ TABLE_SUFFIX ] ss, item[ TABLE_SUFFIX ] it 7 | WHERE dt.d_date_sk = ss.ss_sold_date_sk 8 | AND ss.ss_item_sk = it.i_item_sk 9 | AND it.i_manufact_id = 128 10 | AND dt.d_moy = 11 11 | GROUP BY dt.d_year, it.i_brand, it.i_brand_id 12 | ORDER BY dt.d_year, sum_agg DESC, brand_id 13 | LIMIT 100 -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q30.sql: -------------------------------------------------------------------------------- 1 | WITH customer_total_return AS 2 | (SELECT 3 | wr_returning_customer_sk AS ctr_customer_sk, 4 | ca_state AS ctr_state, 5 | sum(wr_return_amt) AS ctr_total_return 6 | FROM web_returns, date_dim, customer_address 7 | WHERE wr_returned_date_sk = d_date_sk 8 | AND d_year = 2002 9 | AND wr_returning_addr_sk = ca_address_sk 10 | GROUP BY wr_returning_customer_sk, ca_state) 11 | SELECT 12 | c_customer_id, 13 | c_salutation, 14 | c_first_name, 15 | c_last_name, 16 | c_preferred_cust_flag, 17 | c_birth_day, 18 | c_birth_month, 19 | c_birth_year, 20 | c_birth_country, 21 | c_login, 22 | c_email_address, 23 | c_last_review_date, 24 | ctr_total_return 25 | FROM customer_total_return ctr1, customer_address, customer 26 | WHERE ctr1.ctr_total_return > (SELECT avg(ctr_total_return) * 1.2 27 | FROM customer_total_return ctr2 28 | WHERE ctr1.ctr_state = ctr2.ctr_state) 29 | AND ca_address_sk = c_current_addr_sk 30 | AND ca_state = 'GA' 31 | AND ctr1.ctr_customer_sk = c_customer_sk 32 | ORDER BY c_customer_id, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag 33 | , c_birth_day, c_birth_month, c_birth_year, c_birth_country, c_login, c_email_address 34 | , c_last_review_date, ctr_total_return 35 | LIMIT 100 36 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q32.sql: -------------------------------------------------------------------------------- 1 | SELECT 1 AS "excess discount amount " 2 | FROM 3 | catalog_sales, item, date_dim 4 | WHERE 5 | i_manufact_id = 977 6 | AND i_item_sk = cs_item_sk 7 | AND CAST(d_date as DATE) BETWEEN cast('2000-01-27' AS DATE) AND (cast('2000-01-27' AS DATE) + interval '90' day) 8 | AND d_date_sk = cs_sold_date_sk 9 | AND cs_ext_discount_amt > ( 10 | SELECT 1.3 * avg(cs_ext_discount_amt) 11 | FROM catalog_sales, date_dim 12 | WHERE cs_item_sk = i_item_sk 13 | AND CAST(d_date as DATE) BETWEEN cast('2000-01-27' AS DATE) AND (cast('2000-01-27' AS DATE) + interval '90' day) 14 | AND d_date_sk = cs_sold_date_sk) 15 | LIMIT 100 16 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q37.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_id, 3 | i_item_desc, 4 | i_current_price 5 | FROM item, inventory, date_dim, catalog_sales 6 | WHERE i_current_price BETWEEN 68 AND 68 + 30 7 | AND inv_item_sk = i_item_sk 8 | AND d_date_sk = inv_date_sk 9 | AND CAST(d_date as DATE) BETWEEN cast('2000-02-01' AS DATE) AND (cast('2000-02-01' AS DATE) + INTERVAL '60' day) 10 | AND i_manufact_id IN (677, 940, 694, 808) 11 | AND inv_quantity_on_hand BETWEEN 100 AND 500 12 | AND cs_item_sk = i_item_sk 13 | GROUP BY i_item_id, i_item_desc, i_current_price 14 | ORDER BY i_item_id 15 | LIMIT 100 16 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q39b.sql: -------------------------------------------------------------------------------- 1 | WITH inv AS 2 | (SELECT 3 | w_warehouse_name, 4 | w_warehouse_sk, 5 | i_item_sk, 6 | d_moy, 7 | stdev, 8 | mean, 9 | CASE mean 10 | WHEN 0 11 | THEN NULL 12 | ELSE stdev / mean END cov 13 | FROM (SELECT 14 | w_warehouse_name, 15 | w_warehouse_sk, 16 | i_item_sk, 17 | d_moy, 18 | stddev_samp(inv_quantity_on_hand) stdev, 19 | avg(inv_quantity_on_hand) mean 20 | FROM inventory, item, warehouse, date_dim 21 | WHERE inv_item_sk = i_item_sk 22 | AND inv_warehouse_sk = w_warehouse_sk 23 | AND inv_date_sk = d_date_sk 24 | AND d_year = 2001 25 | GROUP BY w_warehouse_name, w_warehouse_sk, i_item_sk, d_moy) foo 26 | WHERE CASE mean 27 | WHEN 0 28 | THEN 0 29 | ELSE stdev / mean END > 1) 30 | SELECT 31 | inv1.w_warehouse_sk, 32 | inv1.i_item_sk, 33 | inv1.d_moy, 34 | inv1.mean, 35 | inv1.cov, 36 | inv2.w_warehouse_sk, 37 | inv2.i_item_sk, 38 | inv2.d_moy, 39 | inv2.mean, 40 | inv2.cov 41 | FROM inv inv1, inv inv2 42 | WHERE inv1.i_item_sk = inv2.i_item_sk 43 | AND inv1.w_warehouse_sk = inv2.w_warehouse_sk 44 | AND inv1.d_moy = 1 45 | AND inv2.d_moy = 1 + 1 46 | AND inv1.cov > 1.5 47 | ORDER BY inv1.w_warehouse_sk, inv1.i_item_sk, inv1.d_moy, inv1.mean, inv1.cov 48 | , inv2.d_moy, inv2.mean, inv2.cov 49 | 50 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q40.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | w_state, 3 | i_item_id, 4 | sum(CASE WHEN (cast(d_date AS DATE) < cast('2000-03-11' AS DATE)) 5 | THEN cs_sales_price - coalesce(cr_refunded_cash, 0) 6 | ELSE 0 END) AS sales_before, 7 | sum(CASE WHEN (cast(d_date AS DATE) >= cast('2000-03-11' AS DATE)) 8 | THEN cs_sales_price - coalesce(cr_refunded_cash, 0) 9 | ELSE 0 END) AS sales_after 10 | FROM 11 | catalog_sales 12 | LEFT OUTER JOIN catalog_returns ON 13 | (cs_order_number = cr_order_number 14 | AND cs_item_sk = cr_item_sk) 15 | , warehouse, item, date_dim 16 | WHERE 17 | i_current_price BETWEEN 0.99 AND 1.49 18 | AND i_item_sk = cs_item_sk 19 | AND cs_warehouse_sk = w_warehouse_sk 20 | AND cs_sold_date_sk = d_date_sk 21 | AND CAST(d_date as DATE) BETWEEN (cast('2000-03-11' AS DATE) - INTERVAL '30' day) 22 | AND (cast('2000-03-11' AS DATE) + INTERVAL '30' day) 23 | GROUP BY w_state, i_item_id 24 | ORDER BY w_state, i_item_id 25 | LIMIT 100 26 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q42.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | dt.d_year, 3 | item[ TABLE_SUFFIX ].i_category_id, 4 | item[ TABLE_SUFFIX ].i_category, 5 | sum(ss_ext_sales_price) 6 | FROM date_dim[ TABLE_SUFFIX ] dt, store_sales[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ] 7 | WHERE dt.d_date_sk = store_sales[ TABLE_SUFFIX ].ss_sold_date_sk 8 | AND store_sales[ TABLE_SUFFIX ].ss_item_sk = item[ TABLE_SUFFIX ].i_item_sk 9 | AND item[ TABLE_SUFFIX ].i_manager_id = 1 10 | AND dt.d_moy = 11 11 | AND dt.d_year = 2000 12 | GROUP BY dt.d_year 13 | , item[ TABLE_SUFFIX ].i_category_id 14 | , item[ TABLE_SUFFIX ].i_category 15 | ORDER BY sum(ss_ext_sales_price) DESC, dt.d_year 16 | , item[ TABLE_SUFFIX ].i_category_id 17 | , item[ TABLE_SUFFIX ].i_category 18 | LIMIT 100 -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q43.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | s_store_name, 3 | s_store_id, 4 | sum(CASE WHEN (d_day_name = 'Sunday') 5 | THEN ss_sales_price 6 | ELSE NULL END) sun_sales, 7 | sum(CASE WHEN (d_day_name = 'Monday') 8 | THEN ss_sales_price 9 | ELSE NULL END) mon_sales, 10 | sum(CASE WHEN (d_day_name = 'Tuesday') 11 | THEN ss_sales_price 12 | ELSE NULL END) tue_sales, 13 | sum(CASE WHEN (d_day_name = 'Wednesday') 14 | THEN ss_sales_price 15 | ELSE NULL END) wed_sales, 16 | sum(CASE WHEN (d_day_name = 'Thursday') 17 | THEN ss_sales_price 18 | ELSE NULL END) thu_sales, 19 | sum(CASE WHEN (d_day_name = 'Friday') 20 | THEN ss_sales_price 21 | ELSE NULL END) fri_sales, 22 | sum(CASE WHEN (d_day_name = 'Saturday') 23 | THEN ss_sales_price 24 | ELSE NULL END) sat_sales 25 | FROM date_dim[ TABLE_SUFFIX ], store_sales[ TABLE_SUFFIX ], store[ TABLE_SUFFIX ] 26 | WHERE d_date_sk = ss_sold_date_sk AND 27 | s_store_sk = ss_store_sk AND 28 | s_gmt_offset = -5 AND 29 | d_year = 2000 30 | GROUP BY s_store_name, s_store_id 31 | ORDER BY s_store_name, s_store_id, sun_sales, mon_sales, tue_sales, wed_sales, 32 | thu_sales, fri_sales, sat_sales 33 | LIMIT 100 34 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q45.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | ca_zip, 3 | ca_city, 4 | sum(ws_sales_price) 5 | FROM web_sales, customer, customer_address, date_dim, item 6 | WHERE ws_bill_customer_sk = c_customer_sk 7 | AND c_current_addr_sk = ca_address_sk 8 | AND ws_item_sk = i_item_sk 9 | AND (substr(ca_zip, 1, 5) IN 10 | ('85669', '86197', '88274', '83405', '86475', '85392', '85460', '80348', '81792') 11 | OR 12 | i_item_id IN (SELECT i_item_id 13 | FROM item 14 | WHERE i_item_sk IN (2, 3, 5, 7, 11, 13, 17, 19, 23, 29) 15 | ) 16 | ) 17 | AND ws_sold_date_sk = d_date_sk 18 | AND d_qoy = 2 AND d_year = 2001 19 | GROUP BY ca_zip, ca_city 20 | ORDER BY ca_zip, ca_city 21 | LIMIT 100 22 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q46.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | c_last_name, 3 | c_first_name, 4 | ca_city, 5 | bought_city, 6 | ss_ticket_number, 7 | amt, 8 | profit 9 | FROM 10 | (SELECT 11 | ss_ticket_number, 12 | ss_customer_sk, 13 | ca_city bought_city, 14 | sum(ss_coupon_amt) amt, 15 | sum(ss_net_profit) profit 16 | FROM store_sales, date_dim, store, household_demographics, customer_address 17 | WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk 18 | AND store_sales.ss_store_sk = store.s_store_sk 19 | AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk 20 | AND store_sales.ss_addr_sk = customer_address.ca_address_sk 21 | AND (household_demographics.hd_dep_count = 4 OR 22 | household_demographics.hd_vehicle_count = 3) 23 | AND date_dim.d_dow IN (6, 0) 24 | AND date_dim.d_year IN (1999, 1999 + 1, 1999 + 2) 25 | AND store.s_city IN ('Fairview', 'Midway', 'Fairview', 'Fairview', 'Fairview') 26 | GROUP BY ss_ticket_number, ss_customer_sk, ss_addr_sk, ca_city) dn, customer, 27 | customer_address current_addr 28 | WHERE ss_customer_sk = c_customer_sk 29 | AND customer.c_current_addr_sk = current_addr.ca_address_sk 30 | AND current_addr.ca_city <> bought_city 31 | ORDER BY c_last_name, c_first_name, ca_city, bought_city, ss_ticket_number 32 | LIMIT 100 33 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q52.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | dt.d_year, 3 | item.i_brand_id brand_id, 4 | item.i_brand brand, 5 | sum(ss_ext_sales_price) ext_price 6 | FROM date_dim dt, store_sales, item 7 | WHERE dt.d_date_sk = store_sales.ss_sold_date_sk 8 | AND store_sales.ss_item_sk = item.i_item_sk 9 | AND item.i_manager_id = 1 10 | AND dt.d_moy = 11 11 | AND dt.d_year = 2000 12 | GROUP BY dt.d_year, item.i_brand, item.i_brand_id 13 | ORDER BY dt.d_year, ext_price DESC, brand_id 14 | LIMIT 100 15 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q55.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_brand_id brand_id, 3 | i_brand brand, 4 | sum(ss_ext_sales_price) ext_price 5 | FROM date_dim, store_sales, item 6 | WHERE d_date_sk = ss_sold_date_sk 7 | AND ss_item_sk = i_item_sk 8 | AND i_manager_id = 28 9 | AND d_moy = 11 10 | AND d_year = 1999 11 | GROUP BY i_brand, i_brand_id 12 | ORDER BY ext_price DESC, brand_id 13 | LIMIT 100 14 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q6.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | a.ca_state state, 3 | count(*) cnt 4 | FROM 5 | customer_address[ TABLE_SUFFIX ] a, customer[ TABLE_SUFFIX ] c, store_sales[ TABLE_SUFFIX ] s, date_dim[ TABLE_SUFFIX ] d, item[ TABLE_SUFFIX ] i 6 | WHERE a.ca_address_sk = c.c_current_addr_sk 7 | AND c.c_customer_sk = s.ss_customer_sk 8 | AND s.ss_sold_date_sk = d.d_date_sk 9 | AND s.ss_item_sk = i.i_item_sk 10 | AND d.d_month_seq = 11 | (SELECT DISTINCT (d_month_seq) 12 | FROM date_dim[ TABLE_SUFFIX ] 13 | WHERE d_year = 2000 AND d_moy = 1) 14 | AND i.i_current_price > 1.2 * 15 | (SELECT avg(j.i_current_price) 16 | FROM item[ TABLE_SUFFIX ] j 17 | WHERE j.i_category = i.i_category) 18 | GROUP BY a.ca_state 19 | HAVING count(*) >= 10 20 | ORDER BY cnt 21 | LIMIT 100 22 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q61.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | promotions, 3 | total, 4 | cast(promotions AS DECIMAL(15, 4)) / cast(total AS DECIMAL(15, 4)) * 100 5 | FROM 6 | (SELECT sum(ss_ext_sales_price) promotions 7 | FROM store_sales, store, promotion, date_dim, customer, customer_address, item 8 | WHERE ss_sold_date_sk = d_date_sk 9 | AND ss_store_sk = s_store_sk 10 | AND ss_promo_sk = p_promo_sk 11 | AND ss_customer_sk = c_customer_sk 12 | AND ca_address_sk = c_current_addr_sk 13 | AND ss_item_sk = i_item_sk 14 | AND ca_gmt_offset = -5 15 | AND i_category = 'Jewelry' 16 | AND (p_channel_dmail = 'Y' OR p_channel_email = 'Y' OR p_channel_tv = 'Y') 17 | AND s_gmt_offset = -5 18 | AND d_year = 1998 19 | AND d_moy = 11) promotional_sales, 20 | (SELECT sum(ss_ext_sales_price) total 21 | FROM store_sales, store, date_dim, customer, customer_address, item 22 | WHERE ss_sold_date_sk = d_date_sk 23 | AND ss_store_sk = s_store_sk 24 | AND ss_customer_sk = c_customer_sk 25 | AND ca_address_sk = c_current_addr_sk 26 | AND ss_item_sk = i_item_sk 27 | AND ca_gmt_offset = -5 28 | AND i_category = 'Jewelry' 29 | AND s_gmt_offset = -5 30 | AND d_year = 1998 31 | AND d_moy = 11) all_sales 32 | ORDER BY promotions, total 33 | LIMIT 100 34 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q62.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | substr(w_warehouse_name, 1, 20), 3 | sm_type, 4 | web_name, 5 | sum(CASE WHEN (ws_ship_date_sk - ws_sold_date_sk <= 30) 6 | THEN 1 7 | ELSE 0 END) AS "30 days ", 8 | sum(CASE WHEN (ws_ship_date_sk - ws_sold_date_sk > 30) AND 9 | (ws_ship_date_sk - ws_sold_date_sk <= 60) 10 | THEN 1 11 | ELSE 0 END) AS "31 - 60 days ", 12 | sum(CASE WHEN (ws_ship_date_sk - ws_sold_date_sk > 60) AND 13 | (ws_ship_date_sk - ws_sold_date_sk <= 90) 14 | THEN 1 15 | ELSE 0 END) AS "61 - 90 days ", 16 | sum(CASE WHEN (ws_ship_date_sk - ws_sold_date_sk > 90) AND 17 | (ws_ship_date_sk - ws_sold_date_sk <= 120) 18 | THEN 1 19 | ELSE 0 END) AS "91 - 120 days ", 20 | sum(CASE WHEN (ws_ship_date_sk - ws_sold_date_sk > 120) 21 | THEN 1 22 | ELSE 0 END) AS ">120 days " 23 | FROM 24 | web_sales, warehouse, ship_mode, web_site, date_dim 25 | WHERE 26 | d_month_seq BETWEEN 1200 AND 1200 + 11 27 | AND ws_ship_date_sk = d_date_sk 28 | AND ws_warehouse_sk = w_warehouse_sk 29 | AND ws_ship_mode_sk = sm_ship_mode_sk 30 | AND ws_web_site_sk = web_site_sk 31 | GROUP BY 32 | substr(w_warehouse_name, 1, 20), sm_type, web_name 33 | ORDER BY 34 | substr(w_warehouse_name, 1, 20), sm_type, web_name 35 | LIMIT 100 36 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q63.sql: -------------------------------------------------------------------------------- 1 | SELECT * 2 | FROM (SELECT 3 | i_manager_id, 4 | sum(ss_sales_price) sum_sales, 5 | avg(sum(ss_sales_price)) 6 | OVER (PARTITION BY i_manager_id) avg_monthly_sales 7 | FROM item 8 | , store_sales 9 | , date_dim 10 | , store 11 | WHERE ss_item_sk = i_item_sk 12 | AND ss_sold_date_sk = d_date_sk 13 | AND ss_store_sk = s_store_sk 14 | AND d_month_seq IN (1200, 1200 + 1, 1200 + 2, 1200 + 3, 1200 + 4, 1200 + 5, 1200 + 6, 1200 + 7, 15 | 1200 + 8, 1200 + 9, 1200 + 10, 1200 + 11) 16 | AND ((i_category IN ('Books', 'Children', 'Electronics') 17 | AND i_class IN ('personal', 'portable', 'refernece', 'self-help') 18 | AND i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 19 | 'exportiunivamalg #9', 'scholaramalgamalg #9')) 20 | OR (i_category IN ('Women', 'Music', 'Men') 21 | AND i_class IN ('accessories', 'classical', 'fragrances', 'pants') 22 | AND i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 23 | 'importoamalg #1'))) 24 | GROUP BY i_manager_id, d_moy) tmp1 25 | WHERE CASE WHEN avg_monthly_sales > 0 26 | THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales 27 | ELSE NULL END > 0.1 28 | ORDER BY i_manager_id 29 | , avg_monthly_sales 30 | , sum_sales 31 | LIMIT 100 32 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q65.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | s_store_name, 3 | i_item_desc, 4 | sc.revenue, 5 | i_current_price, 6 | i_wholesale_cost, 7 | i_brand 8 | FROM store, item, 9 | (SELECT 10 | ss_store_sk, 11 | avg(revenue) AS ave 12 | FROM 13 | (SELECT 14 | ss_store_sk, 15 | ss_item_sk, 16 | sum(ss_sales_price) AS revenue 17 | FROM store_sales, date_dim 18 | WHERE ss_sold_date_sk = d_date_sk AND d_month_seq BETWEEN 1176 AND 1176 + 11 19 | GROUP BY ss_store_sk, ss_item_sk) sa 20 | GROUP BY ss_store_sk) sb, 21 | (SELECT 22 | ss_store_sk, 23 | ss_item_sk, 24 | sum(ss_sales_price) AS revenue 25 | FROM store_sales, date_dim 26 | WHERE ss_sold_date_sk = d_date_sk AND d_month_seq BETWEEN 1176 AND 1176 + 11 27 | GROUP BY ss_store_sk, ss_item_sk) sc 28 | WHERE sb.ss_store_sk = sc.ss_store_sk AND 29 | sc.revenue <= 0.1 * sb.ave AND 30 | s_store_sk = sc.ss_store_sk AND 31 | i_item_sk = sc.ss_item_sk 32 | ORDER BY s_store_name, i_item_desc 33 | LIMIT 100 34 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q67.sql: -------------------------------------------------------------------------------- 1 | SELECT * 2 | FROM 3 | (SELECT 4 | i_category, 5 | i_class, 6 | i_brand, 7 | i_product_name, 8 | d_year, 9 | d_qoy, 10 | d_moy, 11 | s_store_id, 12 | sumsales, 13 | rank() 14 | OVER (PARTITION BY i_category 15 | ORDER BY sumsales DESC) rk 16 | FROM 17 | (SELECT 18 | i_category, 19 | i_class, 20 | i_brand, 21 | i_product_name, 22 | d_year, 23 | d_qoy, 24 | d_moy, 25 | s_store_id, 26 | sum(coalesce(ss_sales_price * ss_quantity, 0)) sumsales 27 | FROM store_sales, date_dim, store, item 28 | WHERE ss_sold_date_sk = d_date_sk 29 | AND ss_item_sk = i_item_sk 30 | AND ss_store_sk = s_store_sk 31 | AND d_month_seq BETWEEN 1200 AND 1200 + 11 32 | GROUP BY ROLLUP (i_category, i_class, i_brand, i_product_name, d_year, d_qoy, 33 | d_moy, s_store_id)) dw1) dw2 34 | WHERE rk <= 100 35 | ORDER BY 36 | i_category, i_class, i_brand, i_product_name, d_year, 37 | d_qoy, d_moy, s_store_id, sumsales, rk 38 | LIMIT 100 39 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q68.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | c_last_name, 3 | c_first_name, 4 | ca_city, 5 | bought_city, 6 | ss_ticket_number, 7 | extended_price, 8 | extended_tax, 9 | list_price 10 | FROM (SELECT 11 | ss_ticket_number, 12 | ss_customer_sk, 13 | ca_city bought_city, 14 | sum(ss_ext_sales_price) extended_price, 15 | sum(ss_ext_list_price) list_price, 16 | sum(ss_ext_tax) extended_tax 17 | FROM store_sales, date_dim, store, household_demographics, customer_address 18 | WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk 19 | AND store_sales.ss_store_sk = store.s_store_sk 20 | AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk 21 | AND store_sales.ss_addr_sk = customer_address.ca_address_sk 22 | AND date_dim.d_dom BETWEEN 1 AND 2 23 | AND (household_demographics.hd_dep_count = 4 OR 24 | household_demographics.hd_vehicle_count = 3) 25 | AND date_dim.d_year IN (1999, 1999 + 1, 1999 + 2) 26 | AND store.s_city IN ('Midway', 'Fairview') 27 | GROUP BY ss_ticket_number, ss_customer_sk, ss_addr_sk, ca_city) dn, 28 | customer, 29 | customer_address current_addr 30 | WHERE ss_customer_sk = c_customer_sk 31 | AND customer.c_current_addr_sk = current_addr.ca_address_sk 32 | AND current_addr.ca_city <> bought_city 33 | ORDER BY c_last_name, ss_ticket_number 34 | LIMIT 100 35 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q7.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_id, 3 | avg(ss_quantity) agg1, 4 | avg(ss_list_price) agg2, 5 | avg(ss_coupon_amt) agg3, 6 | avg(ss_sales_price) agg4 7 | FROM store_sales[ TABLE_SUFFIX ], customer_demographics[ TABLE_SUFFIX ], date_dim[ TABLE_SUFFIX ], item[ TABLE_SUFFIX ], promotion[ TABLE_SUFFIX ] 8 | WHERE ss_sold_date_sk = d_date_sk AND 9 | ss_item_sk = i_item_sk AND 10 | ss_cdemo_sk = cd_demo_sk AND 11 | ss_promo_sk = p_promo_sk AND 12 | cd_gender = 'M' AND 13 | cd_marital_status = 'S' AND 14 | cd_education_status = 'College' AND 15 | (p_channel_email = 'N' OR p_channel_event = 'N') AND 16 | d_year = 2000 17 | GROUP BY i_item_id 18 | ORDER BY i_item_id 19 | LIMIT 100 20 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q73.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | c_last_name, 3 | c_first_name, 4 | c_salutation, 5 | c_preferred_cust_flag, 6 | ss_ticket_number, 7 | cnt 8 | FROM 9 | (SELECT 10 | ss_ticket_number, 11 | ss_customer_sk, 12 | count(*) cnt 13 | FROM store_sales, date_dim, store, household_demographics 14 | WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk 15 | AND store_sales.ss_store_sk = store.s_store_sk 16 | AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk 17 | AND date_dim.d_dom BETWEEN 1 AND 2 18 | AND (household_demographics.hd_buy_potential = '>10000' OR 19 | household_demographics.hd_buy_potential = 'unknown') 20 | AND household_demographics.hd_vehicle_count > 0 21 | AND CASE WHEN household_demographics.hd_vehicle_count > 0 22 | THEN 23 | household_demographics.hd_dep_count / household_demographics.hd_vehicle_count 24 | ELSE NULL END > 1 25 | AND date_dim.d_year IN (1999, 1999 + 1, 1999 + 2) 26 | AND store.s_county IN ('Williamson County', 'Franklin Parish', 'Bronx County', 'Orange County') 27 | GROUP BY ss_ticket_number, ss_customer_sk) dj, customer 28 | WHERE ss_customer_sk = c_customer_sk 29 | AND cnt BETWEEN 1 AND 5 30 | ORDER BY cnt DESC 31 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q79.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | c_last_name, 3 | c_first_name, 4 | substr(s_city, 1, 30), 5 | ss_ticket_number, 6 | amt, 7 | profit 8 | FROM 9 | (SELECT 10 | ss_ticket_number, 11 | ss_customer_sk, 12 | store.s_city, 13 | sum(ss_coupon_amt) amt, 14 | sum(ss_net_profit) profit 15 | FROM store_sales, date_dim, store, household_demographics 16 | WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk 17 | AND store_sales.ss_store_sk = store.s_store_sk 18 | AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk 19 | AND (household_demographics.hd_dep_count = 6 OR 20 | household_demographics.hd_vehicle_count > 2) 21 | AND date_dim.d_dow = 1 22 | AND date_dim.d_year IN (1999, 1999 + 1, 1999 + 2) 23 | AND store.s_number_employees BETWEEN 200 AND 295 24 | GROUP BY ss_ticket_number, ss_customer_sk, ss_addr_sk, store.s_city) ms, customer 25 | WHERE ss_customer_sk = c_customer_sk 26 | ORDER BY c_last_name, c_first_name, substr(s_city, 1, 30), profit 27 | LIMIT 100 28 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q81.sql: -------------------------------------------------------------------------------- 1 | WITH customer_total_return AS 2 | (SELECT 3 | cr_returning_customer_sk AS ctr_customer_sk, 4 | ca_state AS ctr_state, 5 | sum(cr_return_amt_inc_tax) AS ctr_total_return 6 | FROM catalog_returns, date_dim, customer_address 7 | WHERE cr_returned_date_sk = d_date_sk 8 | AND d_year = 2000 9 | AND cr_returning_addr_sk = ca_address_sk 10 | GROUP BY cr_returning_customer_sk, ca_state ) 11 | SELECT 12 | c_customer_id, 13 | c_salutation, 14 | c_first_name, 15 | c_last_name, 16 | ca_street_number, 17 | ca_street_name, 18 | ca_street_type, 19 | ca_suite_number, 20 | ca_city, 21 | ca_county, 22 | ca_state, 23 | ca_zip, 24 | ca_country, 25 | ca_gmt_offset, 26 | ca_location_type, 27 | ctr_total_return 28 | FROM customer_total_return ctr1, customer_address, customer 29 | WHERE ctr1.ctr_total_return > (SELECT avg(ctr_total_return) * 1.2 30 | FROM customer_total_return ctr2 31 | WHERE ctr1.ctr_state = ctr2.ctr_state) 32 | AND ca_address_sk = c_current_addr_sk 33 | AND ca_state = 'GA' 34 | AND ctr1.ctr_customer_sk = c_customer_sk 35 | ORDER BY c_customer_id, c_salutation, c_first_name, c_last_name, ca_street_number, ca_street_name 36 | , ca_street_type, ca_suite_number, ca_city, ca_county, ca_state, ca_zip, ca_country, ca_gmt_offset 37 | , ca_location_type, ctr_total_return 38 | LIMIT 100 39 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q82.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_id, 3 | i_item_desc, 4 | i_current_price 5 | FROM item, inventory, date_dim, store_sales 6 | WHERE i_current_price BETWEEN 62 AND 62 + 30 7 | AND inv_item_sk = i_item_sk 8 | AND d_date_sk = inv_date_sk 9 | AND CAST(d_date as DATE) BETWEEN cast('2000-05-25' AS DATE) AND (cast('2000-05-25' AS DATE) + INTERVAL '60' day) 10 | AND i_manufact_id IN (129, 270, 821, 423) 11 | AND inv_quantity_on_hand BETWEEN 100 AND 500 12 | AND ss_item_sk = i_item_sk 13 | GROUP BY i_item_id, i_item_desc, i_current_price 14 | ORDER BY i_item_id 15 | LIMIT 100 16 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q84.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | c_customer_id AS customer_id, 3 | concat(c_last_name, ', ', c_first_name) AS customername 4 | FROM customer 5 | , customer_address 6 | , customer_demographics 7 | , household_demographics 8 | , income_band 9 | , store_returns 10 | WHERE ca_city = 'Edgewood' 11 | AND c_current_addr_sk = ca_address_sk 12 | AND ib_lower_bound >= 38128 13 | AND ib_upper_bound <= 38128 + 50000 14 | AND ib_income_band_sk = hd_income_band_sk 15 | AND cd_demo_sk = c_current_cdemo_sk 16 | AND hd_demo_sk = c_current_hdemo_sk 17 | AND sr_cdemo_sk = cd_demo_sk 18 | ORDER BY c_customer_id 19 | LIMIT 100 20 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q87.sql: -------------------------------------------------------------------------------- 1 | SELECT count(*) 2 | FROM ((SELECT DISTINCT 3 | c_last_name, 4 | c_first_name, 5 | d_date 6 | FROM store_sales, date_dim, customer 7 | WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk 8 | AND store_sales.ss_customer_sk = customer.c_customer_sk 9 | AND d_month_seq BETWEEN 1200 AND 1200 + 11) 10 | EXCEPT 11 | (SELECT DISTINCT 12 | c_last_name, 13 | c_first_name, 14 | d_date 15 | FROM catalog_sales, date_dim, customer 16 | WHERE catalog_sales.cs_sold_date_sk = date_dim.d_date_sk 17 | AND catalog_sales.cs_bill_customer_sk = customer.c_customer_sk 18 | AND d_month_seq BETWEEN 1200 AND 1200 + 11) 19 | EXCEPT 20 | (SELECT DISTINCT 21 | c_last_name, 22 | c_first_name, 23 | d_date 24 | FROM web_sales, date_dim, customer 25 | WHERE web_sales.ws_sold_date_sk = date_dim.d_date_sk 26 | AND web_sales.ws_bill_customer_sk = customer.c_customer_sk 27 | AND d_month_seq BETWEEN 1200 AND 1200 + 11) 28 | ) cool_cust 29 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q89.sql: -------------------------------------------------------------------------------- 1 | SELECT * 2 | FROM ( 3 | SELECT 4 | i_category, 5 | i_class, 6 | i_brand, 7 | s_store_name, 8 | s_company_name, 9 | d_moy, 10 | sum(ss_sales_price) sum_sales, 11 | avg(sum(ss_sales_price)) 12 | OVER 13 | (PARTITION BY i_category, i_brand, s_store_name, s_company_name) 14 | avg_monthly_sales 15 | FROM item, store_sales, date_dim, store 16 | WHERE ss_item_sk = i_item_sk AND 17 | ss_sold_date_sk = d_date_sk AND 18 | ss_store_sk = s_store_sk AND 19 | d_year IN (1999) AND 20 | ((i_category IN ('Books', 'Electronics', 'Sports') AND 21 | i_class IN ('computers', 'stereo', 'football')) 22 | OR (i_category IN ('Men', 'Jewelry', 'Women') AND 23 | i_class IN ('shirts', 'birdal', 'dresses'))) 24 | GROUP BY i_category, i_class, i_brand, 25 | s_store_name, s_company_name, d_moy) tmp1 26 | WHERE CASE WHEN (avg_monthly_sales <> 0) 27 | THEN (abs(sum_sales - avg_monthly_sales) / avg_monthly_sales) 28 | ELSE NULL END > 0.1 29 | ORDER BY sum_sales - avg_monthly_sales, s_store_name 30 | LIMIT 100 31 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q90.sql: -------------------------------------------------------------------------------- 1 | SELECT cast(amc AS DECIMAL(15, 4)) / cast(pmc AS DECIMAL(15, 4)) am_pm_ratio 2 | FROM (SELECT count(*) amc 3 | FROM web_sales, household_demographics, time_dim, web_page 4 | WHERE ws_sold_time_sk = time_dim.t_time_sk 5 | AND ws_ship_hdemo_sk = household_demographics.hd_demo_sk 6 | AND ws_web_page_sk = web_page.wp_web_page_sk 7 | AND time_dim.t_hour BETWEEN 8 AND 8 + 1 8 | AND household_demographics.hd_dep_count = 6 9 | AND web_page.wp_char_count BETWEEN 5000 AND 5200) at, 10 | (SELECT count(*) pmc 11 | FROM web_sales, household_demographics, time_dim, web_page 12 | WHERE ws_sold_time_sk = time_dim.t_time_sk 13 | AND ws_ship_hdemo_sk = household_demographics.hd_demo_sk 14 | AND ws_web_page_sk = web_page.wp_web_page_sk 15 | AND time_dim.t_hour BETWEEN 19 AND 19 + 1 16 | AND household_demographics.hd_dep_count = 6 17 | AND web_page.wp_char_count BETWEEN 5000 AND 5200) pt 18 | ORDER BY am_pm_ratio 19 | LIMIT 100 20 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q91.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | cc_call_center_id Call_Center, 3 | cc_name Call_Center_Name, 4 | cc_manager Manager, 5 | sum(cr_net_loss) Returns_Loss 6 | FROM 7 | call_center, catalog_returns, date_dim, customer, customer_address, 8 | customer_demographics, household_demographics 9 | WHERE 10 | cr_call_center_sk = cc_call_center_sk 11 | AND cr_returned_date_sk = d_date_sk 12 | AND cr_returning_customer_sk = c_customer_sk 13 | AND cd_demo_sk = c_current_cdemo_sk 14 | AND hd_demo_sk = c_current_hdemo_sk 15 | AND ca_address_sk = c_current_addr_sk 16 | AND d_year = 1998 17 | AND d_moy = 11 18 | AND ((cd_marital_status = 'M' AND cd_education_status = 'Unknown') 19 | OR (cd_marital_status = 'W' AND cd_education_status = 'Advanced Degree')) 20 | AND hd_buy_potential LIKE 'Unknown%' 21 | AND ca_gmt_offset = -7 22 | GROUP BY cc_call_center_id, cc_name, cc_manager, cd_marital_status, cd_education_status 23 | ORDER BY sum(cr_net_loss) DESC 24 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q92.sql: -------------------------------------------------------------------------------- 1 | SELECT sum(ws_ext_discount_amt) AS "Excess Discount Amount " 2 | FROM web_sales, item, date_dim 3 | WHERE i_manufact_id = 350 4 | AND i_item_sk = ws_item_sk 5 | AND CAST(d_date as DATE) BETWEEN cast('2000-01-27' AS DATE) AND (cast('2000-01-27' AS DATE) + INTERVAL '90' day) 6 | AND d_date_sk = ws_sold_date_sk 7 | AND ws_ext_discount_amt > 8 | ( 9 | SELECT 1.3 * avg(ws_ext_discount_amt) 10 | FROM web_sales, date_dim 11 | WHERE ws_item_sk = i_item_sk 12 | AND CAST(d_date as DATE) BETWEEN cast('2000-01-27' AS DATE) AND (cast('2000-01-27' AS DATE) + INTERVAL '90' day) 13 | AND d_date_sk = ws_sold_date_sk 14 | ) 15 | ORDER BY sum(ws_ext_discount_amt) 16 | LIMIT 100 17 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q93.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | ss_customer_sk, 3 | sum(act_sales) sumsales 4 | FROM (SELECT 5 | ss_item_sk, 6 | ss_ticket_number, 7 | ss_customer_sk, 8 | CASE WHEN sr_return_quantity IS NOT NULL 9 | THEN (ss_quantity - sr_return_quantity) * ss_sales_price 10 | ELSE (ss_quantity * ss_sales_price) END act_sales 11 | FROM store_sales 12 | LEFT OUTER JOIN store_returns 13 | ON (sr_item_sk = ss_item_sk AND sr_ticket_number = ss_ticket_number) 14 | , 15 | reason 16 | WHERE sr_reason_sk = r_reason_sk AND r_reason_desc = 'reason 28') t 17 | GROUP BY ss_customer_sk 18 | ORDER BY sumsales, ss_customer_sk 19 | LIMIT 100 20 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q94.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | count(DISTINCT ws_order_number) AS "order count ", 3 | sum(ws_ext_ship_cost) AS "total shipping cost ", 4 | sum(ws_net_profit) AS "total net profit " 5 | FROM 6 | web_sales ws1, date_dim, customer_address, web_site 7 | WHERE 8 | CAST(d_date as DATE) BETWEEN CAST('1999-02-01' AS DATE) AND 9 | (CAST('1999-02-01' AS DATE) + INTERVAL '60' day) 10 | AND ws1.ws_ship_date_sk = d_date_sk 11 | AND ws1.ws_ship_addr_sk = ca_address_sk 12 | AND ca_state = 'IL' 13 | AND ws1.ws_web_site_sk = web_site_sk 14 | AND web_company_name = 'pri' 15 | AND EXISTS(SELECT * 16 | FROM web_sales ws2 17 | WHERE ws1.ws_order_number = ws2.ws_order_number 18 | AND ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk) 19 | AND NOT EXISTS(SELECT * 20 | FROM web_returns wr1 21 | WHERE ws1.ws_order_number = wr1.wr_order_number) 22 | ORDER BY count(DISTINCT ws_order_number) 23 | LIMIT 100 24 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q95.sql: -------------------------------------------------------------------------------- 1 | WITH ws_wh AS 2 | (SELECT 3 | ws1.ws_order_number, 4 | ws1.ws_warehouse_sk wh1, 5 | ws2.ws_warehouse_sk wh2 6 | FROM web_sales ws1, web_sales ws2 7 | WHERE ws1.ws_order_number = ws2.ws_order_number 8 | AND ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk) 9 | SELECT 10 | count(DISTINCT ws_order_number) AS "order count ", 11 | sum(ws_ext_ship_cost) AS "total shipping cost ", 12 | sum(ws_net_profit) AS "total net profit " 13 | FROM 14 | web_sales ws1, date_dim, customer_address, web_site 15 | WHERE 16 | CAST(d_date as DATE) BETWEEN CAST('1999-02-01' AS DATE) AND 17 | (CAST('1999-02-01' AS DATE) + INTERVAL '60' DAY) 18 | AND ws1.ws_ship_date_sk = d_date_sk 19 | AND ws1.ws_ship_addr_sk = ca_address_sk 20 | AND ca_state = 'IL' 21 | AND ws1.ws_web_site_sk = web_site_sk 22 | AND web_company_name = 'pri' 23 | AND ws1.ws_order_number IN (SELECT ws_order_number 24 | FROM ws_wh) 25 | AND ws1.ws_order_number IN (SELECT wr_order_number 26 | FROM web_returns, ws_wh 27 | WHERE wr_order_number = ws_wh.ws_order_number) 28 | ORDER BY count(DISTINCT ws_order_number) 29 | LIMIT 100 30 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q96.sql: -------------------------------------------------------------------------------- 1 | SELECT count(*) 2 | FROM store_sales, household_demographics, time_dim, store 3 | WHERE ss_sold_time_sk = time_dim.t_time_sk 4 | AND ss_hdemo_sk = household_demographics.hd_demo_sk 5 | AND ss_store_sk = s_store_sk 6 | AND time_dim.t_hour = 20 7 | AND time_dim.t_minute >= 30 8 | AND household_demographics.hd_dep_count = 7 9 | AND store.s_store_name = 'ese' 10 | ORDER BY count(*) 11 | LIMIT 100 12 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q97.sql: -------------------------------------------------------------------------------- 1 | WITH ssci AS ( 2 | SELECT 3 | ss_customer_sk customer_sk, 4 | ss_item_sk item_sk 5 | FROM store_sales, date_dim 6 | WHERE ss_sold_date_sk = d_date_sk 7 | AND d_month_seq BETWEEN 1200 AND 1200 + 11 8 | GROUP BY ss_customer_sk, ss_item_sk), 9 | csci AS ( 10 | SELECT 11 | cs_bill_customer_sk customer_sk, 12 | cs_item_sk item_sk 13 | FROM catalog_sales, date_dim 14 | WHERE cs_sold_date_sk = d_date_sk 15 | AND d_month_seq BETWEEN 1200 AND 1200 + 11 16 | GROUP BY cs_bill_customer_sk, cs_item_sk) 17 | SELECT 18 | sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL 19 | THEN 1 20 | ELSE 0 END) store_only, 21 | sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL 22 | THEN 1 23 | ELSE 0 END) catalog_only, 24 | sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL 25 | THEN 1 26 | ELSE 0 END) store_and_catalog 27 | FROM ssci 28 | FULL OUTER JOIN csci ON (ssci.customer_sk = csci.customer_sk 29 | AND ssci.item_sk = csci.item_sk) 30 | LIMIT 100 31 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q98.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | i_item_desc, 3 | i_category, 4 | i_class, 5 | i_current_price, 6 | sum(ss_ext_sales_price) AS itemrevenue, 7 | sum(ss_ext_sales_price) * 100 / sum(sum(ss_ext_sales_price)) 8 | OVER 9 | (PARTITION BY i_class) AS revenueratio 10 | FROM 11 | store_sales, item, date_dim 12 | WHERE 13 | ss_item_sk = i_item_sk 14 | AND i_category IN ('Sports', 'Books', 'Home') 15 | AND ss_sold_date_sk = d_date_sk 16 | AND CAST(d_date as DATE) BETWEEN cast('1999-02-22' AS DATE) 17 | AND (cast('1999-02-22' AS DATE) + INTERVAL '30' day) 18 | GROUP BY 19 | i_item_id, i_item_desc, i_category, i_class, i_current_price 20 | ORDER BY 21 | i_category, i_class, i_item_id, i_item_desc, revenueratio 22 | -------------------------------------------------------------------------------- /athena-tpcds/src/main/resources/queries/q99.sql: -------------------------------------------------------------------------------- 1 | SELECT 2 | substr(w_warehouse_name, 1, 20), 3 | sm_type, 4 | cc_name, 5 | sum(CASE WHEN (cs_ship_date_sk - cs_sold_date_sk <= 30) 6 | THEN 1 7 | ELSE 0 END) AS "30 days ", 8 | sum(CASE WHEN (cs_ship_date_sk - cs_sold_date_sk > 30) AND 9 | (cs_ship_date_sk - cs_sold_date_sk <= 60) 10 | THEN 1 11 | ELSE 0 END) AS "31 - 60 days ", 12 | sum(CASE WHEN (cs_ship_date_sk - cs_sold_date_sk > 60) AND 13 | (cs_ship_date_sk - cs_sold_date_sk <= 90) 14 | THEN 1 15 | ELSE 0 END) AS "61 - 90 days ", 16 | sum(CASE WHEN (cs_ship_date_sk - cs_sold_date_sk > 90) AND 17 | (cs_ship_date_sk - cs_sold_date_sk <= 120) 18 | THEN 1 19 | ELSE 0 END) AS "91 - 120 days ", 20 | sum(CASE WHEN (cs_ship_date_sk - cs_sold_date_sk > 120) 21 | THEN 1 22 | ELSE 0 END) AS ">120 days " 23 | FROM 24 | catalog_sales, warehouse, ship_mode, call_center, date_dim 25 | WHERE 26 | d_month_seq BETWEEN 1200 AND 1200 + 11 27 | AND cs_ship_date_sk = d_date_sk 28 | AND cs_warehouse_sk = w_warehouse_sk 29 | AND cs_ship_mode_sk = sm_ship_mode_sk 30 | AND cs_call_center_sk = cc_call_center_sk 31 | GROUP BY 32 | substr(w_warehouse_name, 1, 20), sm_type, cc_name 33 | ORDER BY substr(w_warehouse_name, 1, 20), sm_type, cc_name 34 | LIMIT 100 35 | -------------------------------------------------------------------------------- /athena-udfs/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-udfs-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-udfs-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-vertica/Dockerfile: -------------------------------------------------------------------------------- 1 | # Argument for Java version, defaulting to 11 2 | ARG JAVA_VERSION=11 3 | # Use the specified version of Java 4 | FROM public.ecr.aws/lambda/java:${JAVA_VERSION} 5 | 6 | # Argument for Java tool options, defaulting to an empty string 7 | ARG JAVA_TOOL_OPTIONS="" 8 | # Set the JAVA_TOOL_OPTIONS environment variable for Java 17 9 | ENV JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS} 10 | 11 | # Copy function code and runtime dependencies from Maven layout 12 | COPY target/athena-vertica-2022.47.1.jar ${LAMBDA_TASK_ROOT} 13 | # Unpack the jar 14 | RUN jar xf athena-vertica-2022.47.1.jar 15 | 16 | # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) 17 | # No need to specify here (already defined in .yaml file) -------------------------------------------------------------------------------- /athena-vertica/README.md: -------------------------------------------------------------------------------- 1 | # Amazon Athena Vertica Connector 2 | 3 | This connector enables Amazon Athena to communicate with your Vertica Database instance(s), making your Vertica data accessible via SQL. 4 | 5 | Documentation has moved [here](https://docs.aws.amazon.com/athena/latest/ug/connectors-vertica.html). 6 | -------------------------------------------------------------------------------- /athena-vertica/av.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/athena-vertica/av.jpg -------------------------------------------------------------------------------- /athena-vertica/src/main/java/com/amazonaws/athena/connectors/vertica/VerticaEnvironmentProperties.java: -------------------------------------------------------------------------------- 1 | /*- 2 | * #%L 3 | * Amazon Athena Query Federation SDK 4 | * %% 5 | * Copyright (C) 2019 - 2024 Amazon Web Services 6 | * %% 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * #L% 19 | */ 20 | package com.amazonaws.athena.connectors.vertica; 21 | 22 | import com.amazonaws.athena.connectors.jdbc.JdbcEnvironmentProperties; 23 | 24 | import java.util.Map; 25 | 26 | public class VerticaEnvironmentProperties extends JdbcEnvironmentProperties 27 | { 28 | @Override 29 | protected String getConnectionStringPrefix(Map connectionProperties) 30 | { 31 | return "vertica://jdbc:vertica://"; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /athena-vertica/src/main/resources/Vertica.stg: -------------------------------------------------------------------------------- 1 | test_template() ::= <% 2 | test template for validating file is accessible. 3 | %> 4 | 5 | /** 6 | *@UsedBy: VerticaExportQueryBuilder.java 7 | *@Description: This template is used to obtain basic details to prepare the export to parquet statement. 8 | *@param builder An Instance of VerticaExportQueryBuilder. 9 | *@return A query which is used to Export the federated query resultset to a S3 bucket 10 | */ 11 | 12 | templateVerticaExportQuery(builder) ::= <% 13 | EXPORT TO PARQUET(directory = 's3:///', Compression='snappy', fileSizeMB=16, rowGroupSizeMB=16) AS SELECT FROM 14 | %> 15 | 16 | templateVerticaExportQPTQuery(builder) ::= <% 17 | EXPORT TO PARQUET(directory = 's3:///', Compression='snappy', fileSizeMB=16, rowGroupSizeMB=16) AS 18 | %> 19 | 20 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | codecov: 2 | # Documentation: https://docs.codecov.com/docs/codecovyml-reference#codecov 3 | # Always Validate the file before submitting a PR as follows: 4 | # curl --data-binary @codecov.yml https://codecov.io/validate 5 | token: ${{ secrets.CODECOV_TOKEN }} 6 | branch: master 7 | coverage: 8 | precision: 2 9 | round: down 10 | range: "70...100" #https://docs.codecov.com/docs/coverage-configuration#section-range 11 | status: 12 | #https://docs.codecov.com/docs/commit-status 13 | project: 14 | default: 15 | target: auto 16 | patch: 17 | default: 18 | target: auto 19 | threshold: 50% # Meaning this will be half of the required total coverage precentage 20 | 21 | 22 | -------------------------------------------------------------------------------- /docs/img/athena_federation_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/docs/img/athena_federation_demo.png -------------------------------------------------------------------------------- /docs/img/athena_federation_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/docs/img/athena_federation_flow.png -------------------------------------------------------------------------------- /docs/img/athena_federation_summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/docs/img/athena_federation_summary.png -------------------------------------------------------------------------------- /docs/img/hbase_glue_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/docs/img/hbase_glue_example.png -------------------------------------------------------------------------------- /tools/config_json_validator.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import glob 4 | from pathlib import Path 5 | 6 | # set working directory to root dir 7 | root_dir = Path(__file__).parent.parent 8 | os.chdir(root_dir) 9 | 10 | file_paths = glob.glob('**/**/test-config.json') 11 | 12 | def remove_comments_from_json(file): 13 | with open(file) as f: 14 | lines = f.readlines() 15 | formatted_lines = [] 16 | for line in lines: 17 | formatted_lines.append(line.split('/*')[0]) 18 | return '\n'.join(formatted_lines) 19 | 20 | print(f'Found {len(file_paths)} config files') 21 | for file in file_paths: 22 | if os.path.exists(file): 23 | json_string_without_comments = remove_comments_from_json(file) 24 | try: 25 | json.loads(json_string_without_comments) 26 | except Exception as e: 27 | print(f'Encoutered json parsing error while reading {file}. Error: \n{e}') 28 | print(f'We had parsed:\n{json_string_without_comments}') 29 | print('Finished parsing all test-config files.') 30 | -------------------------------------------------------------------------------- /validation_testing/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu 2 | 3 | RUN apt update -y && apt install -y tar gzip unzip wget less groff vim git python3 python3-pip unixodbc-dev curl jq 4 | 5 | RUN pip3 install boto3 6 | 7 | RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - 8 | RUN apt install -y aptitude # needed to resolve version conflicts from changing the source for node above 9 | RUN apt install -y nodejs 10 | RUN aptitude install -y npm 11 | 12 | RUN wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -O /tmp/awscli-exe-linux-x86_64.zip && \ 13 | unzip /tmp/awscli-exe-linux-x86_64.zip -d /tmp/awscli && \ 14 | /tmp/awscli/aws/install 15 | 16 | 17 | RUN wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip -O /tmp/aws-sam-cli-linux-x86_64.zip && \ 18 | unzip /tmp/aws-sam-cli-linux-x86_64.zip -d /tmp/sam-installation && \ 19 | /tmp/sam-installation/install 20 | -------------------------------------------------------------------------------- /validation_testing/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | SCRIPT_PATH=$(dirname $(readlink -f $0)) 3 | 4 | cd $SCRIPT_PATH 5 | 6 | docker image build -t federation-validation-testing . 7 | 8 | -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/ATHENA_INFRA_SPINUP_ROOT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-athena-query-federation/a98915cc0704480531f54c6a117ca4131098970b/validation_testing/cdk_federation_infra_provisioning/ATHENA_INFRA_SPINUP_ROOT -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/app/README.md: -------------------------------------------------------------------------------- 1 | # Federation Infra Spin-up CDK Tool 2 | 3 | Commands: 4 | 5 | `npm run build` compiles 6 | `npm run cdk synth` makes cloudformation templates 7 | `npm run cdk deploy` deploys the stack 8 | 9 | -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/app/glue_scripts/dynamodb.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from awsglue.transforms import * 3 | from awsglue.utils import getResolvedOptions 4 | from pyspark.context import SparkContext 5 | from awsglue.context import GlueContext 6 | from awsglue.job import Job 7 | 8 | args = getResolvedOptions(sys.argv, ['JOB_NAME', 's3_full_prefix', 'tpcds_table_name']) 9 | 10 | sc = SparkContext() 11 | glueContext = GlueContext(sc) 12 | spark = glueContext.spark_session 13 | job = Job(glueContext) 14 | job.init(args['JOB_NAME'], args) 15 | 16 | def process_single_table(table_name): 17 | s3_node = glueContext.create_dynamic_frame_from_options( 18 | connection_type="s3", 19 | format="parquet", 20 | connection_options = {'paths': [f'{args["s3_full_prefix"]}/{table_name}']} 21 | ) 22 | 23 | glueContext.write_dynamic_frame_from_options( 24 | frame=s3_node, 25 | connection_type='dynamodb', 26 | connection_options={ 27 | 'dynamodb.output.tableName': table_name, 28 | }) 29 | 30 | process_single_table(args["tpcds_table_name"]) 31 | 32 | job.commit() 33 | 34 | -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/app/glue_scripts/mysql.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from awsglue.transforms import * 3 | from awsglue.utils import getResolvedOptions 4 | from pyspark.context import SparkContext 5 | from awsglue.context import GlueContext 6 | from awsglue.job import Job 7 | 8 | args = getResolvedOptions(sys.argv, ['JOB_NAME', 's3_full_prefix', 'db_url', 'username', 'password', 'tpcds_table_name']) 9 | 10 | sc = SparkContext() 11 | glueContext = GlueContext(sc) 12 | spark = glueContext.spark_session 13 | job = Job(glueContext) 14 | job.init(args['JOB_NAME'], args) 15 | 16 | def process_single_table(table_name): 17 | s3_node = glueContext.create_dynamic_frame_from_options( 18 | connection_type="s3", 19 | format="parquet", 20 | connection_options = {'paths': [f'{args["s3_full_prefix"]}/{table_name}']} 21 | ) 22 | 23 | glueContext.write_dynamic_frame_from_options( 24 | frame=s3_node, 25 | connection_type='mysql', 26 | connection_options={ 27 | 'url': args['db_url'], 28 | 'dbtable': table_name, 29 | 'user': args['username'], 30 | 'password': args['password'] 31 | }) 32 | 33 | process_single_table(args["tpcds_table_name"]) 34 | 35 | job.commit() 36 | 37 | -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/app/glue_scripts/mysql_create_case_insensitive_data.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import pymysql 3 | import pymysql.cursors 4 | from awsglue.utils import getResolvedOptions 5 | 6 | args = getResolvedOptions(sys.argv, 7 | ['db_url', 8 | 'username', 9 | 'password']) 10 | 11 | connection = pymysql.connect(host=args['db_url'], user=args['username'], password=args['password']) 12 | cursor = connection.cursor() 13 | 14 | cursor.execute('CREATE DATABASE camelCaseTest') 15 | cursor.execute('USE camelCaseTest') 16 | cursor.execute('CREATE TABLE camelCase (ID int)') 17 | cursor.execute('INSERT INTO camelCase VALUES (5)') 18 | cursor.execute('CREATE TABLE UPPERCASE (ID int)') 19 | cursor.execute('INSERT INTO UPPERCASE VALUES (7)') 20 | 21 | cursor.execute('CREATE DATABASE UPPERCASETEST') 22 | cursor.execute('USE UPPERCASETEST') 23 | cursor.execute('CREATE TABLE camelCase (ID int)') 24 | cursor.execute('INSERT INTO camelCase VALUES (4)') 25 | cursor.execute('CREATE TABLE UPPERCASE (ID int)') 26 | cursor.execute('INSERT INTO UPPERCASE VALUES (6)') 27 | 28 | -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/app/glue_scripts/redshift.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from awsglue.transforms import * 3 | from awsglue.utils import getResolvedOptions 4 | from pyspark.context import SparkContext 5 | from awsglue.context import GlueContext 6 | from awsglue.job import Job 7 | 8 | args = getResolvedOptions(sys.argv, ['JOB_NAME', 's3_full_prefix', 'db_url', 'username', 'password', 'redshiftTmpDir', 'tpcds_table_name']) 9 | 10 | sc = SparkContext() 11 | glueContext = GlueContext(sc) 12 | spark = glueContext.spark_session 13 | job = Job(glueContext) 14 | job.init(args['JOB_NAME'], args) 15 | 16 | def process_single_table(table_name): 17 | s3_node = glueContext.create_dynamic_frame_from_options( 18 | connection_type="s3", 19 | format="parquet", 20 | connection_options = {'paths': [f'{args["s3_full_prefix"]}/{table_name}']} 21 | ) 22 | 23 | glueContext.write_dynamic_frame_from_options( 24 | frame=s3_node, 25 | connection_type='redshift', 26 | connection_options={ 27 | 'url': args['db_url'], 28 | 'dbtable': "public."+table_name, 29 | 'user': args['username'], 30 | 'password': args['password'], 31 | 'redshiftTmpDir': args['redshiftTmpDir'] 32 | }) 33 | 34 | process_single_table(args["tpcds_table_name"]) 35 | 36 | job.commit() 37 | -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/app/lib/stacks/stack-props.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from 'aws-cdk-lib'; 2 | 3 | export interface FederationStackProps extends cdk.StackProps { 4 | readonly test_size_gigabytes: number; 5 | readonly s3_path: string; // should be maintained via env var 6 | readonly spill_bucket: string; 7 | readonly tpcds_tables: string[]; 8 | readonly password: string; // should be maintained via env var 9 | readonly connector_yaml_path: string; 10 | } 11 | 12 | -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "app", 3 | "version": "0.1.0", 4 | "bin": { 5 | "app": "bin/app.js" 6 | }, 7 | "scripts": { 8 | "build": "rm -rf dist; tsc", 9 | "watch": "tsc -w", 10 | "test": "jest", 11 | "cdk": "cdk" 12 | }, 13 | "devDependencies": { 14 | "@types/jest": "^29.4.0", 15 | "@types/node": "18.11.18", 16 | "aws-cdk": "2.178.2", 17 | "jest": "^29.4.1", 18 | "ts-jest": "^29.0.5", 19 | "ts-node": "^10.9.1" 20 | }, 21 | "dependencies": { 22 | "@aws-cdk/aws-glue-alpha": "2.130.0-alpha.0", 23 | "@aws-cdk/aws-redshift-alpha": "2.130.0-alpha.0", 24 | "aws-cdk-lib": "2.177.0", 25 | "dotenv": "^16.0.3", 26 | "source-map-support": "^0.5.21", 27 | "typescript": "4.9.5" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /validation_testing/cdk_federation_infra_provisioning/app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "commonjs", 5 | "lib": [ 6 | "es2020" 7 | ], 8 | "outDir": "dist/", 9 | "declaration": true, 10 | "strict": true, 11 | "noImplicitAny": true, 12 | "strictNullChecks": true, 13 | "noImplicitThis": true, 14 | "alwaysStrict": true, 15 | "noUnusedLocals": false, 16 | "noUnusedParameters": false, 17 | "noImplicitReturns": true, 18 | "noFallthroughCasesInSwitch": false, 19 | "inlineSourceMap": true, 20 | "inlineSources": true, 21 | "experimentalDecorators": true, 22 | "strictPropertyInitialization": false, 23 | "resolveJsonModule": true, 24 | "esModuleInterop": true, 25 | "typeRoots": [ 26 | "./node_modules/@types" 27 | ] 28 | }, 29 | "exclude": [ 30 | "node_modules", 31 | "cdk.out" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /validation_testing/cleanup.sh: -------------------------------------------------------------------------------- 1 | CONNECTOR_NAME=$1 2 | VALIDATION_TESTING_ROOT=$REPOSITORY_ROOT/validation_testing 3 | RELEASE_TESTS_EXIT_CODE=$? 4 | 5 | # Glue attaches ENIs to the VPC subnet, if there is one, in order to connect to the VPC, and then will issue a delete of them later, but if they aren't finished deleting by the time we invoke cdk destroy, 6 | # CFN will not know about the resources and not be able to delete the stack. So, we proactively look for and delete ENIs attached to glue ourselves first 7 | aws ec2 describe-subnets --filters "Name=tag:Name,Values=${CONNECTOR_NAME}CdkStack*" | jq ".Subnets[].SubnetId" | tr -d '"' \ 8 | | xargs -n 1 -I {} aws ec2 describe-network-interfaces --filters "Name=subnet-id,Values={}" | jq ".NetworkInterfaces[] | select(.Description | startswith(\"Attached to Glue\")) | .NetworkInterfaceId" | tr -d '"' \ 9 | | xargs -I {} aws ec2 delete-network-interface --network-interface-id {} 10 | 11 | # once that is done, we can delete our CDK stack. 12 | cd $(dirname $(find . -name ATHENA_INFRA_SPINUP_ROOT))/app; 13 | # cannot use --force because npm is stripping the flags, so pipe yes through 14 | yes | npm run cdk destroy ${CONNECTOR_NAME}CdkStack; 15 | 16 | echo "FINISHED CLEANING UP RESOURCES FOR ${CONNECTOR_NAME}." 17 | 18 | echo "FINISHED RELEASE TESTS FOR ${CONNECTOR_NAME}." 19 | 20 | exit $RELEASE_TESTS_EXIT_CODE -------------------------------------------------------------------------------- /validation_testing/run_glue.sh: -------------------------------------------------------------------------------- 1 | CONNECTOR_NAME=$1 2 | VALIDATION_TESTING_ROOT=$REPOSITORY_ROOT/validation_testing 3 | 4 | # cd back to validation root 5 | cd $VALIDATION_TESTING_ROOT 6 | 7 | # now we run the glue jobs that the CDK stack created 8 | # If there is any output to glue_job_synchronous_execution.py, we will exit this script with a failure code. 9 | # The 2>&1 lets us pipe both stdout and stderr to grep, as opposed to just the stdout. https://stackoverflow.com/questions/818255/what-does-21-mean 10 | echo "Starting glue jobs..." 11 | aws glue list-jobs --max-results 100 \ 12 | | jq ".JobNames[] | select(startswith(\"${CONNECTOR_NAME}gluejob\"))" \ 13 | | xargs -I{} python3 scripts/glue_job_synchronous_execution.py {} 2>&1 \ 14 | | grep -q '.' && exit 1 15 | 16 | echo "FINISHED RUNNING GLUE JOBS FOR ${CONNECTOR_NAME}." -------------------------------------------------------------------------------- /validation_testing/run_tests.sh: -------------------------------------------------------------------------------- 1 | CONNECTOR_NAME=$1 2 | VALIDATION_TESTING_ROOT=$REPOSITORY_ROOT/validation_testing 3 | 4 | CONNECTOR_LAMBDA_ARN=$(aws lambda get-function --function-name $CONNECTOR_NAME-cdk-deployed | jq ".Configuration.FunctionArn" | tr -d '"') # trim quotes from the json string output 5 | python3 scripts/exec_release_test_queries.py $CONNECTOR_NAME $RESULTS_LOCATION $CONNECTOR_LAMBDA_ARN 6 | RELEASE_TESTS_EXIT_CODE=$? 7 | echo "FINISHED RUNNING TESTS FOR ${CONNECTOR_NAME}, exit code was $RELEASE_TESTS_EXIT_CODE." --------------------------------------------------------------------------------