👍

On Thu, Nov 7, 2024 at 10:58 PM guo Maxwell <cclive1...@gmail.com> wrote:

> Thank you very much for your careful observation. I have corrected it, it
> is out of date, just remove the OPTIONS keyword.
>
>
> Dave Herrington <he...@rhinosource.com> 于2024年11月8日周五 14:52写道:
>
>> I wanted to weigh in on the options handling.
>>
>> Being able to override table options like compaction strategy would be
>> valuable for use cases when we are evaluating side-by-side the performance
>> of different compaction settings.
>>
>> We can always do ALTER TABLE after the CREATE TABLE LIKE, but it would be
>> slicker if we could do it in a single step.
>>
>> Not the end of the world if this capability isn't provided, but it would
>> be a convenient feature to have sometime in the future.
>>
>> Also, in the CEP, I see "[ WITH OPTIONS..." in the CQL Parser.g
>> definition, but I can't figure out what it means.
>>
>> -Dave
>>
>> On Wed, Nov 6, 2024 at 4:10 AM Štefan Miklošovič <smikloso...@apache.org>
>> wrote:
>>
>>> Alright ... So, it is OK to NOT support this:
>>>
>>> CREATE TABLE cycling.cyclist_name4 LIKE cycling.cyclist_name
>>>     WITH TRIGGERS
>>>     AND VIEWS
>>>     AND compaction = { 'class' : 'LeveledCompactionStrategy' }
>>>     AND default_time_to_live = 86400;
>>>
>>> I think that if we ever wanted to support overriding of table options,
>>> we _could_ deliver it later on if there is enough demand. From a syntax /
>>> grammar point of view, being able to override these options is just a pure
>>> addition to that syntax. Everything stays, we would just expand this. Hence
>>> from the user's perspective it would be just an extension of this whole
>>> feature.
>>>
>>> Supporting the 5 examples is OK. It is crucial that the options of a
>>> table we are making copy of are carried over to a new table as well.
>>>
>>>
>>>
>>> On Wed, Nov 6, 2024 at 7:17 AM guo Maxwell <cclive1...@gmail.com> wrote:
>>>
>>>> Any update on this ?If there are no updates, I wonder if we can start a
>>>> new update on the VOTE thread.
>>>>
>>>> guo Maxwell <cclive1...@gmail.com> 于2024年11月5日周二 19:23写道:
>>>>
>>>>> Hello, everyone.
>>>>> I have a point of view that our CREATE TABLE LIKE grammar should not
>>>>> support the setting of table options, like :
>>>>>
>>>>>> CREATE TABLE cycling.cyclist_name4 LIKE cycling.cyclist_name WITH
>>>>>> TRIGGERS AND VIEWS AND compaction = { 'class' : 
>>>>>> 'LeveledCompactionStrategy'
>>>>>> } AND default_time_to_live = 86400;
>>>>>
>>>>> If the user wants to copy the table and set the compaction strategy
>>>>> for the new table, then he can execute the
>>>>> ALTER TABLE statement after copying the table.
>>>>>
>>>>> So, I think it’s enough to support the above five cases . The original
>>>>> intention of copying a table is to copy the table,
>>>>> and support what is to or not to copy during the copying process. Not
>>>>> changing the options at the same time.
>>>>>
>>>>> WDYT ?
>>>>>
>>>>> guo Maxwell <cclive1...@gmail.com> 于2024年11月5日周二 14:07写道:
>>>>>
>>>>>> Hi,stefan and Dave,
>>>>>> I do not intend to implement the BNF of COPY TABLE based on the BNF
>>>>>> of CREATE TABLE. All table options are indeed copied by default. 
>>>>>> Therefore,
>>>>>> the following syntax is not supported:
>>>>>>
>>>>>> CREATE TABLE cycling.cyclist_name4 LIKE cycling.cyclist_name WITH
>>>>>>> TRIGGERS AND VIEWS AND compaction = { 'class' : 
>>>>>>> 'LeveledCompactionStrategy'
>>>>>>> } AND default_time_to_live = 86400;
>>>>>>
>>>>>>
>>>>>> We can see that the above statement itself is very complicated
>>>>>> because it provides too many choices.
>>>>>> If we support individual settings of table options
>>>>>> (compaction/compression), what about other TRIGGER/INDEXS ? I tend to 
>>>>>> treat
>>>>>> the table, TRIGGER, INDEX, etc. as a whole and copy them uniformly. As 
>>>>>> for
>>>>>> their own attributes, such as table options, INDEX attributes, etc., they
>>>>>> can be copied and then set manually.
>>>>>>
>>>>>> So we only going to support :
>>>>>>
>>>>>>> 1.CREATE TABLE newks.newtable LIKE oldks.oldtable
>>>>>>> 2.CREATE TABLE newks.newtable LIKE oldks.oldtable WITH ALL // this
>>>>>>> means copy indexes and triggers
>>>>>>> 3.CREATE TABLE newks.newtable LIKE oldks.oldtable WITH INDEXES
>>>>>>> 4.CREATE TABLE newks.newtable LIKE oldks.oldtable WITH TRIGGERS
>>>>>>> 5.CREATE TABLE newks.newtable LIKE oldks.oldtable WITH TRIGGERS AND
>>>>>>> INDEXES // equal to option 2.
>>>>>>
>>>>>>
>>>>>> Štefan Miklošovič <smikloso...@apache.org> 于2024年11月4日周一 23:31写道:
>>>>>>
>>>>>>> 1) Just mention that it will not be part of phase 1, I am OK if it
>>>>>>> will be delivered later.
>>>>>>>
>>>>>>> 2) If we had "ALL" introduced, then we would have something like
>>>>>>> this:
>>>>>>>
>>>>>>> CREATE TABLE cycling.cyclist_name4 LIKE cycling.cyclist_name
>>>>>>>     WITH
>>>>>>>     ALL
>>>>>>>     AND compaction = { 'class' : 'LeveledCompactionStrategy' }
>>>>>>>     AND default_time_to_live = 86400;
>>>>>>>
>>>>>>> I think this is a little bit "strange". It would make sense to add
>>>>>>> ALL if we have not had any "AND"s but mixing ALL and then adding AND 
>>>>>>> with
>>>>>>> options is a little bit confusing.
>>>>>>>
>>>>>>> 3)
>>>>>>>
>>>>>>> Do I understand correctly that your CEP will make this possible? I
>>>>>>> do not want to go into the implementation details for now.
>>>>>>>
>>>>>>> CREATE TABLE cycling.cyclist_name4 LIKE cycling.cyclist_name
>>>>>>>     WITH TRIGGERS
>>>>>>>     AND VIEWS
>>>>>>>     AND compaction = { 'class' : 'LeveledCompactionStrategy' }
>>>>>>>     AND default_time_to_live = 86400;
>>>>>>>
>>>>>>> In other words, it will copy all options from "cycling.cyclist_name"
>>>>>>> while it will be possible to override the options with whatever I want?
>>>>>>> Basically what Dave suggested.
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Nov 4, 2024 at 4:21 PM guo Maxwell <cclive1...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi stefan
>>>>>>>> 1、yes, cross-keyspace copying will be much complicated than copying
>>>>>>>> under same keyspace , but I think we can support it in the future , 
>>>>>>>> and I
>>>>>>>> think it is under the scope of this CEP , so I add it .Or is it that 
>>>>>>>> the
>>>>>>>> work planned for the next step should not be listed here for the time
>>>>>>>> being?
>>>>>>>> I don't know the rules very well here, and I hope if you can help
>>>>>>>> point out the unreasonable points 😀 , because I do plan to
>>>>>>>> complete this task, although I have only implemented the same keyspace 
>>>>>>>> now.
>>>>>>>> 2、yes, you are right, I gave up ALL at the first time , But after I
>>>>>>>> replied to yifan’s email, I communicated with him privately through 
>>>>>>>> slack.
>>>>>>>> In the end, I was not strongly opposed to ALL (Sorry, we communicated 
>>>>>>>> in
>>>>>>>> Chinese,
>>>>>>>> https://the-asf.slack.com/archives/D07SXB787HN/p1729136909357689),
>>>>>>>> In addition, I later saw that you were +0, so I added ALL back.
>>>>>>>> 3、the change to Parse.g will be like :
>>>>>>>>
>>>>>>>>> /**
>>>>>>>>>  * CREATE TABLE [IF NOT EXISTS] <NEW_TABLE>
>>>>>>>>>  * LIKE <OLD_TABLE>
>>>>>>>>>  * [ WITH OPTIONS AND INDEXES AND TRIGGERS ]
>>>>>>>>>  */
>>>>>>>>> copyTableStatement returns  [CopyTableStatement.Raw stmt]
>>>>>>>>>     @init { boolean ifNotExists = false; }
>>>>>>>>>     : K_CREATE K_COLUMNFAMILY newCf=columnFamilyName LIKE 
>>>>>>>>> oldCf=columnFamilyName
>>>>>>>>>       { $stmt = new CopyTableStatement.Raw(newCf, oldCf); }
>>>>>>>>>       tableLikeOptions[stmt]
>>>>>>>>>     ;
>>>>>>>>>
>>>>>>>>> tableLikeOptions[CopyTableStatement.Raw stmt]
>>>>>>>>>     : ( K_WITH tableLikeSingleOption[stmt] ( K_AND 
>>>>>>>>> tableLikeSingleOption[stmt] )*)?
>>>>>>>>>     ;
>>>>>>>>>
>>>>>>>>> tableLikeSingleOption[CopyTableStatement.Raw stmt]
>>>>>>>>>     : option=STRING_LITERAL { 
>>>>>>>>> $stmt.extendWithLikeOptions($option.text); }
>>>>>>>>>     ;
>>>>>>>>>
>>>>>>>>> I don’t plan to reuse the Create table definition file, and there
>>>>>>>> doesn’t seem to be much need. And I have made a explanation  in the cep
>>>>>>>> file
>>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-43++Apache+Cassandra+CREATE+TABLE++LIKE>
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>>
>>>>>>>> Štefan Miklošovič <smikloso...@apache.org> 于2024年11月4日周一 17:00写道:
>>>>>>>>
>>>>>>>>> Hi Maxwell,
>>>>>>>>>
>>>>>>>>> 1) I noticed that there is table copying across keyspaces in your
>>>>>>>>> goal number 2) in the CEP. Is this correct? I was thinking that we are
>>>>>>>>> doing same-keyspace copying for now and it will be considered later, 
>>>>>>>>> as you
>>>>>>>>> elaborate on that further down the document. Cross-keyspace copying 
>>>>>>>>> would
>>>>>>>>> mean (among other things) that we would need to create UDTs in another
>>>>>>>>> keyspace as well which would complicate it etc ...
>>>>>>>>>
>>>>>>>>> 2) I also see this
>>>>>>>>>
>>>>>>>>> CREATE TABLE <NEW_TABLE> LIKE <OLD_TABLE>  [ WITH ALL | [ INDEXES
>>>>>>>>> AND TRIGGERS]]
>>>>>>>>>
>>>>>>>>> Is this really correct? I think we agreed that ALL will not be
>>>>>>>>> supported. You gave up on ALL in this comment of yours (the first 
>>>>>>>>> sentence)
>>>>>>>>> (1)
>>>>>>>>>
>>>>>>>>> 3) It would be great if you were more explicit about the proposed
>>>>>>>>> CQL changes in such a way that after the CEP is delivered, it would be
>>>>>>>>> possible to override the options on a new table. Basically what Dave
>>>>>>>>> summarized here (2) at the very bottom. All three examples should be
>>>>>>>>> mentioned in CEP for being explicit about our intentions.
>>>>>>>>>
>>>>>>>>> After this is all reflected, I will be glad to vote on this CEP in
>>>>>>>>> the other thread.
>>>>>>>>>
>>>>>>>>> (1)
>>>>>>>>> https://lists.apache.org/thread/d485w6lxvpoztmjnxj8msj0jjt3d5ltk
>>>>>>>>> (2)
>>>>>>>>> https://lists.apache.org/thread/odc1s1pt5m2tk76owxq61y55kytf13sf
>>>>>>>>>
>>>>>>>>> On Wed, Oct 30, 2024 at 4:28 AM guo Maxwell <cclive1...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> So we should be able to start voting on this now.
>>>>>>>>>>
>>>>>>>>>> guo Maxwell <cclive1...@gmail.com> 于2024年10月28日周一 17:20写道:
>>>>>>>>>>
>>>>>>>>>>> Here  is the latest updated CEP-43
>>>>>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-43++Apache+Cassandra+CREATE+TABLE++LIKE>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com> 于2024年10月24日周四 19:53写道:
>>>>>>>>>>>
>>>>>>>>>>>> yes,you are right. I will add this
>>>>>>>>>>>>
>>>>>>>>>>>> Štefan Miklošovič <smikloso...@apache.org>于2024年10月24日
>>>>>>>>>>>> 周四下午4:42写道:
>>>>>>>>>>>>
>>>>>>>>>>>>> The CEP should also mention that copying system tables or
>>>>>>>>>>>>> virtual tables or materialized views and similar are not 
>>>>>>>>>>>>> supported and an
>>>>>>>>>>>>> attempt of doing so will error out.
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Oct 24, 2024 at 7:16 AM Dave Herrington <
>>>>>>>>>>>>> he...@rhinosource.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Strong +1 to copy all options by default. This is intuitive
>>>>>>>>>>>>>> to me.  Then I would like to explicitly override any options of 
>>>>>>>>>>>>>> my choosing.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Oct 23, 2024 at 9:57 PM guo Maxwell <
>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> OK,thank you for your suggestions ,I will revise the CEP and
>>>>>>>>>>>>>>> copy table OPTIONS by default.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Jon Haddad <j...@rustyrazorblade.com>于2024年10月23日 周三下午9:18写道:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Also strongly +1 to copying all the options.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Wed, Oct 23, 2024 at 5:52 AM Josh McKenzie <
>>>>>>>>>>>>>>>> jmcken...@apache.org> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I'm a very strong +1 to having the default functionality
>>>>>>>>>>>>>>>>> be to copy *ALL* options.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Intuitively, as a user, if I tell a software system to
>>>>>>>>>>>>>>>>> make a clone of something I don't expect it to be shallow or 
>>>>>>>>>>>>>>>>> a subset
>>>>>>>>>>>>>>>>> defined by some external developer somewhere. I expect it to 
>>>>>>>>>>>>>>>>> be a clone.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Adding in some kind of "lean" mode or "column only" is
>>>>>>>>>>>>>>>>> fine if someone can make a cogent argument around its 
>>>>>>>>>>>>>>>>> inclusion. I don't
>>>>>>>>>>>>>>>>> personally see a use-case for it right now but definitely 
>>>>>>>>>>>>>>>>> open to being
>>>>>>>>>>>>>>>>> educated.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Oct 23, 2024, at 3:03 AM, Štefan Miklošovič wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> options are inherently part of that table as well, same as
>>>>>>>>>>>>>>>>> schema. In fact, _schema_ includes all options. Not just 
>>>>>>>>>>>>>>>>> columns and its
>>>>>>>>>>>>>>>>> names. If you change some option, you effectively have a 
>>>>>>>>>>>>>>>>> different schema,
>>>>>>>>>>>>>>>>> schema version changes by changing an option. So if we do not 
>>>>>>>>>>>>>>>>> copy options
>>>>>>>>>>>>>>>>> too, we are kind of faking it (when we do not specify WITH 
>>>>>>>>>>>>>>>>> OPTIONS).
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Also, imagine a situation where Accord is merged to trunk.
>>>>>>>>>>>>>>>>> It introduces a new schema option called "transactional = 
>>>>>>>>>>>>>>>>> full" which is
>>>>>>>>>>>>>>>>> not default. (I am sorry if I did the spelling wrong here). 
>>>>>>>>>>>>>>>>> So, when you
>>>>>>>>>>>>>>>>> have a table with transactional support and you do "create 
>>>>>>>>>>>>>>>>> table ks.tb_copy
>>>>>>>>>>>>>>>>> like ks.tb", when you _do not_ copy all options, this table 
>>>>>>>>>>>>>>>>> will _not_
>>>>>>>>>>>>>>>>> become transactional.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The next thing you go to do is to execute some
>>>>>>>>>>>>>>>>> transactions against this table but well ... you can not do 
>>>>>>>>>>>>>>>>> that, because
>>>>>>>>>>>>>>>>> your table is not transactional, because you have forgotten 
>>>>>>>>>>>>>>>>> to add "WITH
>>>>>>>>>>>>>>>>> OPTIONS". So you need to go back to that and do "ALTER 
>>>>>>>>>>>>>>>>> ks.tb_copy WITH
>>>>>>>>>>>>>>>>> transactional = full" just to support that.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I think that you see from this pattern that it is way
>>>>>>>>>>>>>>>>> better if we copy all options by default instead of 
>>>>>>>>>>>>>>>>> consciously opt-in into
>>>>>>>>>>>>>>>>> them.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> also:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> "but I think there are also some users want to do basic
>>>>>>>>>>>>>>>>> column information copy"
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> where is this coming from? Do you have this idea somehow
>>>>>>>>>>>>>>>>> empirically tested? I just do not see why somebody would want 
>>>>>>>>>>>>>>>>> to have
>>>>>>>>>>>>>>>>> Cassandra's defaults instead of what a base table contains.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Oct 23, 2024 at 8:28 AM guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The reason for using OPTION keyword is that I want to
>>>>>>>>>>>>>>>>> provide users with more choices .
>>>>>>>>>>>>>>>>> The default behavior for copying a table is to copy the
>>>>>>>>>>>>>>>>> basic item of table (column and their data 
>>>>>>>>>>>>>>>>> type,mask,constraint),others
>>>>>>>>>>>>>>>>> thing belongs to the table like option,views,trigger
>>>>>>>>>>>>>>>>> are optional in my mind.
>>>>>>>>>>>>>>>>> You are absolutely right that users may want to copy all
>>>>>>>>>>>>>>>>> stuff but I think there are aslo some users want to do basic 
>>>>>>>>>>>>>>>>> column
>>>>>>>>>>>>>>>>> information copy,So I just give them a choice。As we know that 
>>>>>>>>>>>>>>>>> the number of
>>>>>>>>>>>>>>>>> table parameters is not
>>>>>>>>>>>>>>>>> small,compression,compaction,gc_seconds,bf_chance,speculative_retry
>>>>>>>>>>>>>>>>>  and so
>>>>>>>>>>>>>>>>> on.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Besides we can see that pg have also the keyword
>>>>>>>>>>>>>>>>> COMMENT,COMPRESSION which have the similar behavior as our 
>>>>>>>>>>>>>>>>> OPTION keyword。
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> So that is why I add this keyword OPTION.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Štefan Miklošovič <smikloso...@apache.org>于2024年10月22日
>>>>>>>>>>>>>>>>> 周二下午11:40写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The problem is that when I do this minimal CQL which shows
>>>>>>>>>>>>>>>>> this feature:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CREATE TABLE ks.tb_copy LIKE ks.tb;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> then you are saying that when I _do not_ specify WITH
>>>>>>>>>>>>>>>>> OPTIONS then I get Cassandra's defaults. Only after I specify 
>>>>>>>>>>>>>>>>> WITH OPTIONS,
>>>>>>>>>>>>>>>>> it would truly be a copy.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> This is not a good design. Because to have an exact copy,
>>>>>>>>>>>>>>>>> I have to make a conscious effort to include OPTIONS as well. 
>>>>>>>>>>>>>>>>> That should
>>>>>>>>>>>>>>>>> not be the case. I just want to have a copy, totally the same 
>>>>>>>>>>>>>>>>> stuff, when I
>>>>>>>>>>>>>>>>> use the minimal version of that statement. It would be better 
>>>>>>>>>>>>>>>>> to opt-out
>>>>>>>>>>>>>>>>> from options like
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CREATE TABLE ks.tb_copy LIKE ks.tb WITHOUT OPTIONS (you
>>>>>>>>>>>>>>>>> feel me) but we do not support this (yet).
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Tue, Oct 22, 2024 at 5:28 PM Štefan Miklošovič <
>>>>>>>>>>>>>>>>> smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I just don't see OPTIONS as important. When I want to copy
>>>>>>>>>>>>>>>>> a table, I am copying a table _with everything_. Options 
>>>>>>>>>>>>>>>>> included, by
>>>>>>>>>>>>>>>>> default. Why would I want to have a copy of a table with 
>>>>>>>>>>>>>>>>> options different
>>>>>>>>>>>>>>>>> from the base one?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Mon, Oct 21, 2024 at 3:55 PM Bernardo Botella <
>>>>>>>>>>>>>>>>> conta...@bernardobotella.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi Guo,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> +1 for the CONSTRAINTS keyword to be added into the
>>>>>>>>>>>>>>>>> default behavior.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Bernardo
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Oct 21, 2024, at 12:01 AM, guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I think the CONSTRAINTS keyword  keyword may be in the
>>>>>>>>>>>>>>>>> same situation as datamask.
>>>>>>>>>>>>>>>>> Maybe it is better to include  constraints into  the
>>>>>>>>>>>>>>>>> default behavior of table copy together with column name, 
>>>>>>>>>>>>>>>>> column data type
>>>>>>>>>>>>>>>>> and data mask.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com> 于2024年10月21日周一 14:56写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> To yifan :
>>>>>>>>>>>>>>>>> I don't mind adding the ALL keyword, and it has been
>>>>>>>>>>>>>>>>> updated into CEP.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> As all you can see, our original intention was that the
>>>>>>>>>>>>>>>>> grammar would not be too complicated, which is what I 
>>>>>>>>>>>>>>>>> described in
>>>>>>>>>>>>>>>>> cep
>>>>>>>>>>>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-43++Apache+Cassandra+CREATE+TABLE++LIKE>
>>>>>>>>>>>>>>>>> .
>>>>>>>>>>>>>>>>> We gave up PG-related grammar, including
>>>>>>>>>>>>>>>>> INCLUDING/EXCLUDING and so on .
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com> 于2024年10月21日周一 14:52写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi ,
>>>>>>>>>>>>>>>>> To sefan :
>>>>>>>>>>>>>>>>> I may want to explain that if there is no OPTION keyword
>>>>>>>>>>>>>>>>> in the CQL statement, then the newly created table will only 
>>>>>>>>>>>>>>>>> have the
>>>>>>>>>>>>>>>>> original table's  column name 、column type and data mask ,I 
>>>>>>>>>>>>>>>>> think this is
>>>>>>>>>>>>>>>>> the most basic choice when copying tables to users.
>>>>>>>>>>>>>>>>> Then  we do some  addition, we can add original table's
>>>>>>>>>>>>>>>>> table options like compaction strategy/compress 
>>>>>>>>>>>>>>>>> strategy、index and so on.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Recently, I have also thought about the situation of
>>>>>>>>>>>>>>>>> CONSTRAINTS keyword. I think it is similar to data mask. 
>>>>>>>>>>>>>>>>> Agree that it
>>>>>>>>>>>>>>>>> should be included in the basic options of  table copy 
>>>>>>>>>>>>>>>>> (column name, column
>>>>>>>>>>>>>>>>> data type , column data mask and constraints).
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Dave Herrington <he...@rhinosource.com> 于2024年10月19日周六
>>>>>>>>>>>>>>>>> 01:15写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> It seems like a natural extension of the CREATE TABLE
>>>>>>>>>>>>>>>>> statement.  Looking forward to using it in the future.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Oct 17, 2024 at 5:11 PM Štefan Miklošovič <
>>>>>>>>>>>>>>>>> smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Right?! Reads like English, the impact on the existing CQL
>>>>>>>>>>>>>>>>> is minimal. One LIKE which basically needs to be there and 
>>>>>>>>>>>>>>>>> keywords of
>>>>>>>>>>>>>>>>> logical "components" which seamlessly integrate with WITH.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I would _not_ use WITH CONSTRAINTS because constraints
>>>>>>>>>>>>>>>>> will be inherently part of a table schema. It is not an 
>>>>>>>>>>>>>>>>> "option". We can
>>>>>>>>>>>>>>>>> not "opt-out" from them. Remember we are copying a table here 
>>>>>>>>>>>>>>>>> so if a base
>>>>>>>>>>>>>>>>> one has constraints, its copy will have them too. A user can 
>>>>>>>>>>>>>>>>> subsequently
>>>>>>>>>>>>>>>>> "ALTER" them.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Oct 17, 2024 at 5:31 PM Dave Herrington <
>>>>>>>>>>>>>>>>> he...@rhinosource.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Basing it on CREATE TABLE, the BNF definition of the
>>>>>>>>>>>>>>>>> simple implementation would look something like this:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> create_table_statement::= CREATE TABLE [ IF NOT EXISTS ]
>>>>>>>>>>>>>>>>> table_name LIKE base_table_name
>>>>>>>>>>>>>>>>> [ WITH included_objects ] [ [ AND ] table_options ]
>>>>>>>>>>>>>>>>> table_options::= COMPACT STORAGE [ AND table_options ]
>>>>>>>>>>>>>>>>> | CLUSTERING ORDER BY '(' clustering_order ')'
>>>>>>>>>>>>>>>>> [ AND table_options ]  | options
>>>>>>>>>>>>>>>>> clustering_order::= column_name (ASC | DESC) ( ','
>>>>>>>>>>>>>>>>> column_name (ASC | DESC) )*
>>>>>>>>>>>>>>>>> included_objects::= dependent_objects [ AND
>>>>>>>>>>>>>>>>> dependent_objects ]
>>>>>>>>>>>>>>>>> dependent_objects:= INDEXES | TRIGGERS | CONSTRAINTS |
>>>>>>>>>>>>>>>>> VIEWS
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CREATE TABLE [ IF NOT EXISTS ]
>>>>>>>>>>>>>>>>> [<keyspace_name>.]<table_name> LIKE 
>>>>>>>>>>>>>>>>> [<keyspace_name>.]<base_table_name>
>>>>>>>>>>>>>>>>>   [ WITH [ <included_objects > ]
>>>>>>>>>>>>>>>>>   [ [ AND ] [ <table_options> ] ]
>>>>>>>>>>>>>>>>>   [ [ AND ] CLUSTERING ORDER BY [ <clustering_column_name>
>>>>>>>>>>>>>>>>> (ASC | DESC) ] ]
>>>>>>>>>>>>>>>>> ;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Examples:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -- Create base table:
>>>>>>>>>>>>>>>>> CREATE TABLE cycling.cyclist_name (
>>>>>>>>>>>>>>>>>   id UUID PRIMARY KEY,
>>>>>>>>>>>>>>>>>   lastname text,
>>>>>>>>>>>>>>>>>   firstname text
>>>>>>>>>>>>>>>>> );
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -- Create an exact copy of the base table, but do not
>>>>>>>>>>>>>>>>> create any dependent objects:
>>>>>>>>>>>>>>>>> CREATE TABLE cycling.cyclist_name2 LIKE
>>>>>>>>>>>>>>>>> cycling.cyclist_name;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -- Create an exact copy with all dependent objects
>>>>>>>>>>>>>>>>> (constraints excluded for now):
>>>>>>>>>>>>>>>>> CREATE TABLE cycling.cyclist_name3 LIKE
>>>>>>>>>>>>>>>>> cycling.cyclist_name
>>>>>>>>>>>>>>>>> WITH INDEXES AND TRIGGERS AND VIEWS;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -- Create a copy with LCS compaction, a default TTL and
>>>>>>>>>>>>>>>>> all dependent objects except indexes:
>>>>>>>>>>>>>>>>> CREATE TABLE cycling.cyclist_name4 LIKE
>>>>>>>>>>>>>>>>> cycling.cyclist_name
>>>>>>>>>>>>>>>>> WITH TRIGGERS AND VIEWS
>>>>>>>>>>>>>>>>> AND compaction = { 'class' :  'LeveledCompactionStrategy' }
>>>>>>>>>>>>>>>>> AND default_time_to_live = 86400;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> This seems pretty clean & straightforward.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Oct 17, 2024 at 4:05 PM Dave Herrington <
>>>>>>>>>>>>>>>>> he...@rhinosource.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> This simple approach resonates with me.  I think the
>>>>>>>>>>>>>>>>> Cassandra doc uses "INDEXES" as the plural for index, i.e.:
>>>>>>>>>>>>>>>>> https://cassandra.apache.org/doc/stable/cassandra/cql/indexes.html
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Oct 17, 2024 at 2:39 PM Štefan Miklošovič <
>>>>>>>>>>>>>>>>> smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Well we could do something like:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CREATE TABLE ks.tb_copy LIKE ks.tb WITH INDICES AND
>>>>>>>>>>>>>>>>> TRIGGERS AND compaction = {'class': '.... } AND ...
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> but I can admit it might be seen as an overreach and I am
>>>>>>>>>>>>>>>>> not sure at all how it would look like in the implementation 
>>>>>>>>>>>>>>>>> because we
>>>>>>>>>>>>>>>>> would need to distinguish WITH INDICES from table options.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I would
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>    1. +0 on ALL. - we don't need this. If we have just
>>>>>>>>>>>>>>>>>    INDICES, TRIGGERS, VIEWS at this point, I don't think 
>>>>>>>>>>>>>>>>> enumerating it all is
>>>>>>>>>>>>>>>>>    too much to ask. This is just an implementation detail and 
>>>>>>>>>>>>>>>>> if we find it
>>>>>>>>>>>>>>>>>    necessary we can add it later. If you feel strongly about 
>>>>>>>>>>>>>>>>> this then add
>>>>>>>>>>>>>>>>>    that but it is not absolutely necessary.
>>>>>>>>>>>>>>>>>    2. omit OPTIONS - aren't all options copied by
>>>>>>>>>>>>>>>>>    default? That is the goal of the CEP, no? We might just use
>>>>>>>>>>>>>>>>>    normal CQL while overriding from the base table
>>>>>>>>>>>>>>>>>    3. mix keywords like TRIGGERS / INDICES / CONSTRAINTS
>>>>>>>>>>>>>>>>>    into normal table creation statement
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Oct 17, 2024 at 3:20 PM Yifan Cai <
>>>>>>>>>>>>>>>>> yc25c...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I would second Štefan's option for functionality
>>>>>>>>>>>>>>>>> simplicity. It seems to be unnecessary to have the keywords 
>>>>>>>>>>>>>>>>> for both
>>>>>>>>>>>>>>>>> inclusion and exclusion in the CEP. If needed, the exclusion 
>>>>>>>>>>>>>>>>> (WITHOUT) can
>>>>>>>>>>>>>>>>> be introduced later. It would still be backward compatible.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Regarding "CREATE TABLE ks.tb_copy LIKE ks.tb WITH
>>>>>>>>>>>>>>>>> compaction = {'class': '.... } AND ... ", I think it only 
>>>>>>>>>>>>>>>>> overrides the
>>>>>>>>>>>>>>>>> table options. The CEP suggests the coarse-grained keyword 
>>>>>>>>>>>>>>>>> for each
>>>>>>>>>>>>>>>>> category like table options, indexes, etc. The functionality 
>>>>>>>>>>>>>>>>> provided is
>>>>>>>>>>>>>>>>> not identical.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I understand that the suggestions are to make operators'
>>>>>>>>>>>>>>>>> life easier by achieving table creation in a single 
>>>>>>>>>>>>>>>>> statement. What is
>>>>>>>>>>>>>>>>> being proposed in the CEP seems to be at a good balance 
>>>>>>>>>>>>>>>>> point. Operators
>>>>>>>>>>>>>>>>> can alter the table options if needed in the follow-up ALTER 
>>>>>>>>>>>>>>>>> table
>>>>>>>>>>>>>>>>> statement.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> - Yifan
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Oct 17, 2024 at 1:41 PM Štefan Miklošovič <
>>>>>>>>>>>>>>>>> smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I think we are starting to complicate it. For me the most
>>>>>>>>>>>>>>>>> important question is who is actually this feature for? If 
>>>>>>>>>>>>>>>>> people want to
>>>>>>>>>>>>>>>>> just prototype something fast or they just want to have "the 
>>>>>>>>>>>>>>>>> same table
>>>>>>>>>>>>>>>>> just under a different name", I think that is going to be 
>>>>>>>>>>>>>>>>> used in 99% of
>>>>>>>>>>>>>>>>> cases.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> My assumption of using WITH which I think I proposed first
>>>>>>>>>>>>>>>>> (4th post in this thread) was to just blindly copy the most 
>>>>>>>>>>>>>>>>> important
>>>>>>>>>>>>>>>>> "parts" logically related to a table, be it indices, 
>>>>>>>>>>>>>>>>> materialized views, or
>>>>>>>>>>>>>>>>> triggers and enable / disable them as we wish. If no "WITH" 
>>>>>>>>>>>>>>>>> is used, then
>>>>>>>>>>>>>>>>> we just get a table with nothing else. "WITH" will opt-in 
>>>>>>>>>>>>>>>>> into that.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Seeing us contemplating using "INCLUDING" and "EXCLUDING"
>>>>>>>>>>>>>>>>> on individual options makes me sad a little bit. I think we 
>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>> over-engineering this. I just don't see a reasonable use-case 
>>>>>>>>>>>>>>>>> where users
>>>>>>>>>>>>>>>>> would need to cherry-pick what they want and what not. Isn't 
>>>>>>>>>>>>>>>>> that just too
>>>>>>>>>>>>>>>>> complicated? If a table being copied drifts away too much 
>>>>>>>>>>>>>>>>> from the original
>>>>>>>>>>>>>>>>> one then users would be better off with creating a brand new 
>>>>>>>>>>>>>>>>> table with CQL
>>>>>>>>>>>>>>>>> as they are used to, not dealing with "copying" at all. More 
>>>>>>>>>>>>>>>>> we drift from
>>>>>>>>>>>>>>>>> what the original table was like, the less useful this 
>>>>>>>>>>>>>>>>> feature is.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Oct 16, 2024 at 10:03 PM Dave Herrington <
>>>>>>>>>>>>>>>>> he...@rhinosource.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Sorry that I overlooked the definition of the default in
>>>>>>>>>>>>>>>>> the CEP.  I did look for it but I didn’t see it.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I think the default behavior you explained makes perfect
>>>>>>>>>>>>>>>>> sense & what one would expect.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I like the flexibility of INCLUDING and EXCLUDING that you
>>>>>>>>>>>>>>>>> are considering.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Would it make sense to use WITH for table options, which
>>>>>>>>>>>>>>>>> would make it easy (and less confusing IMHO) to override the 
>>>>>>>>>>>>>>>>> defaults from
>>>>>>>>>>>>>>>>> the source table, then use INCLUDING/EXCLUDING for all 
>>>>>>>>>>>>>>>>> non-table options
>>>>>>>>>>>>>>>>> such as constraints and indices?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> It seems this would be easier to document as well, as it
>>>>>>>>>>>>>>>>> could just point to the CREATE TABLE doc for the options, 
>>>>>>>>>>>>>>>>> rather than
>>>>>>>>>>>>>>>>> trying to explain a bunch of keywords that map to table 
>>>>>>>>>>>>>>>>> options.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> David A. Herrington II
>>>>>>>>>>>>>>>>> President and Chief Engineer
>>>>>>>>>>>>>>>>> RhinoSource, Inc.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced
>>>>>>>>>>>>>>>>> Analytics.*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> www.rhinosource.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Oct 16, 2024 at 7:57 PM guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> To yifan :
>>>>>>>>>>>>>>>>> At the beginning of the period, I also thought about
>>>>>>>>>>>>>>>>> adding the keyword ALL, refer to pg
>>>>>>>>>>>>>>>>> <https://www.postgresql.org/docs/current/sql-createtable.html>
>>>>>>>>>>>>>>>>>  ,
>>>>>>>>>>>>>>>>> but  I give up when writing cep as I find that there may be 
>>>>>>>>>>>>>>>>> not so many
>>>>>>>>>>>>>>>>> properties (only three) to copy for C* and
>>>>>>>>>>>>>>>>> It is possible to decide what is needed and what is not in
>>>>>>>>>>>>>>>>> a very simple cql, as our ALL is only three properties here. 
>>>>>>>>>>>>>>>>> I want to keep
>>>>>>>>>>>>>>>>> it as simple as possible (based on the advice given by 
>>>>>>>>>>>>>>>>> Benjamin), So I
>>>>>>>>>>>>>>>>> grouped
>>>>>>>>>>>>>>>>> the properties of the table into one category and
>>>>>>>>>>>>>>>>> expressed it with OPTION keyword.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> But if we are going to split the first keyword OPTION  to
>>>>>>>>>>>>>>>>> COMPRESSION 、COMPACTION、COMMENT and so on. I am +1 on adding 
>>>>>>>>>>>>>>>>> ALL back as
>>>>>>>>>>>>>>>>> the properties are so many and it is simple to use ALL 
>>>>>>>>>>>>>>>>> instead of
>>>>>>>>>>>>>>>>> list all properties. Besides I may change my keyword WITH
>>>>>>>>>>>>>>>>> to INCLUDING and adding another keyword EXCLUDING to flexibly 
>>>>>>>>>>>>>>>>> copy table
>>>>>>>>>>>>>>>>> properties through simple sql statements, like using   1 not  
>>>>>>>>>>>>>>>>> 2
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>    1.  CREATE TABLE newTb like oldTb INCLUDING ALL
>>>>>>>>>>>>>>>>>    EXCLUDING INDEXES AND COMMENTS.
>>>>>>>>>>>>>>>>>    2.  CREATE TABLE newTb like oldTb INCLUDING
>>>>>>>>>>>>>>>>>    COMPRESSION CONSTRAINTS GENERATED IDENTITY STATISTICS 
>>>>>>>>>>>>>>>>> STORAGE
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Conclusion: If there may be more keywords to consider in
>>>>>>>>>>>>>>>>> the future, such as more than 4 , I am +1 on adding ALL back .
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> To Dave :
>>>>>>>>>>>>>>>>>    Default behavior is only copy column name, data type
>>>>>>>>>>>>>>>>> ,data mask , you can see more detail from  CEP-43
>>>>>>>>>>>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-43++Apache+Cassandra+CREATE+TABLE++LIKE>
>>>>>>>>>>>>>>>>> .
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Patrick McFadin <pmcfa...@gmail.com> 于2024年10月17日周四
>>>>>>>>>>>>>>>>> 06:43写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> +1 That makes much more sense in my experience.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Oct 16, 2024 at 12:12 PM Dave Herrington <
>>>>>>>>>>>>>>>>> he...@rhinosource.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I'm coming at this with both a deep ANSI SQL background as
>>>>>>>>>>>>>>>>> well as CQL background.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Defining the default behavior is the starting point.  What
>>>>>>>>>>>>>>>>> gets copied if we do "CREATE TABLE new_table LIKE 
>>>>>>>>>>>>>>>>> original_table;" without
>>>>>>>>>>>>>>>>> a WITH clause?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Then, you build on that with the specific WITH options.
>>>>>>>>>>>>>>>>> WITH ALL catches everything.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Oct 16, 2024 at 11:16 AM Yifan Cai <
>>>>>>>>>>>>>>>>> yc25c...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> "WITH ALL" seems to be a natural addition to the
>>>>>>>>>>>>>>>>> directives. What do you think about adding the fifth keyword 
>>>>>>>>>>>>>>>>> ALL to retain
>>>>>>>>>>>>>>>>> all fields of the table schema?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> For instance, CREATE TABLE new_table LIKE original_table
>>>>>>>>>>>>>>>>> WITH ALL, it replicates options, indexes, triggers, 
>>>>>>>>>>>>>>>>> constraints and any
>>>>>>>>>>>>>>>>> applicable kinds that are introduced in the future.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> - Yifan
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Oct 16, 2024 at 7:46 AM guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Disscussed with Bernardo on slack,and +1 with his advice
>>>>>>>>>>>>>>>>> on adding a fourth keyword.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The keyword would be  CONSTRAINTS , any more suggestion ?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com>于2024年10月16日 周三上午9:55写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi yifan,
>>>>>>>>>>>>>>>>> Thanks for bringing this up. The SELECT permission on the
>>>>>>>>>>>>>>>>> original table is needed. Mysql and PG all have mentioned 
>>>>>>>>>>>>>>>>> this, and I also
>>>>>>>>>>>>>>>>> specifically noticed this in my code.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I probably missed this in the cep documentation. 😅
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Yifan Cai <yc25c...@gmail.com> 于2024年10月16日周三 07:46写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks for creating the CEP! I think it is missing
>>>>>>>>>>>>>>>>> Bernardo's comment on "the need for read permissions on the 
>>>>>>>>>>>>>>>>> source table".
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CreateTableStatement does not check the permissions
>>>>>>>>>>>>>>>>> outside of the enclosing keyspace. Having the SELECT 
>>>>>>>>>>>>>>>>> permission on the
>>>>>>>>>>>>>>>>> original table is a requirement for CREATE TABLE LIKE.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> - Yifan
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Sun, Sep 29, 2024 at 11:01 PM guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hello, everyone ,
>>>>>>>>>>>>>>>>> I have finished the doc for CEP-43 for CREATE_TABLE_LIKE
>>>>>>>>>>>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-43++Apache+Cassandra+CREATE+TABLE++LIKE>
>>>>>>>>>>>>>>>>>  as
>>>>>>>>>>>>>>>>> said before, looking forward to your suggestions.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Štefan Miklošovič <smikloso...@apache.org> 于2024年9月25日周三
>>>>>>>>>>>>>>>>> 03:51写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I am sorry I do not follow what you mean, maybe an example
>>>>>>>>>>>>>>>>> would help.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Tue, Sep 24, 2024 at 6:18 PM guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> If there are multiple schema information changes in one
>>>>>>>>>>>>>>>>> ddl statement, will there be schema conflicts in extreme 
>>>>>>>>>>>>>>>>> cases?
>>>>>>>>>>>>>>>>> For example, our statement contains both table creation
>>>>>>>>>>>>>>>>> and index creation.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com>于2024年9月24日 周二下午8:12写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> +1 on splitting this task  and adding the ability to copy
>>>>>>>>>>>>>>>>> tables through different keyspaces in the future.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Štefan Miklošovič <smikloso...@apache.org> 于2024年9月23日周一
>>>>>>>>>>>>>>>>> 22:05写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> If we have this table
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CREATE TABLE ks.tb2 (
>>>>>>>>>>>>>>>>>     id int PRIMARY KEY,
>>>>>>>>>>>>>>>>>     name text
>>>>>>>>>>>>>>>>> );
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I can either specify name of an index on my own like this:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CREATE INDEX name_index ON ks.tb2 (name) ;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> or I can let Cassandra to figure that name on its own:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CREATE INDEX ON ks.tb2 (name) ;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> in that case it will name that index "tb2_name_idx".
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hence, I would expect that when we do
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ALTER TABLE ks.to_copy LIKE ks.tb2 WITH INDICES;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Then ks.to_copy table will have an index which is called
>>>>>>>>>>>>>>>>> "to_copy_name_idx" without me doing anything.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> For types, we do not need to do anything when we deal with
>>>>>>>>>>>>>>>>> the same keyspace. For simplicity, I mentioned that we might 
>>>>>>>>>>>>>>>>> deal with the
>>>>>>>>>>>>>>>>> same keyspace scenario only for now and iterate on that in 
>>>>>>>>>>>>>>>>> the future.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Mon, Sep 23, 2024 at 8:53 AM guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hello everyone,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Cep is being written, and I encountered some problems
>>>>>>>>>>>>>>>>> during the process. I would like to discuss them with you. If 
>>>>>>>>>>>>>>>>> you read the
>>>>>>>>>>>>>>>>> description of this CASSANDRA-7662
>>>>>>>>>>>>>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-7662>,
>>>>>>>>>>>>>>>>> we will find that initially the original creator of this jira 
>>>>>>>>>>>>>>>>> did not
>>>>>>>>>>>>>>>>> intend to implement structural copying of indexes, views, and 
>>>>>>>>>>>>>>>>> triggers
>>>>>>>>>>>>>>>>> only the column and its data type.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> However, after investigating some db related syntax and
>>>>>>>>>>>>>>>>> function implementation, I found that it may be necessary for 
>>>>>>>>>>>>>>>>> us to provide
>>>>>>>>>>>>>>>>> some rich syntax to support the replication of indexes, 
>>>>>>>>>>>>>>>>> views, etc.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> In order to support selective copy of the basic structure
>>>>>>>>>>>>>>>>> of the table (columns and types), table options, 
>>>>>>>>>>>>>>>>> table-related indexes,
>>>>>>>>>>>>>>>>> views, triggers, etc. We need some new syntax, it seems that 
>>>>>>>>>>>>>>>>> the syntax of
>>>>>>>>>>>>>>>>> pg is relatively comprehensive, it use the keyword 
>>>>>>>>>>>>>>>>> INCLUDING/EXCLUDING to
>>>>>>>>>>>>>>>>> flexibly control the removal and retention of indexes, table 
>>>>>>>>>>>>>>>>> information,
>>>>>>>>>>>>>>>>> etc. see pg create table like
>>>>>>>>>>>>>>>>> <https://www.postgresql.org/docs/8.1/sql-createtable.html>
>>>>>>>>>>>>>>>>> , the new created index name is different from the original 
>>>>>>>>>>>>>>>>> table's index
>>>>>>>>>>>>>>>>> name , seenewly copied index names are different from
>>>>>>>>>>>>>>>>> original
>>>>>>>>>>>>>>>>> <https://github.com/postgres/postgres/blob/master/doc/src/sgml/ref/create_table.sgml#L749>
>>>>>>>>>>>>>>>>> , the name is based on some rule.
>>>>>>>>>>>>>>>>> Mysql is relatively simple and copies columns and indexes
>>>>>>>>>>>>>>>>> by default. see mysql create table like
>>>>>>>>>>>>>>>>> <https://dev.mysql.com/doc/refman/8.4/en/create-table-like.html>
>>>>>>>>>>>>>>>>> and the newly created index name is the same with the 
>>>>>>>>>>>>>>>>> original table's
>>>>>>>>>>>>>>>>> index name.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> So for Casandra, I hope it can also support the
>>>>>>>>>>>>>>>>> information copy of index and even view/trigger. And I also 
>>>>>>>>>>>>>>>>> hope to be able
>>>>>>>>>>>>>>>>> to flexibly decide which information is copied like pg.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Besides, I think the copy can happen between different
>>>>>>>>>>>>>>>>> keyspaces. And UDT needs to be taken into account.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> But as we know the index/view/trigger name are all under
>>>>>>>>>>>>>>>>> keyspace level, so it seems that the newly created index name 
>>>>>>>>>>>>>>>>> (or view
>>>>>>>>>>>>>>>>> name/ trigger name) must be different from the original 
>>>>>>>>>>>>>>>>> tables' ,otherwise
>>>>>>>>>>>>>>>>>  names would clash .
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> So regarding the above problem, one idea I have is that
>>>>>>>>>>>>>>>>> for newly created types, indexes and views under different 
>>>>>>>>>>>>>>>>> keyspaces and
>>>>>>>>>>>>>>>>> the same keyspace, we first generate random names for them, 
>>>>>>>>>>>>>>>>> and then we can
>>>>>>>>>>>>>>>>> add the ability of modifying the names(for 
>>>>>>>>>>>>>>>>> types/indexes/views/triggers) so
>>>>>>>>>>>>>>>>> that users can manually change the names.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com> 于2024年9月20日周五 08:06写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> No,I think still need some discuss on grammar detail after
>>>>>>>>>>>>>>>>> I finish the first version
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Patrick McFadin <pmcfa...@gmail.com>于2024年9月20日
>>>>>>>>>>>>>>>>> 周五上午2:24写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Is this CEP ready for a VOTE thread?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Sat, Aug 24, 2024 at 8:56 PM guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thank you for your replies, I will prepare a CEP later.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Patrick McFadin <pmcfa...@gmail.com> 于2024年8月20日周二
>>>>>>>>>>>>>>>>> 02:11写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> +1 This is a CEP
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Mon, Aug 19, 2024 at 10:50 AM Jon Haddad <
>>>>>>>>>>>>>>>>> j...@jonhaddad.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Given the fairly large surface area for this, i think it
>>>>>>>>>>>>>>>>> should be a CEP.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> —
>>>>>>>>>>>>>>>>> Jon Haddad
>>>>>>>>>>>>>>>>> Rustyrazorblade Consulting
>>>>>>>>>>>>>>>>> rustyrazorblade.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Mon, Aug 19, 2024 at 10:44 AM Bernardo Botella <
>>>>>>>>>>>>>>>>> conta...@bernardobotella.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Definitely a nice addition to CQL.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Looking for inspiration at how Postgres and Mysql do that
>>>>>>>>>>>>>>>>> may also help with the final design (I like the WITH proposed 
>>>>>>>>>>>>>>>>> by Stefan,
>>>>>>>>>>>>>>>>> but I would definitely take a look at the INCLUDING keyword 
>>>>>>>>>>>>>>>>> proposed by
>>>>>>>>>>>>>>>>> Postgres).
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> https://www.postgresql.org/docs/current/sql-createtable.html
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> https://dev.mysql.com/doc/refman/8.4/en/create-table-like.html
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On top of that, and as part of the interesting questions,
>>>>>>>>>>>>>>>>> I would like to add the permissions to the mix. Both the 
>>>>>>>>>>>>>>>>> question about
>>>>>>>>>>>>>>>>> copying them over (with a WITH keyword probably), and the 
>>>>>>>>>>>>>>>>> need for read
>>>>>>>>>>>>>>>>> permissions on the source table as well.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Bernardo
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Aug 19, 2024, at 10:01 AM, Štefan Miklošovič <
>>>>>>>>>>>>>>>>> smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> BTW this would be cool to do as well:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ALTER TABLE ks.to_copy LIKE ks.tb WITH INDICES;
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> This would mean that if we create a copy of a table, later
>>>>>>>>>>>>>>>>> we can decide that we need indices too, so we might "enrich" 
>>>>>>>>>>>>>>>>> that table
>>>>>>>>>>>>>>>>> with indices from the old one without necessarily explicitly 
>>>>>>>>>>>>>>>>> re-creating
>>>>>>>>>>>>>>>>> them on that new table.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Mon, Aug 19, 2024 at 6:55 PM Štefan Miklošovič <
>>>>>>>>>>>>>>>>> smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I think this is an interesting idea worth exploring. I
>>>>>>>>>>>>>>>>> definitely agree with Benjamin who raised important questions 
>>>>>>>>>>>>>>>>> which needs
>>>>>>>>>>>>>>>>> to be answered first. Also, what about triggers?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> It might be rather "easy" to come up with something simple
>>>>>>>>>>>>>>>>> but it should be a comprehensive solution with predictable 
>>>>>>>>>>>>>>>>> behavior we all
>>>>>>>>>>>>>>>>> agree on.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> If a keyspace of a new table does not exist we would need
>>>>>>>>>>>>>>>>> to create that one too before. For the simplicity, I would 
>>>>>>>>>>>>>>>>> just make it a
>>>>>>>>>>>>>>>>> must to create it on same keyspace. We might iterate on that 
>>>>>>>>>>>>>>>>> in the future.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> UDTs are created per keyspace so there is nothing to
>>>>>>>>>>>>>>>>> re-create. We just need to reference it from a new table, 
>>>>>>>>>>>>>>>>> right?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Indexes and MVs are interesting but in theory they might
>>>>>>>>>>>>>>>>> be re-created too.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Would it be appropriate to use something like this?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> CREATE TABLE ks.tb_copy LIKE ks.tb WITH INDEXES AND VIEWS
>>>>>>>>>>>>>>>>> AND TRIGGERS ....
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Without "WITH" it would just copy a table with nothing
>>>>>>>>>>>>>>>>> else.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Mon, Aug 19, 2024 at 6:10 PM guo Maxwell <
>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hello, everyone:
>>>>>>>>>>>>>>>>> As  Jira CASSANDRA-7662
>>>>>>>>>>>>>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-7662> has
>>>>>>>>>>>>>>>>> described , we would like to introduce a new grammer " CREATE 
>>>>>>>>>>>>>>>>> TABLE LIKE "
>>>>>>>>>>>>>>>>> ,which  simplifies creating new tables duplicating the 
>>>>>>>>>>>>>>>>> existing ones .
>>>>>>>>>>>>>>>>> The format may be like : CREATE TABLE <new_table> LIKE
>>>>>>>>>>>>>>>>> <old_table>
>>>>>>>>>>>>>>>>> Before I implement this function, do you have any
>>>>>>>>>>>>>>>>> suggestions on this?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Looking forward to your reply!
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> David A. Herrington II
>>>>>>>>>>>>>>>>> President and Chief Engineer
>>>>>>>>>>>>>>>>> RhinoSource, Inc.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced
>>>>>>>>>>>>>>>>> Analytics.*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> www.rhinosource.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> David A. Herrington II
>>>>>>>>>>>>>>>>> President and Chief Engineer
>>>>>>>>>>>>>>>>> RhinoSource, Inc.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced
>>>>>>>>>>>>>>>>> Analytics.*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> www.rhinosource.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> David A. Herrington II
>>>>>>>>>>>>>>>>> President and Chief Engineer
>>>>>>>>>>>>>>>>> RhinoSource, Inc.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced
>>>>>>>>>>>>>>>>> Analytics.*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> www.rhinosource.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> David A. Herrington II
>>>>>>>>>>>>>>>>> President and Chief Engineer
>>>>>>>>>>>>>>>>> RhinoSource, Inc.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced
>>>>>>>>>>>>>>>>> Analytics.*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> www.rhinosource.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>
>> --
>> -Dave
>>
>> David A. Herrington II
>> President and Chief Engineer
>> RhinoSource, Inc.
>>
>> *Data Lake Architecture, Cloud Computing and Advanced Analytics.*
>>
>> www.rhinosource.com
>>
>

-- 
-Dave

David A. Herrington II
President and Chief Engineer
RhinoSource, Inc.

*Data Lake Architecture, Cloud Computing and Advanced Analytics.*

www.rhinosource.com

Reply via email to