Hi Stu,

thanks for reporting back.
I tried to reproduce the "method flatten() not found" error but did not
succeed.

It would be great if you could open a JIRA issue and describe how to
reproduce the problem.

Thank you,
Fabian

2017-03-17 16:42 GMT+01:00 Stu Smith <stu26c...@gmail.com>:

> Thank you! Just in case someone else stumbles onto this, I figured what
> was giving me trouble.
> The object I wanted to flattened happened to be null at times, at which
> point it would error out and give some exception along the lines of:
>
> "method flatten() not found"
>
> (Sorry, I'll try to follow up with the actual trace to help people with
> their searches later)
>
> which made it sound more like I was using it incorrectly altogether,
> rather than that the object was null... I think even just letting NPE would
> have been a little more helpful...
>
> I figured it out, btw, but trying equivalent programs in Flink and Esper
> (doing an eval of both). Esper gave a clearer error, and then I went back
> and fixed the flink program.
>
> Take care,
>   -stu
>
> On Thu, Mar 16, 2017 at 3:27 AM, Fabian Hueske <fhue...@gmail.com> wrote:
>
>> Hi Stu,
>>
>> there is only one page of documentation for the Table API and SQL [1].
>> I agree the structure could be improved and split into multiple pages.
>>
>> Regarding the flatting of a Pojo have a look at the "Built-In Functions"
>> section [2].
>> If you select "SQL" and head to the "Value access functions", you'll find
>>
>> > tableName.compositeType.* : Converts a Flink composite type (such as
>> Tuple, POJO, etc.) and all of its direct subtypes into a flat
>> representation where every subtype is a separate field.
>>
>>
>> The following program works returns the correct result:
>>
>> // POJO definition
>> class MyPojo(var x: Int, var y: Int) {
>>   def this() = this(0, 0)
>> }
>>
>> // SQL query
>> val env = ExecutionEnvironment.getExecutionEnvironment
>> val tEnv = TableEnvironment.getTableEnvironment(env, config)
>>
>> val ds = env.fromElements((0, new MyPojo(1, 2)), (1, new MyPojo(2, 3)),
>> (2, new MyPojo(3, 4)) )
>> tEnv.registerDataSet("Pojos", ds, 'id, 'pojo)
>>
>> val result = tEnv.sql("SELECT id, Pojos.pojo.* FROM Pojos") // you need
>> to include the table name to flatten a Pojo
>>
>> val results = result.toDataSet[Row].collect()
>> println(results.mkString("\n"))
>>
>> // Result
>> 0,1,2
>> 1,2,3
>> 2,3,4
>>
>> Best, Fabian
>>
>> [1] https://ci.apache.org/projects/flink/flink-docs-release-1.2/
>> dev/table_api.html
>> [2] https://ci.apache.org/projects/flink/flink-docs-release-1.2/
>> dev/table_api.html#built-in-functions
>>
>> 2017-03-15 21:31 GMT+01:00 Stu Smith <stu26c...@gmail.com>:
>>
>>> The documentation seems to indicate that there is a flatten method
>>> available in the sql language interface (in the table of available
>>> methods), or, alternatively using the '*' character somehow (in the text
>>> above the table).
>>>
>>> Yet I cannot flatten a POJO type, nor can I find any sufficient
>>> documentation in the official docs, searching the mailing list via
>>> markmail, looking through the examples in the source, or looking for
>>> through the SQL tests in the source.
>>>
>>> Can someone point me to the correct location for some solid flink SQL
>>> examples and docs?
>>>
>>> Take care,
>>>   -stu
>>>
>>
>>
>

Reply via email to