Выходной формат JSON для результатов Hive Query - PullRequest
18 голосов
/ 03 апреля 2012

Есть ли способ преобразовать результат запроса Hive в формат JSON?

Ответы [ 4 ]

7 голосов
/ 19 августа 2015

Это, кажется, возникает довольно часто.Используйте пользовательские функции to_json из Brickhouse (http://github.com/klout/brickhouse).Если вы преобразуете свои результаты в named_struct, он будет интерпретировать его как карту JSON и вывести соответственно.

SELECT to_json( named_struct( "field1", field1 ,
            "field2", field2,
            "field3", field3 ) )
   FROM mytable;

to_json также будет интерпретировать массивы и карты соответственно.

1 голос
/ 24 октября 2015

Я использовал инструмент под названием Apache Nifi.Имеет процессор AvrotoJSON.Вывод куста в формате Avro можно легко преобразовать в JSON.Ниже будет полезна ссылка: https://nifi.apache.org/

0 голосов
/ 30 апреля 2015

Самый простой способ - сначала сохранить в формате tsv, а затем использовать библиотеки, такие как spray, для преобразования в JSON.

Hive работает нормально, если вы не пытаетесь настраивать слишком много.Если у вас есть доступ к Spark в вашем кластере, используйте SparkSQL вместо Hive.Результаты вашего запроса будут сохранены в SchemaRDD, и оттуда вы можете легко отобразить JSon, выполняющий .map (_. ToJson), при условии, что в область действия импортирован спрей.

0 голосов
/ 11 апреля 2012

Мой опыт будет заключаться в использовании библиотеки Джексона (http://jackson.codehaus.org/), вы создаете POJO для сопоставления формата json. Поэтому, как только вы получите ResultSet из вашего запроса улья, вы выполняете его итерацию и создаете объекты POJO с помощью Jackson.

/**--JACKSON Class--**/
public class Item {
    @JsonProperty
    private String att1;
    @JsonProperty
    private String att2;
    public Item(String att1, String att2){
        this.att1 = att1;
        this.att2 = att2;
    }

}

/**--the class where u run your query--**/
List<Item> list = new ArrayList<Item>();
ResultSet rs = executeQuery(queryStr); // do your hive query here
while(rs.next){
    String att1 = rs.get("att1");
    String att2 = rs.get("att2");
    Item item = new Item(att1, att2);
    list.add(item);
}

тогда вы можете вернуть список элементов в качестве результата, Джексон позволяет очень легко записать его в формате json.

  1. создать ObjectMapper ObjectMapper mapper = newObjectMapper (); Mapper дает вам много вариантов записи объекта в формате json для другой цели, например, outputtream, bytebuffer и т. Д.

  2. итерация по списку.

  3. использовать mapper для записи значения в формате json, например, mapper.writeValue (out, Item). В этом примере out является OutputStream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...