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= > > > > > >