Skip to content

Commit c82f6eb

Browse files
authored
Merge branch 'release-0.293-clp-connector' into xwei/add-k8s-manual-doc
2 parents 5bae0ce + 787783b commit c82f6eb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2109
-245
lines changed

presto-clp/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@
6565
<scope>provided</scope>
6666
</dependency>
6767

68+
<dependency>
69+
<groupId>com.fasterxml.jackson.core</groupId>
70+
<artifactId>jackson-core</artifactId>
71+
</dependency>
72+
73+
<dependency>
74+
<groupId>com.fasterxml.jackson.core</groupId>
75+
<artifactId>jackson-databind</artifactId>
76+
</dependency>
77+
6878
<dependency>
6979
<groupId>com.facebook.presto</groupId>
7080
<artifactId>presto-spi</artifactId>

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpConfig.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class ClpConfig
2929
private String metadataDbName;
3030
private String metadataDbUser;
3131
private String metadataDbPassword;
32+
private String metadataFilterConfig;
3233
private String metadataTablePrefix;
3334
private long metadataRefreshInterval = 60;
3435
private long metadataExpireInterval = 600;
@@ -107,6 +108,18 @@ public ClpConfig setMetadataDbPassword(String metadataDbPassword)
107108
return this;
108109
}
109110

111+
public String getMetadataFilterConfig()
112+
{
113+
return metadataFilterConfig;
114+
}
115+
116+
@Config("clp.metadata-filter-config")
117+
public ClpConfig setMetadataFilterConfig(String metadataFilterConfig)
118+
{
119+
this.metadataFilterConfig = metadataFilterConfig;
120+
return this;
121+
}
122+
110123
public String getMetadataTablePrefix()
111124
{
112125
return metadataTablePrefix;

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpConnector.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717
import com.facebook.airlift.log.Logger;
1818
import com.facebook.presto.spi.connector.Connector;
1919
import com.facebook.presto.spi.connector.ConnectorMetadata;
20+
import com.facebook.presto.spi.connector.ConnectorPlanOptimizerProvider;
2021
import com.facebook.presto.spi.connector.ConnectorRecordSetProvider;
2122
import com.facebook.presto.spi.connector.ConnectorSplitManager;
2223
import com.facebook.presto.spi.connector.ConnectorTransactionHandle;
24+
import com.facebook.presto.spi.function.FunctionMetadataManager;
25+
import com.facebook.presto.spi.function.StandardFunctionResolution;
2326
import com.facebook.presto.spi.transaction.IsolationLevel;
2427

2528
import javax.inject.Inject;
@@ -35,14 +38,33 @@ public class ClpConnector
3538
private final ClpMetadata metadata;
3639
private final ClpRecordSetProvider recordSetProvider;
3740
private final ClpSplitManager splitManager;
41+
private final FunctionMetadataManager functionManager;
42+
private final StandardFunctionResolution functionResolution;
43+
private final ClpMetadataFilterProvider metadataFilterProvider;
3844

3945
@Inject
40-
public ClpConnector(LifeCycleManager lifeCycleManager, ClpMetadata metadata, ClpRecordSetProvider recordSetProvider, ClpSplitManager splitManager)
46+
public ClpConnector(
47+
LifeCycleManager lifeCycleManager,
48+
ClpMetadata metadata,
49+
ClpRecordSetProvider recordSetProvider,
50+
ClpSplitManager splitManager,
51+
FunctionMetadataManager functionManager,
52+
StandardFunctionResolution functionResolution,
53+
ClpMetadataFilterProvider metadataFilterProvider)
4154
{
4255
this.lifeCycleManager = requireNonNull(lifeCycleManager, "lifeCycleManager is null");
4356
this.metadata = requireNonNull(metadata, "metadata is null");
4457
this.recordSetProvider = requireNonNull(recordSetProvider, "recordSetProvider is null");
4558
this.splitManager = requireNonNull(splitManager, "splitManager is null");
59+
this.functionManager = requireNonNull(functionManager, "functionManager is null");
60+
this.functionResolution = requireNonNull(functionResolution, "functionResolution is null");
61+
this.metadataFilterProvider = requireNonNull(metadataFilterProvider, "metadataFilterProvider is null");
62+
}
63+
64+
@Override
65+
public ConnectorPlanOptimizerProvider getConnectorPlanOptimizerProvider()
66+
{
67+
return new ClpPlanOptimizerProvider(functionManager, functionResolution, metadataFilterProvider);
4668
}
4769

4870
@Override

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpConnectorFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.facebook.presto.spi.connector.ConnectorFactory;
2424
import com.facebook.presto.spi.function.FunctionMetadataManager;
2525
import com.facebook.presto.spi.function.StandardFunctionResolution;
26-
import com.facebook.presto.spi.relation.RowExpressionService;
2726
import com.google.inject.Injector;
2827

2928
import java.util.Map;
@@ -33,10 +32,12 @@
3332
public class ClpConnectorFactory
3433
implements ConnectorFactory
3534
{
35+
public static final String CONNECTOR_NAME = "clp";
36+
3637
@Override
3738
public String getName()
3839
{
39-
return "clp";
40+
return CONNECTOR_NAME;
4041
}
4142

4243
@Override
@@ -54,7 +55,6 @@ public Connector create(String catalogName, Map<String, String> config, Connecto
5455
Bootstrap app = new Bootstrap(new JsonModule(), new ClpModule(), binder -> {
5556
binder.bind(FunctionMetadataManager.class).toInstance(context.getFunctionMetadataManager());
5657
binder.bind(NodeManager.class).toInstance(context.getNodeManager());
57-
binder.bind(RowExpressionService.class).toInstance(context.getRowExpressionService());
5858
binder.bind(StandardFunctionResolution.class).toInstance(context.getStandardFunctionResolution());
5959
binder.bind(TypeManager.class).toInstance(context.getTypeManager());
6060
});

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpErrorCode.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.facebook.presto.spi.ErrorCodeSupplier;
1919

2020
import static com.facebook.presto.common.ErrorType.EXTERNAL;
21+
import static com.facebook.presto.common.ErrorType.USER_ERROR;
2122

2223
public enum ClpErrorCode
2324
implements ErrorCodeSupplier
@@ -26,7 +27,10 @@ public enum ClpErrorCode
2627
CLP_UNSUPPORTED_METADATA_SOURCE(1, EXTERNAL),
2728
CLP_UNSUPPORTED_SPLIT_SOURCE(2, EXTERNAL),
2829
CLP_UNSUPPORTED_TYPE(3, EXTERNAL),
29-
CLP_UNSUPPORTED_CONFIG_OPTION(4, EXTERNAL);
30+
CLP_UNSUPPORTED_CONFIG_OPTION(4, EXTERNAL),
31+
32+
CLP_METADATA_FILTER_CONFIG_NOT_FOUND(10, USER_ERROR),
33+
CLP_MANDATORY_METADATA_FILTER_NOT_VALID(11, USER_ERROR);
3034

3135
private final ErrorCode errorCode;
3236

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpExpression.java

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,30 @@
1818
import java.util.Optional;
1919

2020
/**
21-
* Represents the result of converting a Presto RowExpression into a CLP-compatible KQL query. In
22-
* every case, `pushDownExpression` represents the part of the RowExpression that could be
23-
* converted to a KQL expression, and `remainingExpression` represents the part that could not be
24-
* converted.
21+
* Represents the result of:
22+
* <ul>
23+
* <li>splitting a {@link RowExpression} into an expression that can be pushed down to CLP
24+
* (`pushDownExpression`) and any remaining expression that cannot be
25+
* (`remainingExpression`).</li>
26+
* <li>a SQL query for filtering splits using CLP's metadata database.</li>
27+
* </ul>
2528
*/
2629
public class ClpExpression
2730
{
2831
// Optional KQL query or column name representing the fully or partially translatable part of the expression.
2932
private final Optional<String> pushDownExpression;
3033

34+
// Optional SQL string extracted from the query plan, which is only made of up of columns in
35+
// CLP's metadata database.
36+
private final Optional<String> metadataSqlQuery;
37+
3138
// The remaining (non-translatable) portion of the RowExpression, if any.
3239
private final Optional<RowExpression> remainingExpression;
3340

34-
public ClpExpression(String pushDownExpression, RowExpression remainingExpression)
41+
public ClpExpression(String pushDownExpression, String metadataSqlQuery, RowExpression remainingExpression)
3542
{
3643
this.pushDownExpression = Optional.ofNullable(pushDownExpression);
44+
this.metadataSqlQuery = Optional.ofNullable(metadataSqlQuery);
3745
this.remainingExpression = Optional.ofNullable(remainingExpression);
3846
}
3947

@@ -42,7 +50,7 @@ public ClpExpression(String pushDownExpression, RowExpression remainingExpressio
4250
*/
4351
public ClpExpression()
4452
{
45-
this(null, null);
53+
this(null, null, null);
4654
}
4755

4856
/**
@@ -52,7 +60,19 @@ public ClpExpression()
5260
*/
5361
public ClpExpression(String pushDownExpression)
5462
{
55-
this(pushDownExpression, null);
63+
this(pushDownExpression, null, null);
64+
}
65+
66+
/**
67+
* Creates a ClpExpression from a fully translatable KQL string or column name, as well as a
68+
* metadata SQL string.
69+
*
70+
* @param pushDownExpression
71+
* @param metadataSqlQuery
72+
*/
73+
public ClpExpression(String pushDownExpression, String metadataSqlQuery)
74+
{
75+
this(pushDownExpression, metadataSqlQuery, null);
5676
}
5777

5878
/**
@@ -62,14 +82,19 @@ public ClpExpression(String pushDownExpression)
6282
*/
6383
public ClpExpression(RowExpression remainingExpression)
6484
{
65-
this(null, remainingExpression);
85+
this(null, null, remainingExpression);
6686
}
6787

6888
public Optional<String> getPushDownExpression()
6989
{
7090
return pushDownExpression;
7191
}
7292

93+
public Optional<String> getMetadataSqlQuery()
94+
{
95+
return metadataSqlQuery;
96+
}
97+
7398
public Optional<RowExpression> getRemainingExpression()
7499
{
75100
return remainingExpression;

0 commit comments

Comments
 (0)