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