HBASE Rest API (Stargate) Публикация нескольких ячеек / строк

Я пытаюсь опубликовать несколько столбцов / строк в моем кластере hbase, используя остальные API. Я могу опубликовать 1 столбец за раз без проблем, но не могу заставить его принимать несколько столбцов / строк.

Это работает просто отлично

Данные:

{
   "Row":{
      "@key":"www.somesite.com",
      "Cell":{
         "@column":"ColFam:Col1",
         "$":"someData"
      }
   }
}

Вызов:

curl -v -X PUT -H "Content-Type: application/json" --data '{"Row": { "@key":"www.somesite.com", "Cell": { "@column":"ColFam:Col1", "$":"someData" } } }' http://somesite.com:8080/TestTable/www.somesite.com/ColFam:Col1

Согласно API, я должен быть в состоянии опубликовать несколько строк / столбцов одновременно.

Многостолбцовые данные:

{
   "Row":
      {
         "key":"www.somesite.com",
         "Cell":[
            {
               "column":"ColFam:Col1",
               "$":"someData"
            },
            {
               "column":"ColFam:Col2",
               "$":"moreData"
            }
         ]
      }
}

Многорядные данные:

{
   "Row":[
      {
         "key":"www.somesite.com",
         "Cell":[
            {
               "column":"ColFam:Col1",
               "$":"someData"
            }
         ]
      },
      {
         "key":"www.someothersite.com",
         "Cell":[
            {
               "column":"ColFam:Col1",
               "$":"moreData"
            }
         ]
      }

   ]
}

Я попытался использовать следующие URL:

http://somesite.com:8080/TestTable/www.somesite.com/ColFam:Col1
http://somesite.com:8080/TestTable/www.somesite.com/ColFam
http://somesite.com:8080/TestTable/www.somesite.com

Но безрезультатно. В документации сказано использовать false-row-key, поэтому я также попытался:

http://somesite.com:8080/TestTable/false-row-key

Все еще не повезло.

Я получаю одну и ту же ошибку каждый раз:

upload completely sent off: 124 out of 124 bytes
HTTP/1.1 503 Service Unavailable

Есть идеи?

2 ответа

Решение

Так что все, что вам нужно сделать, это base64 кодировать все значения JSON.

{
   "Row":[
      {
         "key":"d3d3LnNvbWVzaXRlLmNvbQ==",
         "Cell":[
            {
               "column":"QXV0aG9yczp0ZXN0MQ==",
               "$":"c29tZURhdGE="
            },
            {
               "column":"QXV0aG9yczp0ZXN0Mg==",
               "$":"bW9yZURhdGE="
            }
         ]
      }
   ]
}

Это должно было быть для меня очевидно, так как все возвращаемые значения из остальных API-интерфейсов кодируются в base64.

JIRA HBASE-9435 дал этот ответ. Нужно удалить '@' и добавить '[]', команда такая:

curl -v -X PUT -H "Content-Type: application/json" --data '{"Row":[{"key":"www.somesite.com", "Cell": [{"column":"ColFam:Col1", "$":"someData"}]}]}' http://somesite.com:8080/TestTable/www.somesite.com/ColFam:Col1

Кроме того, значения "www.somesite.com", "ColFam:Col1", "someData" должны быть в кодировке base64.

Другие вопросы по тегам