Как можно использовать предложение 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 |