use of io.confluent.ksql.util.Pair in project ksql by confluentinc.
the class SchemaKStreamTest method testSelectSchemaKStream.
@Test
public void testSelectSchemaKStream() throws Exception {
String selectQuery = "SELECT col0, col2, col3 FROM test1 WHERE col0 > 100;";
PlanNode logicalPlan = planBuilder.buildLogicalPlan(selectQuery);
ProjectNode projectNode = (ProjectNode) logicalPlan.getSources().get(0);
initialSchemaKStream = new SchemaKStream(logicalPlan.getTheSourceNode().getSchema(), kStream, ksqlStream.getKeyField(), new ArrayList<>(), SchemaKStream.Type.SOURCE, functionRegistry, new MockSchemaRegistryClient());
List<Pair<String, Expression>> projectNameExpressionPairList = projectNode.getProjectNameExpressionPairList();
SchemaKStream projectedSchemaKStream = initialSchemaKStream.select(projectNameExpressionPairList);
Assert.assertTrue(projectedSchemaKStream.getSchema().fields().size() == 3);
Assert.assertTrue(projectedSchemaKStream.getSchema().field("COL0") == projectedSchemaKStream.getSchema().fields().get(0));
Assert.assertTrue(projectedSchemaKStream.getSchema().field("COL2") == projectedSchemaKStream.getSchema().fields().get(1));
Assert.assertTrue(projectedSchemaKStream.getSchema().field("COL3") == projectedSchemaKStream.getSchema().fields().get(2));
Assert.assertTrue(projectedSchemaKStream.getSchema().field("COL0").schema().type() == Schema.Type.INT64);
Assert.assertTrue(projectedSchemaKStream.getSchema().field("COL2").schema().type() == Schema.Type.STRING);
Assert.assertTrue(projectedSchemaKStream.getSchema().field("COL3").schema().type() == Schema.Type.FLOAT64);
Assert.assertTrue(projectedSchemaKStream.getSourceSchemaKStreams().get(0) == initialSchemaKStream);
}
use of io.confluent.ksql.util.Pair in project ksql by confluentinc.
the class KsqlParser method prepareStatement.
public Pair<Statement, DataSourceExtractor> prepareStatement(SqlBaseParser.SingleStatementContext statementContext, MetaStore metaStore) {
DataSourceExtractor dataSourceExtractor = new DataSourceExtractor(metaStore);
dataSourceExtractor.extractDataSources(statementContext);
AstBuilder astBuilder = new AstBuilder(dataSourceExtractor);
Node root = astBuilder.visit(statementContext);
Statement statement = (Statement) root;
return new Pair<>(statement, dataSourceExtractor);
}
use of io.confluent.ksql.util.Pair in project ksql by confluentinc.
the class KsqlEngine method buildMultipleQueries.
/**
* Runs the set of queries in the given query string.
*
* @param queriesString The ksql query string.
* @return List of query metadata.
* @throws Exception Any exception thrown here!
*/
public List<QueryMetadata> buildMultipleQueries(final String queriesString, final Map<String, Object> overriddenProperties) throws Exception {
for (String property : overriddenProperties.keySet()) {
if (IMMUTABLE_PROPERTIES.contains(property)) {
throw new IllegalArgumentException(String.format("Cannot override property '%s'", property));
}
}
// Multiple queries submitted as the same time should success or fail as a whole,
// Thus we use tempMetaStore to store newly created tables, streams or topics.
// MetaStore tempMetaStore = new MetaStoreImpl(metaStore);
MetaStore tempMetaStore = metaStore.clone();
// Build query AST from the query string
List<Pair<String, Statement>> queries = parseQueries(queriesString, overriddenProperties, tempMetaStore);
return planQueries(queries, overriddenProperties, tempMetaStore);
}
use of io.confluent.ksql.util.Pair in project ksql by confluentinc.
the class KsqlEngine method parseQueries.
// Visible for Testing
List<Pair<String, Statement>> parseQueries(final String queriesString, final Map<String, Object> overriddenProperties, final MetaStore tempMetaStore) {
try {
MetaStore tempMetaStoreForParser = tempMetaStore.clone();
// Parse and AST creation
KsqlParser ksqlParser = new KsqlParser();
List<SqlBaseParser.SingleStatementContext> parsedStatements = ksqlParser.getStatements(queriesString);
List<Pair<String, Statement>> queryList = new ArrayList<>();
for (SqlBaseParser.SingleStatementContext singleStatementContext : parsedStatements) {
Pair<Statement, DataSourceExtractor> statementInfo = ksqlParser.prepareStatement(singleStatementContext, tempMetaStoreForParser);
Statement statement = statementInfo.getLeft();
Pair<String, Statement> queryPair = buildSingleQueryAst(statement, getStatementString(singleStatementContext), tempMetaStore, tempMetaStoreForParser, overriddenProperties);
if (queryPair != null) {
queryList.add(queryPair);
}
}
return queryList;
} catch (Exception e) {
throw new ParseFailedException("Parsing failed on KsqlEngine msg:" + e.getMessage(), e);
}
}
use of io.confluent.ksql.util.Pair in project ksql by confluentinc.
the class KsqlEngine method planQueries.
private List<QueryMetadata> planQueries(final List<Pair<String, Statement>> statementList, final Map<String, Object> overriddenProperties, final MetaStore tempMetaStore) throws Exception {
// Logical plan creation from the ASTs
List<Pair<String, PlanNode>> logicalPlans = queryEngine.buildLogicalPlans(tempMetaStore, statementList);
// Physical plan creation from logical plans.
List<QueryMetadata> runningQueries = queryEngine.buildPhysicalPlans(logicalPlans, statementList, overriddenProperties, true);
for (QueryMetadata queryMetadata : runningQueries) {
if (queryMetadata instanceof PersistentQueryMetadata) {
livePersistentQueries.add(queryMetadata);
PersistentQueryMetadata persistentQueryMetadata = (PersistentQueryMetadata) queryMetadata;
persistentQueries.put(persistentQueryMetadata.getId(), persistentQueryMetadata);
}
allLiveQueries.add(queryMetadata);
}
return runningQueries;
}
Aggregations