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

Reply via email to