Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support AWS Redshift cloud data warehouse in QGIS #272

Open
reflectored opened this issue May 5, 2023 · 4 comments
Open

Support AWS Redshift cloud data warehouse in QGIS #272

reflectored opened this issue May 5, 2023 · 4 comments

Comments

@reflectored
Copy link

reflectored commented May 5, 2023

QGIS Enhancement: Support AWS Redshift cloud data warehouse in QGIS

Date 2023/05/05

Author Alexey Karandashev (@reflectored)

Contact lexkar at amazon dot de

maintainer @reflectored

Version QGIS 3.X

Summary

Amazon Redshift is a fully managed, petabyte-scale data warehouse service in the cloud that supports spatial types and functions defined by OGC Simple Feature Access Standard. AWS Redshift is available as a free trial.

Redshift enables the customer to analyze (spatial) data across warehouses, operational databases and data lakes, as well as creating and deploying machine learning models. Redshift customers that would like to visualize and work with the sheer amount of the data using QGIS currently require additional intermediate steps to visualize a limited amount of the data in QGIS.

We would like to provide the QGIS Redshift support to our current and future customers. QGIS exposure to Redshift customers will bring new users to QGIS.

Proposed Solution

We would like to add a new provider for AWS Redshift to QGIS. I have prepared a pull request for that.

I have looked into providing AWS Redshift support as a plugin. AWS Redshift driver requires a deeper integration, equivalent to other database providers in QGIS e.g. PostGIS, to achieve the same level of experience for our customers.

AWS is willing to provide support, AWS credits (for the CI Redshift provider tests) and everything that is necessary.

Affected Files

See the PR for a list of files.

Backwards Compatibility

I don't expect any backward compatibility issues.

Votes

reflectored pushed a commit to reflectored/QGIS that referenced this issue Jun 1, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jun 1, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jun 2, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jun 2, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jun 2, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jun 2, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jun 13, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 18, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 19, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 19, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 19, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 20, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 20, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 20, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 25, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 25, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 27, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 28, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 28, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 28, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 28, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 28, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 28, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
reflectored pushed a commit to reflectored/QGIS that referenced this issue Jul 31, 2023
…and the original pull request for the AWS Redshift driver qgis#53018.

  - Move qgsConnectionPool_[connectionCreate|connectionDestroy|invalidateConnection|connectionIsValid|connectionToName] into their appropriate abstract classes and declare them as pure virual.
  - Implement the destructor and the functions above for all providers.
  - Refactor QgsPostgresConnPool[Group] to QgsSQLConnPool[Group], in order to reuse the template for future SQL based providers (AWS Redshift).
@nyalldawson
Copy link
Contributor

In the light of OSGeo/gdal#8238, I would be very reluctant to see this merged 👎

@reflectored if you want open source software to support Amazon services, it might be a good idea to first push Amazon to support open source software...

@haubourg
Copy link
Member

In the light of the previous experiences with proprietary and big vendors, where maintainers were forces to assume the maintenance and technical debt , I second Nyall's point of view.
Please raise upstream in your organization that we need official and financial support to QGIS's project to have our maintainers able to review this work.
Don't get me wrong, there is no anger. It is all about sustainability for us.

@reflectored
Copy link
Author

reflectored commented Aug 21, 2023

@haubourg I understand your concern for ownership of the AWS Redshift provider.

AWS Redshift is officially committed to maintain the driver, I'm the current owner of the driver in the team.

Moreover, as me and @nyalldawson discussed previously here, I committed to refactoring the existing PostgreSQL driver while eliminating existing technical debt (#1 #2 #3). These and further contributions to the PostgreSQL driver manifest my commitment to the AWS Redshift driver.

In addition, the AWS Redshift provider build and tests, similarly to PostgreSQL, can be turned off by a simple flag in CMake. The reward of attracting many new users to QGIS, who personally voiced their demand for an AWS Redshift driver to me, outweighs the low risk of the driver's abandonment.

Regarding the financial support, I kindly ask you to elaborate on that subject in private, please send me an email to lexkar@amazon.de.

@octave-ati
Copy link

Any news on this? This is for sure something that my company would be interested in using

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants