Hi Godfrey,

thanks for starting the discussion on the mailing list. And sorry again for the late reply to FLIP-84. I have updated the Google doc one more time to incorporate the offline discussions.

From Dawid's and my view, it is fine to postpone the multiline support to a separate method. This can be future work even though we will need it rather soon.

If there are no objections, I suggest to update the FLIP-84 again and have another voting process.

Thanks,
Timo


On 25.03.20 11:17, godfrey he wrote:
Hi community,
Timo, Fabian and Dawid have some feedbacks about FLIP-84[1]. The feedbacks
are all about new introduced methods. We had a discussion yesterday, and
most of feedbacks have been agreed upon. Here is the conclusions:

*1. about proposed methods in `TableEnvironment`:*

the original proposed methods:

TableEnvironment.createDmlBatch(): DmlBatch
TableEnvironment.executeStatement(String statement): ResultTable

the new proposed methods:

// we should not use abbreviations in the API, and the term "Batch" is
easily confused with batch/streaming processing
TableEnvironment.createStatementSet(): StatementSet

// every method that takes SQL should have `Sql` in its name
// supports multiline statement ???
TableEnvironment.executeSql(String statement): TableResult

// new methods. supports explaining DQL and DML
TableEnvironment.explainSql(String statement, ExplainDetail... details):
String


*2. about proposed related classes:*

the original proposed classes:

interface DmlBatch {
     void addInsert(String insert);
     void addInsert(String targetPath, Table table);
     ResultTable execute() throws Exception ;
     String explain(boolean extended);
}

public interface ResultTable {
     TableSchema getResultSchema();
     Iterable<Row> getResultRows();
}

the new proposed classes:

interface StatementSet {
     // every method that takes SQL should have `Sql` in its name
     // return StatementSet instance for fluent programming
     addInsertSql(String statement): StatementSet

     // return StatementSet instance for fluent programming
     addInsert(String tablePath, Table table): StatementSet

     // new method. support overwrite mode
     addInsert(String tablePath, Table table, boolean overwrite):
StatementSet

     explain(): String

     // new method. supports adding more details for the result
     explain(ExplainDetail... extraDetails): String

     // throw exception ???
     execute(): TableResult
}

interface TableResult {
     getTableSchema(): TableSchema

     // avoid custom parsing of an "OK" row in programming
     getResultKind(): ResultKind

     // instead of `get` make it explicit that this is might be triggering
an expensive operation
     collect(): Iterable<Row>

     // for fluent programming
     print(): Unit
}

enum ResultKind {
     SUCCESS, // for DDL, DCL and statements with a simple "OK"
     SUCCESS_WITH_CONTENT, // rows with important content are available
(DML, DQL)
}


*3. new proposed methods in `Table`*

`Table.insertInto()` will be deprecated, and the following methods are
introduced:

Table.executeInsert(String tablePath): TableResult
Table.executeInsert(String tablePath, boolean overwrite): TableResult
Table.explain(ExplainDetail... details): String
Table.execute(): TableResult

There are two issues need further discussion, one is whether
`TableEnvironment.executeSql(String statement): TableResult` needs to
support multiline statement (or whether `TableEnvironment` needs to support
multiline statement), and another one is whether `StatementSet.execute()`
needs to throw exception.

please refer to the feedback document [2] for the details.

Any suggestions are warmly welcomed!

[1]
https://wiki.apache.org/confluence/pages/viewpage.action?pageId=134745878
[2]
https://docs.google.com/document/d/1ueLjQWRPdLTFB_TReAyhseAX-1N3j4WYWD0F02Uau0E/edit

Best,
Godfrey


Reply via email to