【问题标题】:Java sdk for copying to Redshift用于复制到 Redshift 的 Java sdk
【发布时间】:2013-08-30 04:38:24
【问题描述】:

是否可以通过 java jdbc 连接从 S3 到 Redshift 触发复制命令?

示例: 从 's3://' CREDENTIALS 'aws_access_key_id=xxxxxxx;aws_secret_access_key=xxxxxxxxx' 复制测试

【问题讨论】:

  • 是的。你试过了,有错误吗?
  • 当然支持。有什么问题?
  • 你是怎么做到的?任何链接。尝试做同样的事情

标签: amazon-web-services amazon-s3 amazon-redshift


【解决方案1】:

是的,试试下面的代码

String dbURL = "jdbc:postgresql://x.y.us-east-1.redshift.amazonaws.com:5439/dev";
String MasterUsername = "userame";
String MasterUserPassword = "password";

           Connection conn = null;
            Statement stmt = null;
            try{
               //Dynamically load postgresql driver at runtime.
               Class.forName("org.postgresql.Driver");


               System.out.println("Connecting to database...");
               Properties props = new Properties();


               props.setProperty("user", MasterUsername);
               props.setProperty("password", MasterUserPassword);
               conn = DriverManager.getConnection(dbURL, props);
               stmt = conn.createStatement();
               String sql="copy test from 's3://' CREDENTIALS     'aws_access_key_id=xxxxxxx;aws_secret_access_key=xxxxxxxxx'"
                int j = stmt.executeUpdate(sql);

                stmt.close();
               conn.close();
            }catch(Exception ex){
               //For convenience, handle all errors here.
               ex.printStackTrace();
            }

【讨论】:

    【解决方案2】:

    Sandesh 的回答非常好,但它使用 PostgreSql 驱动程序。 AWS 提供 Redshift 驱动,优于 PostgreSql 驱动。 其余的事情将保持不变。我希望这些信息可以对其他人有所帮助。

    1)JDBC Driver 将从 org.postgresql.Driver 更改为 com.amazon.redshift.jdbcXX.Driver,其中 XX 是 Redshift 驱动程序的版本。例如42.

    2)Jdbc url 将从postgreSQL 更改为redshift。

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class RedShiftJDBC {
        public static void main(String[] args) {
    
            Connection conn = null;
            Statement statement = null;
            try {
                //Make sure to choose appropriate Redshift Jdbc driver and its jar in classpath
                Class.forName("com.amazon.redshift.jdbc42.Driver");
                Properties props = new Properties();
                props.setProperty("user", "username***");
                props.setProperty("password", "password****");
    
                System.out.println("\n\nconnecting to database...\n\n");
                //In case you are using postgreSQL jdbc driver.
    
                conn = DriverManager.getConnection("jdbc:redshift://********url-to-redshift.redshift.amazonaws.com:5439/example-database", props);
    
                System.out.println("\n\nConnection made!\n\n");
    
                statement = conn.createStatement();
    
                String command = "COPY my_table from 's3://path/to/csv/example.csv' CREDENTIALS 'aws_access_key_id=******;aws_secret_access_key=********' CSV DELIMITER ',' ignoreheader 1";
    
                System.out.println("\n\nExecuting...\n\n");
    
                statement.executeUpdate(command);
                //you must need to commit, if you realy want to have data copied.
                conn.commit();
                System.out.println("\n\nThats all copy using simple JDBC.\n\n");
                statement.close();
                conn.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多