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

ravi commented on PHOENIX-898:
------------------------------

[~jviolettedsiq]
    I fixed the parsing exception which comes while generating a SELECT query 
with the following code.  Since the code isn't yet checked in , I have pasted 
the method from QueryUtil.java

{code}
 /**
     * 
     * @param tableName name of the table for which the select statement needs 
to be created.
     * @param columnInfos  list of columns to be projected in the select 
statement.
     * @return Select Query 
     */
    public static String constructSelectStatement(String 
tableName,List<ColumnInfo> columnInfos) {
            
        if(columnInfos.isEmpty()) {
             throw new IllegalArgumentException("At least one column must be 
provided");
        }
        StringBuilder sb = new StringBuilder();
        sb.append("SELECT ");
        for (ColumnInfo cinfo : columnInfos) {
            if (cinfo != null) {
                String fullColumnName = cinfo.getColumnName();
                
if(fullColumnName.startsWith(format("%s%s",DEFAULT_COLUMN_FAMILY,NAME_SEPARATOR))){
                    //for the default column family, double quote the family 
name.
                    String familyName = fullColumnName.substring(0,1);
                    String columnName = fullColumnName.substring(2);
                    fullColumnName = 
format("\"%s\"%s%s",familyName,NAME_SEPARATOR,columnName);
                }
                        
                sb.append(fullColumnName);
                sb.append(",");
             }
         }
        // Remove the trailing comma
        sb.setLength(sb.length() - 1);
        sb.append("\n");
        sb.append(" FROM ");
        sb.append(tableName);
        return sb.toString();
    }
{code}

 

> Extend PhoenixHBaseStorage to specify upsert columns
> ----------------------------------------------------
>
>                 Key: PHOENIX-898
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-898
>             Project: Phoenix
>          Issue Type: Improvement
>    Affects Versions: 3.0.0
>            Reporter: James Violette
>             Fix For: 3.0.0
>
>         Attachments: PHOENIX_898_1.patch
>
>
> We have a Phoenix table with data from multiple sources.  We would like to 
> write a pig script that upserts only data associated with a feed, leaving 
> other data alone.  The current PhoenixHBaseStorage automatically upserts all 
> columns in a table.
> Given this table schema as an example, 
> create TABLE IF NOT EXISTS MYSCHEMA.MYTABLE
>  (NAME varchar not null
>   ,D.INFO VARCHAR
>   ,D.D1 DOUBLE
>   ,D.I1 INTEGER
>   ,D.C1 VARCHAR
>  CONSTRAINT pk PRIMARY KEY (NAME));   
> Assuming 'A' is loaded into pig,
> The current syntax loads all columns into MYSCHEMA.MYTABLE:
> STORE A into 'hbase://MYSCHEMA.MYTABLE' using
>     org.apache.phoenix.pig.PhoenixHBaseStorage('localhost','-batchSize 5000');
> We could specify upsert columns after the table in the hbase:// url.  
> This column-based example is equivalent to the full table upsert.
> STORE A into 'hbase://MYSCHEMA.MYTABLE/NAME,D.INFO,D.D1,D.I1,D.C1' using
>     org.apache.phoenix.pig.PhoenixHBaseStorage('localhost','-batchSize 5000');
> This column-based example chooses to load only three of the five columns.
> STORE A into 'hbase://MYSCHEMA.MYTABLE/NAME,D.INFO,D.I1' using
>     org.apache.phoenix.pig.PhoenixHBaseStorage('localhost','-batchSize 5000');
> This change would touch 
> PhoenixHBaseStorage.setStoreLocation - parse the columns
> PhoenixPigConfiguration.configure - add an optional column list parameter.
> PhoenixPigConfiguration.setup - create the upsert statement and create the 
> column metadata list
> The rest of the code should work as-is.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to