HIVE_INVALID_METADATA в Амазонке Афина - PullRequest
0 голосов
/ 02 мая 2018

Как обойти следующую ошибку в Amazon Athena?

HIVE_INVALID_METADATA: com.facebook.presto.hive.DataCatalogException: Ошибка:: ожидается в позиции 8 'struct 'но' - 'найдено. (Служба: ноль; код состояния: 0; код ошибки: ноль; идентификатор запроса: ноль)

При просмотре позиции 8 в таблице базы данных, подключенной к Athena, сгенерированной AWS Glue, я вижу, что в ней есть столбец с именем attributes с соответствующим типом данных структуры:

struct <
    x-amz-request-id:string,
    action:string,
    label:string,
    category:string,
    when:string
>

Я предполагаю, что ошибка возникает из-за того, что поле attributes не всегда заполнено (см. Событие _session.start ниже) и не всегда содержит все поля (например, событие DocumentHandling ниже не содержит attributes.x-amz-request-id поле). Как правильно решить эту проблему? Можно ли сделать столбец необязательным в Glue? Может (должен?) Клей заполнить структуру пустыми строками? Другие варианты?


Фон: у меня есть следующая структура бэкэнда:

  • Amazon PinPoint Analytics собирает показатели из моего приложения.
  • Поток событий PinPoint настроен для пересылки событий в поток доставки Amazon Kinesis Firehose.
  • Kinesis Firehose записывает данные в S3
  • Используйте клей AWS для сканирования S3
  • Использование Athena для написания запросов на основе баз данных и таблиц, созданных AWS Glue

Я вижу, как события PinPoint успешно добавляются в файлы json на S3, например,

Первое событие в файле:

{
    "event_type": "_session.start",
    "event_timestamp": 1524835188519,
    "arrival_timestamp": 1524835192884,
    "event_version": "3.1",
    "application": {
        "app_id": "[an app id]",
        "cognito_identity_pool_id": "[a pool id]",
        "sdk": {
            "name": "Mozilla",
            "version": "5.0"
        }
    },
    "client": {
        "client_id": "[a client id]",
        "cognito_id": "[a cognito id]"
    },
    "device": {
        "locale": {
            "code": "en_GB",
            "country": "GB",
            "language": "en"
        },
        "make": "generic web browser",
        "model": "Unknown",
        "platform": {
            "name": "macos",
            "version": "10.12.6"
        }
    },
    "session": {
        "session_id": "[a session id]",
        "start_timestamp": 1524835188519
    },
    "attributes": {},
    "client_context": {
        "custom": {
            "legacy_identifier": "50ebf77917c74f9590c0c0abbe5522d2"
        }
    },
    "awsAccountId": "672057540201"
}

Второе событие в том же файле:

{
    "event_type": "DocumentHandling",
    "event_timestamp": 1524835194932,
    "arrival_timestamp": 1524835200692,
    "event_version": "3.1",
    "application": {
        "app_id": "[an app id]",
        "cognito_identity_pool_id": "[a pool id]",
        "sdk": {
            "name": "Mozilla",
            "version": "5.0"
        }
    },
    "client": {
        "client_id": "[a client id]",
        "cognito_id": "[a cognito id]"
    },
    "device": {
        "locale": {
            "code": "en_GB",
            "country": "GB",
            "language": "en"
        },
        "make": "generic web browser",
        "model": "Unknown",
        "platform": {
            "name": "macos",
            "version": "10.12.6"
        }
    },
    "session": {},
    "attributes": {
        "action": "Button-click",
        "label": "FavoriteStar",
        "category": "Navigation"
    },
    "metrics": {
        "details": 40.0
    },
    "client_context": {
        "custom": {
            "legacy_identifier": "50ebf77917c74f9590c0c0abbe5522d2"
        }
    },
    "awsAccountId": "[aws account id]"
}

Затем AWS Glue создал базу данных и таблицу. В частности, я вижу, что есть столбец с именем attributes, который имеет значение

struct <
    x-amz-request-id:string,
    action:string,
    label:string,
    category:string,
    when:string
>

Однако, когда я пытаюсь Preview table из Афины, то есть выполнить запрос

SELECT * FROM "pinpoint-test"."pinpoint_testfirehose" limit 10;

Я получаю сообщение об ошибке, описанное ранее.

Примечание: я пытался удалить поле attributes (редактируя таблицу базы данных из Glue), но это приводит к Internal error при выполнении SQL-запроса из Афины.

Ответы [ 2 ]

0 голосов
/ 03 августа 2018

Используйте галочку (`), если имя таблицы имеет - в имени Пример: SELECT * FROM `pinpoint-test`` pinpoint_testfirehose` limit 10;

Убедитесь, что вы выбрали базу данных «по умолчанию» на левой панели.

0 голосов
/ 11 мая 2018

Это известное ограничение. В именах таблиц Athena и базы данных допускаются только специальные символы подчеркивания #

Имена таблиц и баз данных Athena не могут содержать специальных символов, кроме подчеркивания (_). Источник: http://docs.aws.amazon.com/athena/latest/ug/known-limitations.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...