@Override public QueryExecution executeRawStatement(RequestContext context, String query, Map<String, String> sessionProperties) { return executeRawStatement(context, query, ZoneOffset.UTC, sessionProperties, null, null, true); }
public QueryExecution executeRawQuery(RequestContext context, String query, ZoneId timezone, Map<String, String> sessionProperties, String catalog) { if (sessionProperties.containsKey("external.source_options")) { String encodedKey = sessionProperties.get("external.source_options"); Map<String, DataSourceType> params; if (encodedKey != null) { params = JsonHelper.read(getDecoder().decode(encodedKey), new TypeReference<Map<String, DataSourceType>>() { }); } else { params = new HashMap<>(); } if (params.size() == 1) { Map.Entry<String, DataSourceType> next = params.entrySet().iterator().next(); QueryExecution singleQueryExecution = getSingleQueryExecution(query, next.getValue()); if (singleQueryExecution != null) { return singleQueryExecution; } } } return executeRawStatement(context, query, timezone, sessionProperties, catalog, null, false); }
@Subscribe public void onCreateProject(ProjectCreatedEvent event) { executor.executeRawStatement(format("CREATE TABLE %s(id VARCHAR, %s VARCHAR, " + "created_at TIMESTAMP, merged_at TIMESTAMP)", executor.formatTableReference(event.project, QualifiedName.of(ANONYMOUS_ID_MAPPING), Optional.empty(), ImmutableMap.of()), checkCollection(projectConfig.getUserColumn()))); } }
@Override public int[] storeBatch(List<Event> events) { for (Map.Entry<String, List<Event>> collection : events.stream().collect(Collectors.groupingBy(e -> e.collection())).entrySet()) { QueryResult join = queryExecutor.executeRawStatement(String.format("INSERT INTO %s.%s.%s (_shard_time, %s) (%s)", config.getColdStorageConnector(), checkProject(events.get(0).project(), '"'), checkCollection(collection.getKey()), collection.getValue().get(0).schema().stream().map(e -> ValidationUtil.checkCollection(e.getName())) .collect(Collectors.joining(", ")), collection.getValue().stream() .map(e -> buildValues(e.properties(), e.schema())) .collect(Collectors.joining(" union all ")))) .getResult().join(); if (join.isFailed()) { try { Thread.sleep(300000); } catch (InterruptedException e) { e.printStackTrace(); } throw new IllegalStateException(join.getError().message); } } return EventStore.SUCCESSFUL_BATCH; }
@Override public void store(Event event) { queryExecutor.executeRawStatement(String.format("INSERT INTO %s.%s.%s VALUES %s", config.getColdStorageConnector(), event.project(), event.collection(), buildValues(event.properties(), event.schema()))); }