Hi Rui,

Yes On the Beam side I am using Enum logical type. I thought I can use Int
sql type however i faced following issues.
Let assume my enum is [(0,Apple),(1,Orange),(2,Pears),(3,Banana)].
- If I map my Enum type to any calcite type. there can be other columns
which have the same sqltype. How can I know which column is my enum type
when I get back the result of the query. For instance If we store Enum as
Int. There could be other regular int columns.
- Also I can not enforce values if I map some other types. Let's continue
to use the same example as previous item. If I use INT How can I
enforce that the column's value should be always smaller than 4.
- If i have two different enum type How can i understand which column
belongs to which enum type.

I actually thought to use Row/Struct type but i could not find solution
above issues. Please let me know if there is a solution fo them ?

Thanks

On Wed, Jul 15, 2020 at 4:24 PM Rui Wang <amaliu...@apache.org> wrote:

> Hi Talat,
>
> I am guessing when you say logical type, you mean something like this in
> Beam [1].
>
> My question is why do you need Calcite to support ENUM? If you use logical
> type, you can define a ENUM by yourself and the underlying type can be a
> Map<string, int>. Map is supported by Calcite. So ENUM will be transparent
> for Calcite and you define how to deal with it in your own UDF.
>
>
>
> [1]:
>
> https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_apache_beam_blob_bcdb3ee943b92b856c8f8526528f120c903b8c0e_sdks_java_core_src_main_java_org_apache_beam_sdk_schemas_Schema.java-23L539&d=DwIFaQ&c=V9IgWpI5PvzTw83UyHGVSoW3Uc1MFWe5J8PTfkrzVSo&r=BkW1L6EF7ergAVYDXCo-3Vwkpy6qjsWAz7_GD7pAR8g&m=VrmcHBi5Gv1rW6-vJXNro6_CYvjqPmE2sOcViMYjFkE&s=uwI5RKLBbcjlx25YQP0vDyhmVKo11YVqx3G8KeT1tYc&e=
>
> -Rui
>
> On Wed, Jul 15, 2020 at 3:55 PM Talat Uyarer <tuya...@paloaltonetworks.com
> >
> wrote:
>
> > Hi Julian,
> >
> > Thanks for your answer. I dont know other dbs but  Also Postgresql
> support
> > enum too[1]. Do you think supporting logical types makes more sense ?
> When
> > we define a new type that can be stored in a schema field. Is it
> possible ?
> >
> > Thanks
> >
> > [1]
> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.postgresql.org_docs_11_datatype-2Denum.html&d=DwIFaQ&c=V9IgWpI5PvzTw83UyHGVSoW3Uc1MFWe5J8PTfkrzVSo&r=BkW1L6EF7ergAVYDXCo-3Vwkpy6qjsWAz7_GD7pAR8g&m=VrmcHBi5Gv1rW6-vJXNro6_CYvjqPmE2sOcViMYjFkE&s=ln8psgcVNyBgdMdkycqBXLMGx9faR4v1KQhOvkJ5eg4&e=
> >
> > On Wed, Jul 15, 2020 at 3:09 PM Julian Hyde <jh...@apache.org> wrote:
> >
> > > In answer to your question, no, Calcite does not support ENUM. It
> > > looks as if only MySQL does this.
> > >
> > > One idiomatic SQL way to achieve this would be to define a CHECK
> > > constraint that ensures that a column can only have a given set of
> > > values. Then hopefully a storage system would compress repeated values
> > > to a few bits each.
> > >
> > > Feel free to log a JIRA with your requirements. We'll see if anyone
> > > else wants this, and is prepared to implement it.
> > >
> > > Julian
> > >
> > > On Tue, Jul 14, 2020 at 7:00 PM Talat Uyarer
> > > <tuya...@paloaltonetworks.com> wrote:
> > > >
> > > > Hi,
> > > > I am using Beam SQL which uses calcite. IN Beam we have logical types
> > > which
> > > > we can use for Enumeration. But looks like they did not implement
> > > > enumeration support for calcite. I want to give that support. But I
> > could
> > > > not find the right way to implement it. In my Enumeration is a
> > > > HashMap<String,Integer>.
> > > >
> > > > My question is: Does calcite support Enum types like mysql ? [1] if
> not
> > > > How can store metadata information such as (enum strings, beam type
> > name
> > > > etc) for columns ?
> > > >
> > > > Thanks
> > > >
> > > > [1]
> > >
> >
> https://urldefense.proofpoint.com/v2/url?u=https-3A__dev.mysql.com_doc_refman_8.0_en_enum.html&d=DwIBaQ&c=V9IgWpI5PvzTw83UyHGVSoW3Uc1MFWe5J8PTfkrzVSo&r=BkW1L6EF7ergAVYDXCo-3Vwkpy6qjsWAz7_GD7pAR8g&m=C6H60jgOEboCiMMPoCkttuBvRctAdfSX_bb4fdHteg8&s=CsvfHu0s3sruXHp-cUyo68Yjsne0Bz414FI3_1M6Zas&e=
> > >
> >
>

Reply via email to