diff --git a/src/main/java/com/application/DB/Sort.java b/src/main/java/com/application/DB/Sort.java new file mode 100644 index 0000000000000000000000000000000000000000..1d8630acc3bb689641486e33a9c16b3928977bcc --- /dev/null +++ b/src/main/java/com/application/DB/Sort.java @@ -0,0 +1,95 @@ +package com.application.DB; + +import com.google.auth.oauth2.GoogleCredentials; +import com.google.auth.oauth2.ServiceAccountCredentials; +import com.google.cloud.bigquery.*; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +public class Sort { + + + private static GoogleCredentials getCredentials() throws Exception { + File credentialsPath = new File(".\\src\\main\\resources\\com.application\\sf-drying-optimization-1e234ad2b0f4.json"); + + // Load credentials from JSON key file. If you can't set the GOOGLE_APPLICATION_CREDENTIALS + // environment variable, you can explicitly load the credentials file to construct the + // credentials. + GoogleCredentials credentials; + try (FileInputStream serviceAccountStream = new FileInputStream(credentialsPath)) { + credentials = ServiceAccountCredentials.fromStream(serviceAccountStream); + } + return credentials; + } + + // Step 1: Initialize BigQuery service + // Here we set our project ID and get the `BigQuery` service object + // this is the interface to our BigQuery instance that + // we use to execute jobs on + private static BigQuery getBuilder() throws Exception { + BigQuery bigquery = BigQueryOptions.newBuilder(). + setCredentials(getCredentials()). + setProjectId("sf-drying-optimization") + .build().getService(); + return bigquery; + } + + + public static void main(String[] args) throws Exception { + Sort.getFromExistingTable(); + } + + + //getFromExistingTable sorts out treespecies, ex, width and height + // + + public static void getFromExistingTable() throws Exception { + + + // Step 2: Prepare query job + // A "QueryJob" is a type of job that executes SQL queries + // we create a new job configuration from our SQL query and + final String GET_WORD_COUNT = + "SELECT Name, CalculatedStart, CalculatedStop FROM `sf-drying-optimization.124.int_dk_valmaticsdryingbatches`" + + "WHERE Name Like \"%Gran%\" AND Name Like \"%3ex%\" AND NAME Like \"%47x150%\" AND DATE(CalculatedStart) " + + "BETWEEN \"2018-08-17\" AND \"2022-08-30\" ORDER BY DATE(CalculatedStart)"; + + QueryJobConfiguration queryConfig = + QueryJobConfiguration.newBuilder(GET_WORD_COUNT).build(); + + // Step 3: Run the job on BigQuery + // create a `Job` instance from the job configuration using the BigQuery service + // the job starts executing once the `create` method executes + + Job queryJob = getBuilder().create(JobInfo.newBuilder(queryConfig).build()); + queryJob = queryJob.waitFor(); + // the waitFor method blocks until the job completes + // and returns `null` if the job doesn't exist anymore + if (queryJob == null) { + throw new Exception("job no longer exists"); + } + // once the job is done, check if any error occured + if (queryJob.getStatus().getError() != null) { + throw new Exception(queryJob.getStatus().getError().toString()); + } + + // Step 4: Display results + // Print out a header line, and iterate through the + // query results to print each result in a new line + System.out.println("Name\tCalculatedStarted\tCalculatedStop"); + TableResult result = queryJob.getQueryResults(); + for (FieldValueList row : result.iterateAll()) { + // We can use the `get` method along with the column + // name to get the corresponding row entry + + String name = row.get("Name").getStringValue(); + String calculatedStart = row.get("CalculatedStart").getStringValue(); + String calculatedStop = row.get("CalculatedStop").getStringValue(); + System.out.printf("%s\t%s\t%s\n", name,calculatedStart, calculatedStop); + + + } + } +} diff --git a/target/classes/com/application/DB/Sort.class b/target/classes/com/application/DB/Sort.class new file mode 100644 index 0000000000000000000000000000000000000000..1a594c06b3520ce5e5d358f21b0ff1cf017bc63b Binary files /dev/null and b/target/classes/com/application/DB/Sort.class differ