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

Reply via email to