Как можно использовать предложение WHERE в запросах AWS Athena Json?

У меня есть таблица, в которой я сохранил некоторую информацию из объекта Json:

Стол:

      investment
    unit(string)
    data(string)

Если запустить запрос SELECT * FROM "db"."investment" limit 10; Получил следующий результат:

      Unit Date
CH  [{"from":"CH","when":"2021-02-16","who":"pp@gmail.com"}]
AB  [{"from":"AB","when":"2020-02-16","who":"jj@gmail.com"}]

Теперь я запускаю следующий базовый запрос, чтобы вернуть значение во вложенном объекте Json:

SELECT json_extract_scalar(key, '$[0].who') email FROM "db"."investment";

и я получил следующий результат:

      email
jj@gmail.com
pp@gmail.com

Как можно отфильтровать этот запрос с помощью WHERE предложение, чтобы вернуть только одно значение:

Я пробовал это, но, очевидно, это не работает как обычная таблица SQL со строками и столбцами:

SELECT json_extract_scalar(key, '$[0].who') email FROM "db"."investment" WHERE email = "pp@gmail.com";

Любая помощь с этим?

1 ответ

в вашем вопросе есть несколько опечаток.

  • Date в Unit Date вероятно должно быть
  • что keyссылаясь на. Возможно вы имеете в виду Data

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

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

вот самодостаточный пример:

      with test (unit, data) as (
values
('CH',  JSON '[{"from":"CH","when":"2021-02-16","who":"pp@gmail.com"}]'),
('AB',  JSON '[{"from":"AB","when":"2020-02-16","who":"jj@gmail.com"}]')
)
select json_extract_scalar(data, '$[0].who') email
from test
where json_extract_scalar(data, '$[0].who') = 'pp@gmail.com';

outputs: 
| email        |
+--------------+
| pp@gmail.com |
Другие вопросы по тегам