> In elastic (index/type) pair is guaranteed to be unique therefore > "${index}_${type}" will be also unique (as string). This is only necessary > when we have several types per index. Valid question is wherever user > should be allowed such flexibility.
Uniqueness is not my concern. Suppose there is an index called "x_y" with a type called "z", and another index called "x" with a type called "y_z". If I write "x_y_z" it's not clear how it should be broken into index/type. On Fri, Jun 29, 2018 at 3:15 PM, Andrei Sereda <and...@sereda.cc> wrote: >> Can you show how those examples affect SQL against the ES adapter and/or > how they affect JSON models? > > The discussion is how to properly bridge (index/type) concept from ES into > relational world. Proposal to use placeholders ($index / $type) affects > only how table is named in calcite. They're not used as SQL literals. IE it > affects only configuration phase of the schema. > Pretty much we're doing string/replace to derive table name from > ($index/$type). > >> You seem to be using '_' as a separator character. Are we sure that >> people will never use it in index or type name? Separator characters >> often cause problems. > In elastic (index/type) pair is guaranteed to be unique therefore > "${index}_${type}" will be also unique (as string). This is only necessary > when we have several types per index. Valid question is wherever user > should be allowed such flexibility. > > > > On Fri, Jun 29, 2018 at 2:19 PM Julian Hyde <jh...@apache.org> wrote: > >> Andrei, >> >> I'm not an ES user so I don't fully understand this issue, but my two >> cents anyway... >> >> Can you show how those examples affect SQL against the ES adapter >> and/or how they affect JSON models? >> >> You seem to be using '_' as a separator character. Are we sure that >> people will never use it in index or type name? Separator characters >> often cause problems. >> >> Julian >> >> >> >> >> On Fri, Jun 29, 2018 at 10:58 AM, Andrei Sereda <and...@sereda.cc> wrote: >> > I agree there should be a configuration option. How about the following >> > approach. >> > >> > Expose both variables ${index} and ${type} in configuration (JSON) and >> user >> > will use them to generate table name in calcite schema. >> > >> > Example >> > "table_name": "${type}" // current >> > "table_name": "${index}" // new (default?) >> > "table_name": "${index}_${type}" // most generic. supports multiple types >> > per index >> > >> > >> > >> > >> > >> > On Fri, Jun 29, 2018 at 9:26 AM Michael Mior <mm...@apache.org> wrote: >> > >> >> I think it sounds like you and Andrei are in a good position to tackle >> this >> >> one so I'm happy to have you both work on whatever solution you think is >> >> best. >> >> >> >> -- >> >> Michael Mior >> >> mm...@apache.org >> >> >> >> >> >> >> >> Le ven. 29 juin 2018 à 04:19, Christian Beikov < >> christian.bei...@gmail.com >> >> > >> >> a écrit : >> >> >> >> > IMO the best solution would be to make it configurable by introducing >> a >> >> > "table_mapping" config with values >> >> > >> >> > * type - every type in the known indices is mapped as table >> >> > * index - every known index is mapped as table >> >> > >> >> > We'd probably also need a "type_field" configuration for defining >> which >> >> > field to use for the type determination as one of the possible future >> >> > ways to do things is to introduce a custom field: >> >> > >> >> > >> >> >> https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html#_custom_type_field_2 >> >> > >> >> > We already detect the ES version, so we can set a smart default for >> this >> >> > setting. Let's make the index config param optional. >> >> > >> >> > * When no index is given, we discover indexes, the default for >> >> > "table_mapping" then is "index" >> >> > * When index is given, the we only discover types according to the >> >> > "type_field" configuration and the default for "table_mapping" is >> >> > "type" >> >> > >> >> > This would also allow to discover indexes but still use "type" as >> >> > "table_mapping". >> >> > >> >> > What do you think? >> >> > >> >> > Mit freundlichen Grüßen, >> >> > >> ------------------------------------------------------------------------ >> >> > *Christian Beikov* >> >> > Am 29.06.2018 um 02:41 schrieb Andrei Sereda: >> >> > > Yes. There is an API to list all indexes / types in elastic. They >> can >> >> be >> >> > > automatically imported into a schema. >> >> > > >> >> > > What needs to be agreed upon is how to expose those elements in >> calcite >> >> > > schema (naming / behaviour). >> >> > > >> >> > > 1) Many (most?) of setups are single type per index. Natural way to >> >> name >> >> > > would be "elastic.$index" (elastic being schema name). Multiple >> >> indexes >> >> > > would be under same schema "elastic.index1" "elastic.index2" etc. >> >> > > >> >> > > 2) What if index has several types should they exported as calcite >> >> > tables: >> >> > > "elastic.$index_type1" "elastic.$index_type2" ? Or (current >> behaviour) >> >> > as >> >> > > "elastic.type1" and "elastic.type2". Or as subschema >> >> > > "elastic.$index.type1" ? >> >> > > >> >> > > Now what if one has combination of (1) and (2) ? >> >> > > Setup (2) is already deprecated (and will be unsupported in next >> >> version) >> >> > > >> >> > > >> >> > > On Thu, Jun 28, 2018 at 7:31 PM Christian Beikov < >> >> > christian.bei...@gmail.com> >> >> > > wrote: >> >> > > >> >> > >> Is there an API to discover indexes? If there is, I'd suggest we >> >> allow a >> >> > >> config option that to make the adapter discover the possible >> indexes. >> >> > >> We'd still have to adapt the code a bit, but internally, the schema >> >> > >> could just keep a cache of type name to index name map and be able >> to >> >> > >> support both scenarios. >> >> > >> >> >> > >> >> >> > >> Mit freundlichen Grüßen, >> >> > >> >> >> ------------------------------------------------------------------------ >> >> > >> *Christian Beikov* >> >> > >> Am 29.06.2018 um 00:12 schrieb Andrei Sereda: >> >> > >>>> 1) What's the time horizon for the current adapter no longer >> working >> >> > >> with these >> >> > >>> changes to ES ? >> >> > >>> Current adapter will be working for a while with existing setup. >> The >> >> > >>> problem is nomenclature and ease of use. >> >> > >>> >> >> > >>> Their new SQL concepts mapping >> >> > >>> < >> >> > >> >> >> > >> >> >> https://www.elastic.co/guide/en/elasticsearch/reference/current/_mapping_concepts_across_sql_and_elasticsearch.html >> >> > >>> drops >> >> > >>> the notion of ES type (which before was equivalent of RDBMS table) >> >> and >> >> > >> uses >> >> > >>> ES index as new table equivalent (before ES index was equal to >> >> > database). >> >> > >>> Most users use elastic this way (one type , one index) index == >> >> table. >> >> > >>> >> >> > >>> Currently calcite requires schema per index. In RDBMS parlance >> >> database >> >> > >> per >> >> > >>> table (I'd like to change that). >> >> > >>> >> >> > >>>> 2) Any guess how complicated it would be to maintain code paths >> for >> >> > both >> >> > >>>> behaviours? I know this is probably really challenging to >> estimate, >> >> > but >> >> > >> I >> >> > >>>> really have no idea of the scope of these changes. Would it mean >> two >> >> > >>>> different ES adapters? >> >> > >>> One can have just a separate calcite schema implementations (same >> >> > >> adapter / >> >> > >>> module) : >> >> > >>> 1) LegacySchema (old). Schema can have only one index (but >> multiple >> >> > >>> types). Type == table in this case. >> >> > >>> 2) NewSchema (new). Single schema can have multiple indexes >> (type is >> >> > >>> dropped). Index == table in this case >> >> > >>> >> >> > >>>> 3) Do we really need compatibility with the current version of >> the >> >> > >>> adapter? >> >> > >>>> IMO this depends on what versions of ES we would lose support for >> >> and >> >> > >> how >> >> > >>>> complex it would be for users of the current ES adapter to make >> >> > updates >> >> > >>> for >> >> > >>>> any Calcite API changes. >> >> > >>> The issue is not in adapter but how calcite schema exposes tables. >> >> > >> Should >> >> > >>> it expose index as individual table (new), or ES type (old) ? >> >> > >>> >> >> > >>> Andrei. >> >> > >>> >> >> > >>> On Thu, Jun 28, 2018 at 5:23 PM Michael Mior <mm...@apache.org> >> >> wrote: >> >> > >>> >> >> > >>>> Unfortunately I know very little about ES so I'm not in a great >> >> > >> position to >> >> > >>>> asses the impact of these changes. I will say that that legacy >> >> > >>>> compatibility is great, but maintaining two sets of logic is >> always >> >> a >> >> > >>>> challenge. A few follow up questions: >> >> > >>>> >> >> > >>>> 1) What's the time horizon for the current adapter no longer >> working >> >> > >> with >> >> > >>>> these changes to ES? >> >> > >>>> >> >> > >>>> 2) Any guess how complicated it would be to maintain code paths >> for >> >> > both >> >> > >>>> behaviours? I know this is probably really challenging to >> estimate, >> >> > but >> >> > >> I >> >> > >>>> really have no idea of the scope of these changes. Would it mean >> two >> >> > >>>> different ES adapters? >> >> > >>>> >> >> > >>>> 3) Do we really need compatibility with the current version of >> the >> >> > >> adapter? >> >> > >>>> IMO this depends on what versions of ES we would lose support for >> >> and >> >> > >> how >> >> > >>>> complex it would be for users of the current ES adapter to make >> >> > updates >> >> > >> for >> >> > >>>> any Calcite API changes. >> >> > >>>> >> >> > >>>> Thanks for your continued work on the ES adapter Andrei! >> >> > >>>> >> >> > >>>> -- >> >> > >>>> Michael Mior >> >> > >>>> mm...@apache.org >> >> > >>>> >> >> > >>>> >> >> > >>>> >> >> > >>>> Le jeu. 28 juin 2018 à 12:57, Andrei Sereda <and...@sereda.cc> a >> >> > écrit >> >> > >> : >> >> > >>>>> Hello, >> >> > >>>>> >> >> > >>>>> Elastic announced >> >> > >>>>> < >> >> > >>>>> >> >> > >> >> >> > >> >> >> https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html >> >> > >>>>> that they will be deprecating mapping types in ES6 and indexes >> will >> >> > be >> >> > >>>>> single-typed only. >> >> > >>>>> >> >> > >>>>> Historical analogy <https://www.elastic.co/blog/index-vs-type> >> >> > between >> >> > >>>>> RDBMS and elastic was that index is equivalent to a database and >> >> type >> >> > >>>>> corresponds to table in that database. In a couple of releases >> >> > (ES6-8) >> >> > >>>> this >> >> > >>>>> shall not longer be true. >> >> > >>>>> >> >> > >>>>> Recent SQL addition >> >> > >>>>> <https://www.elastic.co/blog/elasticsearch-6-3-0-released> to >> >> > elastic >> >> > >>>>> confirms >> >> > >>>>> this trend >> >> > >>>>> < >> >> > >>>>> >> >> > >> >> >> > >> >> >> https://www.elastic.co/guide/en/elasticsearch/reference/current/_mapping_concepts_across_sql_and_elasticsearch.html >> >> > >>>>>> . >> >> > >>>>> Index is equivalent to a table and there are no more ES types. >> >> > >>>>> >> >> > >>>>> I would like to propose to include this logic in Calcite ES >> >> adapter. >> >> > >> IE, >> >> > >>>>> expose each ES single-typed index as a separate table inside >> >> calcite >> >> > >>>>> schema. This is in contrast to current integration where schema >> >> can >> >> > >> only >> >> > >>>>> have a single index. Current approach forces you to create >> multiple >> >> > >>>> schemas >> >> > >>>>> to query single-typed indexes (on the same ES cluster). >> >> > >>>>> >> >> > >>>>> Legacy compatibility can always be controlled with configuration >> >> > >>>>> parameters. >> >> > >>>>> >> >> > >>>>> Do you agree with such changes ? If yes, would you consider a >> PR ? >> >> > >>>>> >> >> > >>>>> Regards, >> >> > >>>>> Andrei. >> >> > >>>>> >> >> > >> >> >> > >> >> > >> >> >>