2016-06-28 3 views
2

Я создал таблицу Hbase с помощью драйвера JDBC Phoenix в следующем фрагменте кода:Как получить данные таблицы Phoenix с помощью службы HBase REST

Class.forName("org.apache.phoenix.jdbc.PhoenixDriver"); 
    Connection conn = DriverManager.getConnection("jdbc:phoenix:serverurl:/hbase-unsecure"); 
    System.out.println("got connection"); 

    conn.createStatement().execute("CREATE TABLE IF NOT EXISTS phoenixtest (id BIGINT not null primary key, test VARCHAR)"); 

    int inserted = conn.createStatement().executeUpdate("UPSERT INTO phoenixtest VALUES (5, '13%')"); 
    conn.commit(); 

    System.out.println("Inserted or updated " + inserted + " rows"); 

    ResultSet rst = conn.createStatement().executeQuery("select * from phoenixtest"); 

    while (rst.next()) { 
     System.out.println(rst.getString(1) + " " + rst.getString(2)); 
    } 

таблица создана и таблица-перекручивание работает отлично.

Теперь я попытался получить данные таблицы также через службы REST HBase, поскольку я знаю это из «родного» программирования HBase.

Адрес http://server-url:12345/PHOENIXTEST/schema отлично работает и возвращает требуемую информацию о столах.

Но когда я пытаюсь, например. http://server-url:12345/PHOENIXTEST/5 (5 был ключом первой вставленной строки, см. Код выше), я получаю сообщение Not found.

Как я могу получить данные через службу REST HBase?

ответ

1

Возможно, у вас есть проблема с тем, как Phoenix кодирует данные, хранящиеся в таблице HBase, а также то, как пользовательский REST API попытается найти ключ.

Глядя на документацию Phoenix на data types для BIGINT он говорит:

Двоичное представление является 8 байт длиной со знаком бит переворачивается (так что отрицательные значения сортов до положительных значений).

Таким образом, вы должны, вероятно, взглянуть на то, что на самом деле было вставлено в ваш стол. API-интерфейс HBase REST, вероятно, ищет ключ с использованием другой кодировки и, следовательно, не может его найти.

1

Вы действительно должны получить свои данные из таблицы phoenix, используя phoenix not HBase. Использование Phoenix - это настраиваемая кодировка для его Integer и BigInt также salting (если вы используете один).

Phoenix также в основном использует байт для хранения данных и StringBinary для его кодирования. Итак, много шансов, что ваш ключ не 5, а \ x80 \ x00 \ x00 \ x05 (целое число)

Смежные вопросы