Join the club. We all forget that from time to time - until a perfectly simple 
change blows up in some huge QA test...

- Paul

Sent from my iPhone

> On Aug 22, 2018, at 8:33 AM, Chris Cunningham <cunningham...@gmail.com> wrote:
> 
> Hmm.  Right. Somehow I forgot about the very large result sets - stupid of
> me.
> 
> On Tue, Aug 21, 2018 at 4:43 PM Paul Rogers <par0...@yahoo.com.invalid>
> wrote:
> 
>> Hi Chris,
>> 
> <snip>
> 
>> Later, when Drill sees the first Varchar, it can change the type from,
>> say, batch 3 onwards. But, JDBC and ODBC generally require the schema be
>> known up front, so they would have to predict the future to know that a
>> Varchar will eventually appear.
> 
> +
> 
>> Within Drill, suppose that the query includes a sort, and that memory
>> limits require spilling. The first two batches with just null will be
>> spilled to disk in one format. Third and later batches have a different
>> schema. So, the code that handles spilling must merge the two types. Not a
>> big problem, but the fix must be applied in multiple places in different
>> ways. Very difficult to test all the resulting combinations and
>> permutations.
>> 
> 
> IF drill is doing a sort, it is likely that Drill would know the types
> before any rows were returned to JDBC/ODBC, so in this case delaying
> telling the client what type of columns they are getting could work, right?
> Of course, many queries will avoid sorts, so this isn't really an answer.
> Maybe a partial one.
> 
> Does this make sense? Are we overlooking an alternative solution?
>> 
> 
> It does make sense.
> 
> And I can't see a reasonable alternative.  The closest I come is telling
> the client that it is a BLOB of unknown size (or make it roughly 'big').
> Then either NULL or a pointer to the data is returned - but this just
> pushes the actual determination of the type to the user - with much less
> help context than Drill would have for finding out what it really is.
> I.e., not really good.
> 
> IF JDBC/ODBC was enhanced with a new feature that allowed the server to say
> in essence 'Hey, I know I told you what the columns where, but really, this
> column has changed to this type' in the middle of the results, that would
> be nice.
> 
> ODBC does allow the user to unbind columns and rebind them - so it would be
> conceivably possible that Drill could raise a warning, the client could not
> the warning said something like 'Column 17 changed to varchar(2000)', and
> then the client unbinds column 17, and rebinds it to a new buffer that
> would hold the actual content.
> (
> https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlbindcol-function?view=sql-server-2017
> )
> 
> Of course, this would require users to custom code ODBC access to drill to
> take advantage of this - which I suspect would be pretty uncommon.  I also
> see no reference to this ability in JDBC.
> 
> Thanks,
>> - Paul
>> 
> 
> Thank you for the quick, detailed response!
> -Chris

Reply via email to