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