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

Reply via email to