Я новичок в AWS Athena и пытаюсь запросить несколько сегментов S3, содержащих файлы JSON. Я столкнулся с рядом проблем, на которые нет ответа в документации (к сожалению, их журнал ошибок недостаточно информативен, чтобы попытаться решить его самостоятельно):
- Как запросить поле JSON, названное круглыми скобками? Например, у меня есть поле с именем «Емкость (ГБ)», и когда я пытаюсь включить его в оператор CREATE EXTERNAL, я получаю сообщение об ошибке:
CREATE EXTERNAL TABLE IF NOT EXISTS test-scema.test_table ( `device`: string, `Capacity(GB)`: string)
Ваш запрос содержит следующие ошибки:
СБОЙ: ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.IllegalArgumentException: Ошибка:: ожидается в позиции 'Емкость (ГБ): строка>', но '(' найдено.
Мои файлы расположены в подпапках S3 в следующей структуре:
'location_name / YYYY / MM / DD / appstring /'
и я хочу запросить все даты определенной строки приложения (из многих). есть ли какой-нибудь «подстановочный знак», который я могу использовать для замены пути дат? Что-то вроде этого:
LOCATION 's3://location_name/%/%/%/appstring/'
- Должен ли я загружать необработанные данные как есть, используя CREATE EXTERNAL TABLE, и только затем запрашивать их, или я могу добавить несколько встроенных операторов WHERE? В частности, это возможно:
CREATE EXTERNAL TABLE IF NOT EXISTS test_schema.test_table ( field1:string, field2:string ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://folder/YYYY/MM/DD/appstring' WHERE field2='value'
Каковы будут результаты с точки зрения выставления счетов? Потому что прямо сейчас я создаю этот оператор CREATE только для повторного использования данных в SQL-запросе.
Спасибо!