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