I suspected as much (the tuple size limitation).  Creating my own InputFormat 
seems to be the best solution, but before i go down that rabbit hole I wanted 
to see at least a semi-trivial working example of JDBCInputFormat with Scala 
2.11.

I’d appreciate a look at that prototype if its publicly available (even if it 
is Java). I might glean a hint from it.

Prez Cannady  
p: 617 500 3378  
e: revp...@opencorrelate.org <mailto:revp...@opencorrelate.org>  
GH: https://github.com/opencorrelate <https://github.com/opencorrelate>  
LI: https://www.linkedin.com/in/revprez <https://www.linkedin.com/in/revprez>  

> On Mar 9, 2016, at 3:25 AM, Chesnay Schepler <ches...@apache.org> wrote:
> 
> you can always create your own InputFormat, but there is no 
> AbstractJDBCInputFormat if that's what you were looking for. 
> 
> When you say arbitrary tuple size, do you mean a) a size greater than 25, or 
> b) tuples of different sizes?
> If a) unless you are fine with using nested tuples you won't get around the 
> tuple size limitation. Since the user has to be aware of the nesting (since 
> the fields can be accessed directly via tuple.f0 etc), this can't really be 
> done in a general-purpose fashion.
> If b) this will straight-up not work with tuples.
> 
> You could use POJO's though. then you could also group by column names.
> 
> I'm not sure about Scala, but in the Java Stream API you can pass the 
> InputFormat and the TypeInformation into createInput. 
> 
> I've recently did a prototype where the input type is determined 
> automatically by querying the database. If this is a problem for you feel 
> free to ping me.
> 
> On 09.03.2016 03:17, Prez Cannady wrote:
>> I’m attempting to create a stream using JDBCInputFormat.  Objective is to 
>> convert each record into a tuple and then serialize for input into a Kafka 
>> topic.  Here’s what I have so far.
>> 
>> ```
>> val env = StreamExecutionEnvironment.getExecutionEnvironment
>> 
>> val inputFormat = JDBCInputFormat.buildJDBCInputFormat()
>>       .setDrivername("org.postgresql.Driver")
>>       .setDBUrl("jdbc:postgresql:test")
>>       .setQuery("select name from persons")
>>       .finish()
>> 
>> val stream : DataStream[Tuple1[String]] = env.createInput(...)
>> ```
>> 
>> I think this is essentially what I want to do.  It would be nice if I could 
>> return tuples of arbitrary length, but reading the code suggests I have to 
>> commit to a defined arity.  So I have some questions.
>> 
>> 1. Is there a better way to read from a database (i.e., defining my own 
>> `InputFormat` using Slick)?
>> 2. To get the above example working, what should I supply to `createInput`?
>> 
>> 
>> Prez Cannady  
>> p: 617 500 3378  
>> e:  <mailto:revp...@opencorrelate.org>revp...@opencorrelate.org 
>> <mailto:revp...@opencorrelate.org>  
>> GH:  <https://github.com/opencorrelate>https://github.com/opencorrelate 
>> <https://github.com/opencorrelate>  
>> LI:  
>> <https://www.linkedin.com/in/revprez>https://www.linkedin.com/in/revprez 
>> <https://www.linkedin.com/in/revprez>  
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
> 

Reply via email to