in bigquery-antipattern-recognition/src/main/java/com/google/zetasql/toolkit/antipattern/util/BigQueryHelper.java [113:158]
private TableResult getQueriesFromIS(
Long timeoutInSecs,
String timeCriteria,
String ISTable,
Integer slotsMsMin,
Float topNPercent,
String region)
throws InterruptedException {
String query =
"SELECT\n"
+ " project_id,\n"
+ " CONCAT(project_id, \":"
+ region.toUpperCase()
+ ".\", job_id) job_id, \n"
+ " query, \n"
+ " total_slot_ms / (1000 * 60 * 60 ) AS slot_hours, \n"
+ " user_email, \n"
+ " PERCENT_RANK() OVER(ORDER BY total_slot_ms desc) perc_rnk \n"
+ "FROM\n"
+ ISTable
+ "\n"
+ "WHERE \n"
+ timeCriteria
+ " AND total_slot_ms > "
+ slotsMsMin
+ "\n"
+ " AND reservation_id != 'default-pipeline' \n"
+ " AND query not like '%INFORMATION_SCHEMA%' \n"
+ "QUALIFY perc_rnk < "
+ topNPercent
+ "\n"
+ "ORDER BY \n"
+ " project_id, start_time desc\n";
logger.info("Reading from INFORMATION_SCHEMA: \n" + query);
QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(query)
.setUseLegacySql(false)
.setJobTimeoutMs(TimeUnit.SECONDS.toMillis(timeoutInSecs))
.build();
logger.debug("Running query:\n" + queryConfig.getQuery());
Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).build());
return queryJob.getQueryResults();
}