Code Samples

Java code snippets to carry out common operations on e6data via JDBC Driver

Execute a Query

Code snippet to execute a query and get a result from e6data.

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class Main {

   public static void main(String[] args) throws SQLException, ClassNotFoundException {

       Class.forName("io.e6.jdbc.driver.E6Driver");
       Properties properties = new Properties();
       properties.put("user", "<USER>"); // copy the username from e6data cluster connection info page in the e6data console
       properties.put("password", "<PASSWORD"); // password is the Personal Access Token (PAT) generated in the e6data cluster connector tab

       String connectStr = "jdbc:e6data://<HOSTNAME>:<PORT>/database=<DATABASE>&catalog=<CATALOG_NAME>&secure=true&cluster-uuid=<CLUSTER UUID>";
       Connection connection = DriverManager.getConnection(connectStr, properties);

       Statement statement = connection.createStatement();
       ResultSet resultSet = statement.executeQuery("Select current_timestamp");

       ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
       while (resultSet.next()) {
           int columnCount = resultSetMetaData.getColumnCount();
           List<String> currentLine = new ArrayList<>();
           for (int i = 1; i <= columnCount; i++) {
               Object object = resultSet.getObject(i);
               if (object == null) {
                   currentLine.add("null");
               } else {
                   currentLine.add(object.toString());
               }

           }
           String value = String.join(" | ", currentLine);
           System.out.println(value);
       }

       resultSet.close();
       statement.close();
       connection.close();
   }
}

Get Query Time Metrics

The following code runs a query and returns the amount of time taken to execute the query in seconds.

import org.apache.commons.lang3.time.StopWatch;
import java.sql.*;
import java.util.*;

public class JDBCQueryTime {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

        Class.forName("io.e6.jdbc.driver.E6Driver");
        Properties properties = new Properties();
        properties.put("user", "<USER>"); // copy the username from e6data cluster connection info page in the e6data console
        properties.put("password", "<PASSWORD>"); // password is the Personal Access Token (PAT) generated in the e6data cluster connector tab

        String connectStr = "jdbc:e6data://<HOSTNAME>:<PORT>/database=<DATABASE>&catalog=<CATALOG_NAME>&secure=true&cluster-uuid=<CLUSTER UUID>";

        Connection connection = DriverManager.getConnection(connectStr, properties);

        Statement statement = connection.createStatement();
        StopWatch stopWatch = StopWatch.createStarted();
        ResultSet resultSet =  statement.executeQuery("<QUERY>"); // add the SQL query text here

        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
        while (resultSet.next()) {
            int columnCount = resultSetMetaData.getColumnCount();
            List<String> currentLine = new ArrayList<>();
            for (int i = 1; i <= columnCount; i++) {
                Object object = resultSet.getObject(i);
                if (object == null) {
                    currentLine.add("null");
                } else {
                    currentLine.add(object.toString());
                }

            }
            String value = String.join(" | ", currentLine);
            System.out.println(value);
        }
        stopWatch.stop();
        long TimeTaken = stopWatch.getTime();
        System.out.println("Time Taken in milliseconds: " + TimeTaken);

        resultSet.close();
        statement.close();
        connection.close();
    }
}

Use of Timestamps

To use timestamps in queries that are run using the JDBC driver the timezone must be set to UTC. e.g.:

 Timestamp ts_start = new Timestamp(
                ZonedDateTime.of(2020, 04, 07, 05, 26, 21, 0,
                        ZoneId.of("UTC")
                ).toInstant().toEpochMilli());
        Timestamp ts_end = new Timestamp(
                ZonedDateTime.of(2020, 04, 07, 05, 27, 07, 0,
                        ZoneId.of("UTC")
                ).toInstant().toEpochMilli());

        statement.setObject(1, ts_start);
        statement.setObject(2, ts_end);

        ResultSet resultSet = statement.executeQuery();

Advanced Use Case - Execute a Parameterized Query

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class Main {

   public static void main(String[] args) throws SQLException, ClassNotFoundException {

       Class.forName("io.e6.jdbc.driver.E6Driver");
       Properties properties = new Properties();
       properties.put("user", "<USER>"); // copy the username from e6data cluster connection info page in the e6data console
       properties.put("password", "<PASSWORD>"); // password is the Personal Access Token (PAT) generated in the e6data cluster connector tab

       String connectStr = "jdbc:e6data://<HOSTNAME>:<PORT>/database=<DATABASE>&catalog=<CATALOG_NAME>&secure=true&cluster-uuid=<CLUSTER UUID>"; // get the connection details from the e6data cluster connector tab
       Connection connection = DriverManager.getConnection(connectStr, properties);

       String sql = "select count(*) from date_dim where d_year between ? and ?";
       PreparedStatement statement = connection.prepareStatement(sql);

       statement.setObject(1, 2000);
       statement.setObject(2, 2001);

       ResultSet resultSet = statement.executeQuery();

       ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
       while (resultSet.next()) {
           int columnCount = resultSetMetaData.getColumnCount();
           List<String> currentLine = new ArrayList<>();
           for (int i = 1; i <= columnCount; i++) {
               Object object = resultSet.getObject(i);
               if (object == null) {
                   currentLine.add("null");
               } else {
                   currentLine.add(object.toString());
               }

           }
           String value = String.join(" | ", currentLine);
           System.out.println(value);
       }

       resultSet.close();
       statement.close();
       connection.close();
   }
}

Last updated

#930: Cross account hive GCP

Change request updated