Как получить данные таблицы Phoenix через сервис HBase REST

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

    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));
    }

Таблица создана, и циклическая таблица работает нормально.

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

URLhttp://server-url:12345/PHOENIXTEST/schema работает нормально и возвращает запрашиваемую информацию о таблице.

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

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

Ответы на вопрос(2)

Решение Вопроса

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

Глядя на документацию Феникса натипы данных для BIGINT это говорит:

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

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

Вы действительно должны получить свои данные из таблицы Phoenix, используя Phoenix, а не HBase. Феникс использует пользовательскую кодировку дляцелое число а такжеBigInt такжесоление (если вы используете один).

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

Ваш ответ на вопрос