All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.snowflake.ingest.example.IngestExampleHelper Maven / Gradle / Ivy

There is a newer version: 3.0.0
Show newest version
/*
 * Copyright (c) 2012-2017 Snowflake Computing Inc. All rights reserved.
 */

package net.snowflake.ingest.example;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Properties;
import java.util.concurrent.ThreadLocalRandom;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** Helper methods to connect to snowflake jdbc and run queries Created by vganesh on 5/19/17. */
public class IngestExampleHelper {
  // a logger for all of our needs in this class
  private static final Logger LOGGER = LoggerFactory.getLogger(IngestExampleHelper.class.getName());
  /**
   * Create directories if they don't exist under directoryPath.
   *
   * @param directoryPath
   * @throws IOException
   */
  public static void makeLocalDirectory(String directoryPath) throws IOException {
    Files.createDirectories(Paths.get(directoryPath));
  }

  public static Path createTempCsv(String directoryPath, String filename, int rows)
      throws IOException {
    final ThreadLocalRandom rnd = ThreadLocalRandom.current();

    final Path csv = Files.createTempFile(Paths.get(directoryPath), filename, ".csv");
    final String fileName = csv.getFileName().toString();

    try (Writer w = Files.newBufferedWriter(csv, StandardCharsets.UTF_8)) {
      for (int i = 0; i < rows; i++) {
        w.write(String.valueOf(i));
        w.write(",");
        w.write("row-");
        w.write(String.valueOf(i));
        w.write(",");
        w.write(String.valueOf(rnd.nextLong()));
        w.write(",");
        w.write(fileName);
        w.write("\n");
      }
    }
    return csv;
  }

  /**
   * Create file under directoryPath with fileName and populate it with test data
   *
   * @param directoryPath
   * @param filename
   * @throws IOException
   */
  public static void makeSampleFile(String directoryPath, String filename) throws IOException {

    File file = new File(directoryPath, filename);

    // if our file doesn't already exist
    if (!file.exists()) {
      // create it
      file.createNewFile();

      // populate it with some data
      FileWriter fw = new FileWriter(file.getAbsoluteFile());
      BufferedWriter bw = new BufferedWriter(fw);
      for (char letter = 'a'; letter <= 'z'; letter++) {
        bw.write(letter + "\n");
      }
      // close it back up
      bw.close();
    }

    return;
  }

  public static Connection getConnection(
      String user, String password, String account, String host, int port) throws Exception {
    // check first to see if we have the Snowflake JDBC
    Class.forName("net.snowflake.client.jdbc.SnowflakeDriver");

    // build our properties
    Properties props = new Properties();
    props.put("user", user);
    props.put("password", password);
    props.put("account", account);
    props.put("ssl", "off");

    // the actual connection string
    String connectString = "jdbc:snowflake://" + host + ":" + port;

    // fire off the connection
    return DriverManager.getConnection(connectString, props);
  }

  /**
   * Try to execute a SQL query and throw if it fails
   *
   * @param query the query in question
   */
  public static void doQuery(Connection conn, String query) {
    LOGGER.info("doQuery {}", query);
    try (Statement statement = conn.createStatement()) {
      statement.executeQuery(query);
    }
    // if ANY exceptions occur, an illegal state has been reached
    catch (Exception e) {
      throw new IllegalStateException(e);
    }
  }

  private static String ALGORITHM = "RSA";
  /**
   * Generates an RSA keypair for use in this test
   *
   * @return a valid RSA keypair
   * @throws NoSuchAlgorithmException if we don't have an RSA algo
   * @throws NoSuchProviderException if we can't use SHA1PRNG for randomization
   */
  public static KeyPair generateKeyPair() throws NoSuchProviderException, NoSuchAlgorithmException {
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
    keyGen.initialize(2048, random);
    return keyGen.generateKeyPair();
  }

  /**
   * Generate the public key as a string
   *
   * @return the public key as a string
   */
  public static String getPublicKeyString(KeyPair keypair)
      throws NoSuchAlgorithmException, InvalidKeySpecException {
    KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
    final PublicKey pk = keypair.getPublic();
    X509EncodedKeySpec spec = keyFactory.getKeySpec(pk, X509EncodedKeySpec.class);
    return Base64.encodeBase64String(spec.getEncoded());
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy