Запрос AWS Athena для получения только одного объекта в массиве

#mysql #amazon-athena #mysql-json

#mysql #амазонка-афина #mysql-json

Вопрос:

Мои данные выглядят следующим образом (имя таблицы: test_table):

 {
    timestamp: 'some_timestamp',
    headers: [{'name': 'test', 'value': 'sth'}, {'name': 'test2', 'value': 'sth2'}, {'name': 'test3', 'value': 'sth3'}]
}
 

Как я могу выбирать только {'name': 'test2', 'value': 'sth2'} динамически, т.е. где условие: name должно иметь значение test2 , и мы не знаем, какой объект находится в массиве.

Я пробовал:

 SELECT JSON_SEARCH(headers, 'one', 'test2', NULL, '$[*].name') IS NOT NULL
FROM test_table
 

Комментарии:

1. Зачем вам хранить эти данные в формате JSON, если это так затрудняет запрос данных? Просто сохраните его в обычной форме, во второй таблице со столбцами name и value . Каждая пара имя / значение хранится в отдельной строке. Затем вы можете запросить SELECT ... FROM test_table_headers WHERE name = 'test2' .

2. Это структура, которую я не могу изменить, поскольку она поступает из журналов брандмауэра aws waf