Объединить столбцы из таблицы в объект JSON - PullRequest
4 голосов
/ 15 февраля 2020

У меня есть таблица в Афинах с данными

type   state   city  zipcode
-------------------------------
hot     az     phx    85281
hot     tx     dal    12345
cool    wa     sea    67890
cool    ny     nyc    67856

Я хочу, чтобы вывод был похож на

type   Data 
-------------
hot    {state: az, city:phx, zipcode: 85281}
hot    {state: tx, city:dal, zipcode: 12345}
cool   {state: wa, city:sea, zipcode: 67890}
cool   {state: ny, city:nyc, zipcode: 67856}

Я пытаюсь использовать статистическую функцию, но я не могу используй это.

ВЫБРАТЬ тип, CAST (MAP (ARRAY ['штат', 'город', 'почтовый индекс'], ARRAY [штат, город, почтовый индекс]) AS JSON) ОТ "test". "Alldata"

но запрос не выполнен.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2020

Для улья:

with mydata as (
select stack(4,
    'hot', 'az', 'phx', 85281,
    'hot', 'tx', 'dal', 12345,
    'cool', 'wa', 'sea', 67890,
    'cool', 'ny', 'nyc', 67856
) as  (type, state, city, zipcode)
)

select type, map('state', state, 'city', city,'zipcode',zipcode) as data
 from mydata;

Результат:

type    data
hot     {"state":"az","city":"phx","zipcode":"85281"}
hot     {"state":"tx","city":"dal","zipcode":"12345"}
cool    {"state":"wa","city":"sea","zipcode":"67890"}
cool    {"state":"ny","city":"nyc","zipcode":"67856"}

Если вам нужен строковый тип, используйте brickhouse library:

add jar /path/brickhouse-0.7.0-SNAPSHOT.jar; --compile jar and load it to the distributed cache
CREATE TEMPORARY FUNCTION to_json AS 'brickhouse.udf.json.ToJsonUDF';

select type, to_json(map('state', state, 'city', city,'zipcode',zipcode)) as data
 from mydata;
0 голосов
/ 15 февраля 2020

Если у вас есть mysql версия с 5.7 или выше: используйте

SELECT `type`,json_object('state', `state`, 'city', `city`,'zipcode',`zipcode`)
FROM alldata;
CREATE TABLE alldata
    (`type` varchar(4), `state` varchar(2), `city` varchar(3), `zipcode` int)
;

INSERT INTO alldata
    (`type`, `state`, `city`, `zipcode`)
VALUES
    ('hot', 'az', 'phx', 85281),
    ('hot', 'tx', 'dal', 12345),
    ('cool', 'wa', 'sea', 67890),
    ('cool', 'ny', 'nyc', 67856)
;
✓

✓
SELECT `type`,json_object('state', `state`, 'city', `city`,'zipcode',`zipcode`)
FROM alldata;
type | json_object('state', `state`, 'city', `city`,'zipcode',`zipcode`)
:--- | :----------------------------------------------------------------
hot  | {"city": "phx", "state": "az", "zipcode": 85281}                 
hot  | {"city": "dal", "state": "tx", "zipcode": 12345}                 
cool | {"city": "sea", "state": "wa", "zipcode": 67890}                 
cool | {"city": "nyc", "state": "ny", "zipcode": 67856}                 

дБ <> скрипка здесь

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