如何使用 AWS Redshift Data API 使用 Java 执行 SQL? [关闭]

Posted

技术标签:

【中文标题】如何使用 AWS Redshift Data API 使用 Java 执行 SQL? [关闭]【英文标题】:How to use AWS Redshift Data API to execute SQL using Java? [closed] 【发布时间】:2021-02-15 12:34:24 【问题描述】:

有人可以帮我获取使用 Java 和 Redshift Data API 执行 SQL 的确切代码吗?

我们将在 Spring Boot 中使用 Java 创建 API,它将执行请求正文中提供的 SQL。后端将是 Redshift。在这种情况下,希望使用 Redshift Data API 来执行 SQL 而不是 JDBCTemplate,因为 AWS 提供了很好的功能,例如异步调用,避免 DB 连接池等。

【问题讨论】:

【参考方案1】:

要执行 SQL 语句(不使用 Java JDBC API),您可以调用 executeStatement 方法并使用 ExecuteStatementRequest object's sql method 指定 SQL 语句(例如 - CREATE 语句)。

这是一个使用 Redshift Data API 运行 SQL 语句的示例,该语句创建了一个名为 work1 的表。

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.redshiftdata.RedshiftDataClient;
import software.amazon.awssdk.services.redshiftdata.model.ExecuteStatementRequest;
import software.amazon.awssdk.services.redshiftdata.model.ExecuteStatementResponse;
import software.amazon.awssdk.services.redshiftdata.model.RedshiftDataException;

public class CreateTable 

    public static void main(String[] args) 

        String clusterIdentifier = "redshift-items";
        String dataBase = "dev";
        String user = "root";

        String sqlStatement = "CREATE TABLE work1(\n" +
                "    idwork VARCHAR(45) PRIMARY KEY,\n" +
                "    date Date,\n" +
                "    description VARCHAR(400),\n" +
                "    guide VARCHAR(45),\n" +
                "    status VARCHAR(400),\n" +
                "    username VARCHAR(45),\n" +
                "    archive BOOLEAN\n" +
                ")  ;";

        Region region = Region.US_EAST_1;
        RedshiftDataClient redshiftDataClient = RedshiftDataClient.builder()
                .region(region)
                .build();

    try 
        ExecuteStatementRequest statementRequest = ExecuteStatementRequest.builder()
               .clusterIdentifier(clusterIdentifier)
                .dbUser(user)
                .database(dataBase)
                .sql(sqlStatement)
                .build();

        ExecuteStatementResponse resp = redshiftDataClient.executeStatement(statementRequest);
        System.out.println("The query id is " +resp.id());

     catch (RedshiftDataException e) 
        System.err.println(e.getMessage());
        System.exit(1);
    



这行得通,我可以在 Redshift 控制台中查看表格:

对于 Java Data API V2,确保将此依赖项添加到 POM 文件中(如果您使用的是 Gradle 文件,请将其转换为 Gradle):

  <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>redshiftdata</artifactId>
   </dependency>

对于此示例,凭据位于凭据文件中,该文件位于 Windows 上的 C:\Users\USERNAME.aws\credentials。

【讨论】:

基本上,我正在尝试使用以下 gradle 来使用 Async Redshift Data API:编译组:'com.amazonaws',名称:'aws-java-sdk-redshiftdataapi',版本:'1.11.934 ' 我无法理解,我应该如何进行身份验证才能使用 redshift data api?

以上是关于如何使用 AWS Redshift Data API 使用 Java 执行 SQL? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

AWS:通过使用 amazon-data-pipeline 将数据从 S3 传输到 Redshift 来实现除 COPY 之外的其他功能

Google Data Studio 目前可以连接到 AWS RDS 或 Redshift 吗?

NLTK Data 可以安装在 AWS Redshift 环境中吗?

如何使用 AWS Redshift 执行 Bash 脚本

如何使用 aws unload 命令将数据从 AWS Redshift 卸载到 s3?

为 AWS Data Pipeline SqlActivity 指定 Redshift 架构,而不在 sql 脚本的开头添加“set search_path to ...”