[
https://issues.apache.org/jira/browse/DRILL-8388?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
James Turton resolved DRILL-8388.
---------------------------------
Resolution: Information Provided
> CTAS sent over JDBC may be cancelled if query results are not fetched
> ---------------------------------------------------------------------
>
> Key: DRILL-8388
> URL: https://issues.apache.org/jira/browse/DRILL-8388
> Project: Apache Drill
> Issue Type: Task
> Components: Client - JDBC, Storage - Writer
> Affects Versions: 1.20.3
> Reporter: James Turton
> Assignee: James Turton
> Priority: Minor
> Fix For: Future
>
>
> When a JDBC client issues a CTAS statement then Drill will return a record
> for each completed writer fragment containing the number of records that
> fragment wrote. These records are returned in the usual streaming fashion as
> writer fragments complete, their order being unknowable in advance. If the
> client application immediately closes its clientside JDBC resources after its
> call to Statement.executeQuery has returned as follows
> {code:java}
> Statement ctasStatement = conn.createStatement();
> ResultSet ctasResults = ctasStatement.executeQuery(ctasQueryText);
> ctasResults.close();
> ctasStatement.close();
> {code}
> it may be that the CTAS statement is still executing, and that is then
> unintentionally cancelled depending on good or bad luck with respect to
> timing.
> The cancellation of the CTAS statement is usually benign if it spawned only
> one writer fragment, but if it spawned more than one then the chances
> increase that at least one writer will be interrupted before it has finished
> writing, resulting in incomplete or even corrupted output. Even in the benign
> case, such queries conclude in the CANCELLED state rather than the COMPLETED
> state.
> To have CTAS queries reliably run to completion, the JDBC client can wait for
> all of the writer fragments to complete before it closes its JDBC resources
> by scrolling through the ResultSet before closing it. Using
> try-with-resources syntax,
> {code:java}
> try (
> Statement ctasStatement = conn.createStatement();
> ResultSet ctasResults = ctasStatement.executeQuery(ctasQueryText);
> ) {
> while (ctasResults.next());
> }{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)