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