@Experimental
public class JdbcInputFormat
extends org.apache.flink.api.common.io.RichInputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>
implements org.apache.flink.api.java.typeutils.ResultTypeQueryable<org.apache.flink.types.Row>
TypeInformation>[] fieldTypes = new TypeInformation>[] {
BasicTypeInfo.INT_TYPE_INFO,
BasicTypeInfo.STRING_TYPE_INFO,
BasicTypeInfo.STRING_TYPE_INFO,
BasicTypeInfo.DOUBLE_TYPE_INFO,
BasicTypeInfo.INT_TYPE_INFO
};
RowTypeInfo rowTypeInfo = new RowTypeInfo(fieldTypes);
JdbcInputFormat jdbcInputFormat = JdbcInputFormat.buildJdbcInputFormat()
.setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
.setDBUrl("jdbc:derby:memory:ebookshop")
.setQuery("select * from books")
.setRowTypeInfo(rowTypeInfo)
.finish();
In order to query the JDBC source in parallel, you need to provide a parameterized query
template (i.e. a valid PreparedStatement) and a JdbcParameterValuesProvider which
provides binding values for the query parameters. E.g.:
Serializable[][] queryParameters = new String[2][1];
queryParameters[0] = new String[]{"Kumar"};
queryParameters[1] = new String[]{"Tan Ah Teck"};
JdbcInputFormat jdbcInputFormat = JdbcInputFormat.buildJdbcInputFormat()
.setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
.setDBUrl("jdbc:derby:memory:ebookshop")
.setQuery("select * from books WHERE author = ?")
.setRowTypeInfo(rowTypeInfo)
.setParametersProvider(new JdbcGenericParameterValuesProvider(queryParameters))
.finish();
Row,
JdbcParameterValuesProvider,
PreparedStatement,
DriverManager,
序列化表格| 限定符和类型 | 类和说明 |
|---|---|
static class |
JdbcInputFormat.JdbcInputFormatBuilder
Builder for
JdbcInputFormat. |
| 限定符和类型 | 字段和说明 |
|---|---|
protected Boolean |
autoCommit |
protected JdbcConnectionProvider |
connectionProvider |
protected int |
fetchSize |
protected boolean |
hasNext |
protected static org.slf4j.Logger |
LOG |
protected Object[][] |
parameterValues |
protected String |
queryTemplate |
protected ResultSet |
resultSet |
protected int |
resultSetConcurrency |
protected int |
resultSetType |
protected org.apache.flink.api.java.typeutils.RowTypeInfo |
rowTypeInfo |
protected static long |
serialVersionUID |
protected PreparedStatement |
statement |
| 构造器和说明 |
|---|
JdbcInputFormat() |
| 限定符和类型 | 方法和说明 |
|---|---|
static JdbcInputFormat.JdbcInputFormatBuilder |
buildJdbcInputFormat()
A builder used to set parameters to the output format's configuration in a fluent way.
|
void |
close()
Closes all resources used.
|
void |
closeInputFormat() |
void |
configure(org.apache.flink.configuration.Configuration parameters) |
org.apache.flink.core.io.InputSplit[] |
createInputSplits(int minNumSplits) |
protected Connection |
getDbConn() |
org.apache.flink.core.io.InputSplitAssigner |
getInputSplitAssigner(org.apache.flink.core.io.InputSplit[] inputSplits) |
org.apache.flink.api.java.typeutils.RowTypeInfo |
getProducedType() |
protected PreparedStatement |
getStatement() |
org.apache.flink.api.common.io.statistics.BaseStatistics |
getStatistics(org.apache.flink.api.common.io.statistics.BaseStatistics cachedStatistics) |
org.apache.flink.types.Row |
nextRecord(org.apache.flink.types.Row reuse)
Stores the next resultSet row in a tuple.
|
void |
open(org.apache.flink.core.io.InputSplit inputSplit)
Connects to the source database and executes the query in a parallel fashion if this
InputFormat is built using a parameterized query (i.e. using a PreparedStatement) and a proper JdbcParameterValuesProvider, in a non-parallel
fashion otherwise. |
void |
openInputFormat() |
boolean |
reachedEnd()
Checks whether all data has been read.
|
protected static final long serialVersionUID
protected static final org.slf4j.Logger LOG
protected JdbcConnectionProvider connectionProvider
protected String queryTemplate
protected int resultSetType
protected int resultSetConcurrency
protected org.apache.flink.api.java.typeutils.RowTypeInfo rowTypeInfo
protected transient PreparedStatement statement
protected transient ResultSet resultSet
protected int fetchSize
protected Boolean autoCommit
protected boolean hasNext
protected Object[][] parameterValues
public org.apache.flink.api.java.typeutils.RowTypeInfo getProducedType()
getProducedType 在接口中 org.apache.flink.api.java.typeutils.ResultTypeQueryable<org.apache.flink.types.Row>public void configure(org.apache.flink.configuration.Configuration parameters)
configure 在接口中 org.apache.flink.api.common.io.InputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>public void openInputFormat()
openInputFormat 在类中 org.apache.flink.api.common.io.RichInputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>public void closeInputFormat()
closeInputFormat 在类中 org.apache.flink.api.common.io.RichInputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>public void open(org.apache.flink.core.io.InputSplit inputSplit)
throws IOException
InputFormat is built using a parameterized query (i.e. using a PreparedStatement) and a proper JdbcParameterValuesProvider, in a non-parallel
fashion otherwise.open 在接口中 org.apache.flink.api.common.io.InputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>inputSplit - which is ignored if this InputFormat is executed as a non-parallel source,
a "hook" to the query parameters otherwise (using its splitNumber)IOException - if there's an error during the execution of the querypublic void close()
throws IOException
close 在接口中 org.apache.flink.api.common.io.InputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>IOException - Indicates that a resource could not be closed.public boolean reachedEnd()
throws IOException
reachedEnd 在接口中 org.apache.flink.api.common.io.InputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>IOExceptionpublic org.apache.flink.types.Row nextRecord(org.apache.flink.types.Row reuse)
throws IOException
nextRecord 在接口中 org.apache.flink.api.common.io.InputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>reuse - row to be reused.RowIOExceptionpublic org.apache.flink.api.common.io.statistics.BaseStatistics getStatistics(org.apache.flink.api.common.io.statistics.BaseStatistics cachedStatistics)
throws IOException
getStatistics 在接口中 org.apache.flink.api.common.io.InputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>IOExceptionpublic org.apache.flink.core.io.InputSplit[] createInputSplits(int minNumSplits)
throws IOException
createInputSplits 在接口中 org.apache.flink.api.common.io.InputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>createInputSplits 在接口中 org.apache.flink.core.io.InputSplitSource<org.apache.flink.core.io.InputSplit>IOExceptionpublic org.apache.flink.core.io.InputSplitAssigner getInputSplitAssigner(org.apache.flink.core.io.InputSplit[] inputSplits)
getInputSplitAssigner 在接口中 org.apache.flink.api.common.io.InputFormat<org.apache.flink.types.Row,org.apache.flink.core.io.InputSplit>getInputSplitAssigner 在接口中 org.apache.flink.core.io.InputSplitSource<org.apache.flink.core.io.InputSplit>@VisibleForTesting protected PreparedStatement getStatement()
@VisibleForTesting protected Connection getDbConn()
public static JdbcInputFormat.JdbcInputFormatBuilder buildJdbcInputFormat()
Copyright © 2014–2023 The Apache Software Foundation. All rights reserved.