Афина-запрос таблицы с JSON в одном столбце - PullRequest
0 голосов
/ 07 марта 2020

У меня есть файл паркета в следующем формате

id = 2a1ed0848022
raw_value:
[{"state":"MO","city":"O Fallon","location_name":"Jackson Hewitt Tax Service","top_category":"Accounting, Tax Preparation, Bookkeeping, and Payroll Services"},
{"state":"IL","city":"Collinsville","location_name":"L E Smith Jewelry","top_category":"Jewelry, Luggage, and Leather Goods Stores"},
{"state":"MO","city":"O Fallon","location_name":"Bagwasi Family Eyecare","top_category":"Health and Personal Care Stores"},
{"state":"MO","city":"O Fallon","location_name":"Rally's Drive-In Restaurants","top_category":"Restaurants and Other Eating Places"},
{"state":"IL","city":"Collinsville","location_name":"BP","top_category":"Gasoline Stations"}

Я хотел бы создать таблицу в Афинах для этого файла паркета и выполнить запрос, подобный этому

select maid from test12 where state="MD" and city="Baltimore".

Как я могу найти штат и город из второго столбца, который вложен JSON.

1 Ответ

0 голосов
/ 07 марта 2020

Ключом к этому является использование UNNEST. Я предполагаю, что raw_value напечатано как array<struct<state:string,city:string,location_name:string,top_category:string>>.

SELECT id
FROM the_table CROSS JOIN UNNEST(raw_value) rv (location)
WHERE location.state = 'MD' AND city = 'Baltimore'

Использование UNNEST, как это расширяет каждую строку в таблице до одной строки на элемент в массиве.

Если raw_value является строковым столбцом, вам необходимо сначала проанализировать его. Вы можете найти пример этого в этом ответе: { ссылка }

...