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