[ 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)