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 >