Hi Dan,

I think the best what I can suggest is this:

|SELECT ||
|

|    ROW(left.field0, left.field1, left.field2, ...),|

|    ROW(right.field0, right.field1, right.field2, ...)|

|FROM ...|

You will need to list all the fields manually, as SQL does not allow for
asterisks in regular function calls.

If you are willing to give the Table API a try you might workaround some
of the manual work with the Column Function[1]

        Table join = t1.join(t2).where($("id1").isEqual($("id2")));
        join
            .select(
                row(withColumns(range(1, t1.getSchema().getFieldCount()))),
                row(withColumns(range(
                    t1.getSchema().getFieldCount() + 1,
                    t1.getSchema().getFieldCount() +
t2.getSchema().getFieldCount())))
            )
            .executeInsert("flat_avro")
            .await();


Best,

Dawid

[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#column-functions

On 18/09/2020 09:47, Dan Hill wrote:
> Hi!
>
> I want to join two tables and write the results to Avro where the left
> and right rows are nested in the avro output.  Is it possible to do
> this with the SQL interface?  
>
> Thanks!
> - Dan
>  CREATE TABLE `flat_avro` (
>    `left` ROW<id BIGINT, name STRING>,
>    `right` ROW<id BIGINT, name STRING>
> ) WITH (
>    'connector' = 'filesystem',
>    'path' = 's3p://blah/blah',
>    'format' = 'avro'
> );INSERT INTO `flat_avro`
> SELECT left.*, right.* FROM `left`
> LEFT JOIN `right`
> ON `left`.`id` = `right`.`id` );

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to