Amazon Athena не может прочитать файлы объектов SSON JSON, а запрос выбора Athena возвращает пустые наборы результатов для ключевых столбцов JSON - PullRequest
0 голосов
/ 06 октября 2018

Я создаю таблицу в Афине с приведенной ниже структурой

CREATE EXTERNAL TABLE s3_json_objects (
    devId string,
    type string,
    status string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true')
LOCATION 's3://mybucket/folder1/data/athena_test/';

Объекты S3 Bucket содержат структуру JSON, подобную этой

{
    "devId": "00abcdef1122334401",
    "type": "lora",
    "status": "huihuhukiyg"
}

Однако ниже SQL работает правильно ивернуть правильный результат только для count

SELECT count(*) as total_s3_objects FROM "athena_db"."s3_json_objects"

НО всякий раз, когда я запрашиваю ниже оператора SQL select, чтобы получить значения JSON из S3, он возвращает результатнаборы с пустыми значениями для столбцов

SELECT devid FROM "athena_db"."s3_json_objects"
SELECT json_extract(devid , '$.devid') as Id FROM "athena_db"."s3_json_objects"
SELECT * FROM "athena_db"."s3_json_objects"

enter image description here

Кроме того, я проверяю эти ссылки, прежде чем публиковать этот вопрос в StackOverflow и AWSAthena doc

Не удается прочитать файл json через Amazon Athena

AWS Athena Запрос json_extract из строкового поля возвращает пустые значения

Любые комментарии или предложения будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Клей может читать многострочные объекты json, потому что у него под капотом искровой двигатель.Одним из способов решения этой проблемы является преобразование этих объектов json в паркет с помощью клея, если вы не можете легко вывести эти объекты json на линию.

0 голосов
/ 06 октября 2018

JSON должен быть в одной строке, как указано в на этой странице документации AWS Athena .Вы можете иметь несколько объектов JSON в отдельных строках, но каждый завершенный объект должен занимать только одну строку.

Пример (все это может быть в одном объекте S3):

{"devId": "a1", "type": "b1", "status": "c1"}
{"devId": "a2", "type": "b2", "status": "c2"}
...