[ 
https://issues.apache.org/jira/browse/PHOENIX-2795?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15259387#comment-15259387
 ] 

James Taylor commented on PHOENIX-2795:
---------------------------------------

Thanks for the patch, [~tdsilva]. Here's some feedback:
- What if the view has no where clause, will this be a problem or will there 
just be no VIEW_STATEMENT column qualifier?
{code}
+                    byte[] viewStatement = 
Bytes.toBytes(QueryUtil.getViewStatement(parentTable.getSchemaName().getString(),
 parentTable.getTableName().getString(), autoPartionWhere));
+                    for (int i=0; i<cells.size(); ++i) {
+                        cell = cells.get(i);
+                        if (Bytes.equals(cell.getQualifier(), 
VIEW_STATEMENT_BYTES)) {
+                            cells.remove(i);
+                            viewStatement = Bytes.add(cell.getValue(), 
Bytes.toBytes(" AND "), Bytes.toBytes(autoPartionWhere));
+                            break;
+                        }
+                    }
{code}
- In MetaDataEndPointImpl, do you need to search and remove the existing 
VIEW_STATEMENT and VIEW_CONSTANT column qualifiers since you're setting them 
anyway?
{code}
+                    cells = familyCellMap.get(TABLE_FAMILY_BYTES);
+                    cell = null;
+                    for (int i=0; i<cells.size(); ++i) {
+                        cell = cells.get(i);
+                        if (Bytes.equals(cell.getQualifier(), 
VIEW_CONSTANT_BYTES)) {
+                            cells.remove(i);
+                            break;
+                        }
+                    }
{code}
- If you don't need to remove the column qualifiers explicitly, can you use the 
MetaDataUtil.getMutationValue() to look up the cell for VIEW_STATEMENT?
- Minor nit - do we need these new utils or can the existing ones be used? Is 
it to handle the multi-tenant case and if so is this a problem elsewhere?
{code}
-    public static Mutation getPutOnlyTableHeaderRow(List<Mutation> 
tableMetaData) {
+    public static Put getPutOnlyTableHeaderRow(List<Mutation> tableMetaData) {
         for (Mutation m : tableMetaData) {
-            if (m instanceof Put) { return m; }
+            if (m instanceof Put) { return (Put) m; }
         }
-        throw new IllegalStateException("No table header row found in table 
meatadata");
+        throw new IllegalStateException("No table header row found in table 
metadata");
+    }
+    
+    public static Put getPutOnlyAutoPartitionColumn(PTable parentTable, 
List<Mutation> tableMetaData) {
+        int autoPartitionPutIndex = parentTable.isMultiTenant() ? 2: 1;
+        int i=0;
+        for (Mutation m : tableMetaData) {
+            if (m instanceof Put && i++==autoPartitionPutIndex) { return (Put) 
m; }
+        }
+        throw new IllegalStateException("No auto partition column row found in 
table metadata");
{code}


> Support auto partition for views
> --------------------------------
>
>                 Key: PHOENIX-2795
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2795
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: James Taylor
>            Assignee: Thomas D'Silva
>              Labels: argus
>             Fix For: 4.8.0
>
>         Attachments: PHOENIX-2795.patch
>
>
> When a view or base table is created, we should have an string 
> AUTO_PARTITION_SEQ parameter on CREATE TABLE which uses a sequence based on 
> the argument on the server side to generate a WHERE clause with the first PK 
> column and the unique identifier from the sequence.
> For example:
> {code}
> CREATE SEQUENCE metric_id_seq;
> CREATE TABLE metric_table (metric_id INTEGER, val DOUBLE) 
> AUTO_PARTITION_SEQ=metric_id_seq;
> CREATE VIEW my_view1 AS SELECT * FROM base_table;
> {code}
> would tack on a WHERE clause base on the next value in a sequence, logically 
> like this:
> {code}
> WHERE partition_id =  NEXT VALUE FROM metric_id_seq
> {code}
> It's important that the sequence be generated *after* the check for the 
> existence of the view so that we don't burn sequence values needlessly if the 
> view already exists.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to