Не удается подключить redshift из моего приложения springboot с помощью JPA

#spring-boot #jpa #spring-data-jpa #amazon-redshift

#весенняя загрузка #jpa #spring-data-jpa #amazon-redshift

Вопрос:

я работаю над приложением Springboot, и мне нужно сохранить данные в redshift с помощью spring-boot-starter-data-jpa.

Но я не могу установить соединение между redshift и моим приложением springboot.

Вот моя зависимость от pom.xml:

  <dependency>
            <groupId>com.amazon.redshift</groupId>
            <artifactId>redshift-jdbc42</artifactId>
            <version>1.2.43.1067</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.3.7.RELEASE</version>
        </dependency>
 

My Application.properties

 spring.datasource.url=jdbc:redshift://hostaddress
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.amazon.redshift.jdbc.Driver

spring.jpa.hibernate.ddl-auto = create
 

Мой класс модели Java:

 @Entity
@Table(schema = "public", name = "SampleModel")
public class SampleModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    private int year;

    private int month;

    private BigDecimal price;

    private BigDecimal total;
}
 

Трассировка стека исключений:

 2021-01-04 19:00:53.378  INFO 5152 --- [           main] org.neo4j.ogm.metadata.DomainInfo        : Building interface class map for 32 classes
2021-01-04 19:00:53.390  INFO 5152 --- [           main] org.neo4j.ogm.metadata.DomainInfo        : Post-processing complete
2021-01-04 19:00:55.768  INFO 5152 --- [         task-1] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Driver does not support get/set network timeout for connections. ([Amazon][JDBC](10220) Driver does not support this optional feature.)
2021-01-04 19:00:55.797  INFO 5152 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2021-01-04 19:00:57.056  INFO 5152 --- [         task-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL81Dialect
2021-01-04 19:00:57.450 ERROR 5152 --- [         task-1] o.h.e.j.e.internal.JdbcEnvironmentImpl   : Could not fetch the SequenceInformation from the database

java.sql.SQLException: [Amazon](500310) Invalid operation: relation "information_schema.sequences" does not exist;
    at com.amazon.redshift.client.messages.inbound.ErrorResponse.toErrorException(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.redshift.client.PGMessagingContext.handleErrorResponse(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.redshift.client.PGMessagingContext.handleMessage(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.jdbc.communications.InboundMessagesPipeline.getNextMessageOfClass(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.redshift.client.PGMessagingContext.doMoveToNextClass(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.redshift.client.PGMessagingContext.moveThroughMetadata(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.redshift.client.PGMessagingContext.getNoData(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.redshift.client.PGClient.directExecuteExtraMetadataWithMessage(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.redshift.dataengine.PGQueryExecutor$CallableExecuteTask.call(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at com.amazon.redshift.dataengine.PGQueryExecutor$CallableExecuteTask.call(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
Caused by: com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: relation "information_schema.sequences" does not exist;
    ... 13 common frames omitted

2021-01-04 19:00:57.588  INFO 5152 --- [         task-1] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2021-01-04 19:00:57.594  INFO 5152 --- [         task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
 

Кто-нибудь сталкивался с этой проблемой или знает, как решить эту проблему?

Ответ №1:

С вашим подключением все в порядке — вы подключились успешно. Но ваше приложение пытается считывать данные из information_schema.sequences таблицы, которая не существует в Redshift.

Похоже, у вас есть объекты JPA с идентификаторами, привязанными к последовательностям, и вы используете диалект PostgreSQL. Ваше приложение попытается инициализировать объекты путем чтения / создания последовательностей, но Redshift не поддерживает последовательности.

Я не уверен, чего вы пытаетесь достичь, но я не думаю, что это хорошая идея иметь отображение ORM поверх Redshift DB (вероятно, именно поэтому для Redshift нет диалекта гибернации).