You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by Corbett Martin <co...@nhin.com> on 2012/08/08 20:15:08 UTC

Update table schema via REST

According to the Stargate documentation (http://wiki.apache.org/hadoop/Hbase/Stargate) I should be able to perform a POST operation to perform a table schema update.  The docs say to supply a "well formed schema fragment" for a table schema update.  My issue is the test code below always returns:

<body><h2>HTTP ERROR 405</h2>
<p>Problem accessing /TransactionREST/. Reason:
<pre>Method Not Allowed</pre>

What am I missing?  I cannot find any errors in the log files.

It's worth mentioning that I've been able to successfully create a table via the REST api but now I want to use the api to make a table schema change, like in this example I want to add a new column-family to a table.

class AlterTableExampleREST {

      private static final String ALTER_TABLE =
            "{\"name\":\"TransactionREST\",\"ColumnSchema\":[{\"name\":\"foo\"}]}";

      public void modifyTable() throws IOException {
            // Setup a Cluster list adding all known REST server hosts
            Cluster cluster = new Cluster();
            cluster.add("127.0.0.1", 8080);
            // Create Client to handle HTTP communication
            Client client = new Client(cluster);
            Response response = client.post("/TransactionREST/", "application/json",
                  Bytes.toBytes(ALTER_TABLE));
            if(response != null) {
                  System.out.println("response code: " + response.getCode());
                  if(response.hasBody()) {
                        System.out.println("reponse body: " + Bytes.toString(response.getBody()));
                  }
            }
      }
}

Thanks in advance!

________________________________
This message and its contents (to include attachments) are the property of National Health Systems, Inc. and may contain confidential and proprietary information. This email and any files transmitted with it are intended solely for the use of the individual or entity to whom they are addressed. You are hereby notified that any unauthorized disclosure, copying, or distribution of this message, or the taking of any unauthorized action based on information contained herein is strictly prohibited. Unauthorized use of information contained herein may subject you to civil and criminal prosecution and penalties. If you are not the intended recipient, you should delete this message immediately and notify the sender immediately by telephone or by replying to this transmission.

Re: Update table schema via REST

Posted by Andrew Purtell <ap...@apache.org>.
Addressing for table creation or schema update (PUT or POST), schema
query (GET), or delete (DELETE)

    path := '/' <table> / 'schema'

So that should be  /TransactionREST/schema

However, I'd recommend that you not take administrative actions via
the REST API. Use the HBase shell instead. Consider them DBA-type
operations.

    - Andy

On Wed, Aug 8, 2012 at 11:15 AM, Corbett Martin <co...@nhin.com> wrote:
> According to the Stargate documentation (http://wiki.apache.org/hadoop/Hbase/Stargate) I should be able to perform a POST operation to perform a table schema update.  The docs say to supply a "well formed schema fragment" for a table schema update.  My issue is the test code below always returns:
>
> <body><h2>HTTP ERROR 405</h2>
> <p>Problem accessing /TransactionREST/. Reason:
> <pre>Method Not Allowed</pre>
>
> What am I missing?  I cannot find any errors in the log files.
>
> It's worth mentioning that I've been able to successfully create a table via the REST api but now I want to use the api to make a table schema change, like in this example I want to add a new column-family to a table.
>
> class AlterTableExampleREST {
>
>       private static final String ALTER_TABLE =
>             "{\"name\":\"TransactionREST\",\"ColumnSchema\":[{\"name\":\"foo\"}]}";
>
>       public void modifyTable() throws IOException {
>             // Setup a Cluster list adding all known REST server hosts
>             Cluster cluster = new Cluster();
>             cluster.add("127.0.0.1", 8080);
>             // Create Client to handle HTTP communication
>             Client client = new Client(cluster);
>             Response response = client.post("/TransactionREST/", "application/json",
>                   Bytes.toBytes(ALTER_TABLE));
>             if(response != null) {
>                   System.out.println("response code: " + response.getCode());
>                   if(response.hasBody()) {
>                         System.out.println("reponse body: " + Bytes.toString(response.getBody()));
>                   }
>             }
>       }
> }
>
> Thanks in advance!
>
> ________________________________
> This message and its contents (to include attachments) are the property of National Health Systems, Inc. and may contain confidential and proprietary information. This email and any files transmitted with it are intended solely for the use of the individual or entity to whom they are addressed. You are hereby notified that any unauthorized disclosure, copying, or distribution of this message, or the taking of any unauthorized action based on information contained herein is strictly prohibited. Unauthorized use of information contained herein may subject you to civil and criminal prosecution and penalties. If you are not the intended recipient, you should delete this message immediately and notify the sender immediately by telephone or by replying to this transmission.