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.