On Tue, Nov 10, 2020 at 5:46 AM Piotr Szuberski <piotr.szuber...@polidea.com>
wrote:

> Unfortunately according to the documentation, BeamSQL doesn't work well
> with ARRAY<COMPLEX_TYPE>, like ARRAY<ROW<>> which I confirmed empirically.
>
>
Is there a jira for this issue?


> The only way to retrieve array's values was to get it by index, e.g.
> SELECT t.complex_array[1].row_field from some_table t;
>
> Unnest and just taking an array doesn't work with ARRAY<ROW>.
>
> I think that if a user wants to have a list of cells then it has to be
> truncated to "value" only and just the recent cell if it has to be ROW with
> timestamp, labels etc.
>
> This limitation doesn't happen in the flattened rows, but another one
> takes place - the value has to be of BINARY type and then parsed by user.
>
> I'll try to make it possibly elastic - ARRAY<ROW> limitation makes it much
> less straightforward.
>
> Thanks for the references! As I understand Flink cares only for the recent
> values of the column and ignores the timestamps and labels? I refer to
> this:
> family1 ROW<q1 INT>  -- family1.q1 is the most recent cell value of the q1
> column?
>

I can't find a reference to confirm, but that seems like the most likely
explanation. Similar to how BigQuery behaves with the onlyReadLatest option.


>
> On 2020/11/06 20:43:03, Ismaël Mejía <ieme...@gmail.com> wrote:
> > Thanks for the references Rui. I think it is worth to consider how
> > open source systems do it.
> > The great thing about this is that we could 'easily' map Piotr's work
> > for Bigtable to HBase too once it is done.

>
> > On Fri, Nov 6, 2020 at 8:22 PM Rui Wang <ruw...@google.com> wrote:
> > >
> > > Another two references are from how Flink and Spark uses HBase by SQL:
>

Great point! I forgot that HBase is modeled after BigTable


> > >
> > >
> https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/connectors/hbase.html
> > > https://stackoverflow.com/questions/39530938/sparksql-on-hbase-tables
> > >
> > > -Rui
> > >
> > > On Thu, Nov 5, 2020 at 9:46 AM Piotr Szuberski <
> piotr.szuber...@polidea.com> wrote:
> > >>
> > >> Thanks for the resources! I'll try to follow the BQ approach. I'd
> also add something like flattened schema so the user can use simple types
> only. It would be limited to BINARY values though. Something like:
> > >> CREATE EXTERNAL TABLE(
> > >>   key VARCHAR NOT NULL,
> > >>   family VARCHAR NOT NULL,
> > >>   column VARCHAR NOT NULL,
> > >>   value BINARY NOT NULL,
> > >>   timestampMicros BIGINT NOT NULL
> > >> )
> > >>  The cells array would be flattened (denormalized) and easy to use.
> In case of single-valued cells it would also be quite efficient.
> > >>
> > >> On 2020/11/05 00:22:44, Brian Hulette <bhule...@google.com> wrote:
> > >> > I think we should take a look at how BigTable is integrated with
> other SQL
> > >> > systems. For example we could get some inspiration from BigQuery's
> support
> > >> > for querying BigTable data [1]. It looks like by default it uses
> something
> > >> > like (1), but they recognize this is difficult to process with SQL,
> so they
> > >> > have an option you can set to elevate certain columns as sub-fields
> (more
> > >> > like (2)), and you can also indicate you only want to get the
> latest value
> > >> > for each column.
> > >> >
> > >> > In any case this may be a good candidate for not requiring the user
> to
> > >> > actually specify a schema, and instead letting the table be fully
> > >> > determined by options.
> > >> >
> > >> > [1] https://cloud.google.com/bigquery/external-data-bigtable
> > >> >
> > >> > On Tue, Nov 3, 2020 at 11:41 PM Piotr Szuberski <
> piotr.szuber...@polidea.com>
> > >> > wrote:
> > >> >
> > >> > > I've dug the topic a bit and I think the 2nd approach will fit
> better. The
> > >> > > schema in Bigtable is not supposed to change that often and
> specifying our
> > >> > > own schema is more SQL-like and will cause less potential trouble.
> > >> > >
> > >> > > On 2020/11/03 11:01:57, Piotr Szuberski <
> piotr.szuber...@polidea.com>
> > >> > > wrote:
> > >> > > > I'm going to write Bigtable table for BeamSQL and I have a
> question
> > >> > > about the schema design, which one would be preferrable.
> > >> > > >
> > >> > > > Bigtable stores its data in a table with rows that contain a
> key and
> > >> > > 3-dimensional array where the 1st dimension is families with a
> names, 2nd
> > >> > > dimension is columns with qualifiers and the 3rd cells containing
> timestamp
> > >> > > and value.
> > >> > > >
> > >> > > > Two design solutions come to mind:
> > >> > > > 1) Fix schema to be a generic Bigtable row:
> > >> > > >
> > >> > > > Row(key, Array(Row(family, Array(Row(qualifier, Array(Row(value,
> > >> > > timestamp)))))))
> > >> > > >
> > >> > > > Then the table creation definition would always be in form:
> > >> > > >
> > >> > > > CREATE TABLE bigtableexample1()
> > >> > > > TYPE 'bigtable'
> > >> > > > LOCATION '
> > >> > >
> https://googleapis.com/bigtable/projects/projectId/instances/instanceId/tables/tableId
> > >> > > '
> > >> > > >
> > >> > > > 2) Let the user design his schema by providing the desired
> families and
> > >> > > columns it sth like:
> > >> > > > CREATE TABLE bigtableexample2(
> > >> > > >   key VARCHAR,
> > >> > > >   family1 ROW<
> > >> > > >     column1 ROW<
> > >> > > >       cells ARRAY<ROW<
> > >> > > >         value VARCHAR,
> > >> > > >         timestamp BIGINT
> > >> > > >       >>
> > >> > > >     >,
> > >> > > >     column2 ROW<
> > >> > > >       cells ARRAY<ROW<
> > >> > > >         value VARCHAR,
> > >> > > >         timestamp BIGINT
> > >> > > >       >>
> > >> > > >     >
> > >> > > >   >
> > >> > > > )
> > >> > > > TYPE 'bigtable'
> > >> > > > LOCATION '
> > >> > >
> https://googleapis.com/bigtable/projects/projectId/instances/instanceId/tables/tableId
> > >> > > '
> > >> > > >
> > >> > > > For me the 1st approach is more user friendly (typing schema
> from the
> > >> > > 2nd would be troublesome) and more elastic especially when the
> row's schema
> > >> > > (families and columns) changes and a user wants to perform
> 'SELECT * from
> > >> > > bigtableexampleX'.
> > >> > > >
> > >> > > > WDYT? I'd welcome any feedback. Maybe there is some 3rd option
> that will
> > >> > > be a better one?
> > >> > > >
> > >> > >
> > >> >
> >
>

Reply via email to