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