Best practice per la lettura di dati JSON - Amazon Athena

Best practice per la lettura di dati JSON

JavaScript Object Notation (JSON) è un metodo comune per codificare le strutture di dati di codifica in forma di testo. Molte applicazioni e numerosi strumenti restituiscono dati con codifica JSON.

In Amazon Athena, è possibile creare tabelle da dati esterni e includervi i dati con codifica JSON. Per tali tipi di dati di origine, utilizza Athena insieme a Librerie SerDe JSON.

Segui i seguenti suggerimenti per leggere i dati con codifica JSON:

  • Scegli il SerDe opportuno, un SerDe JSON nativo, org.apache.hive.hcatalog.data.JsonSerDe o un SerDe OpenX, org.openx.data.jsonserde.JsonSerDe. Per ulteriori informazioni, consulta Librerie SerDe JSON.

  • Assicurati che ogni record con codifica JSON sia rappresentato su una riga separata, non formattata.

    Nota

    SerDe prevede che ogni documento JSON sia su una singola riga di testo senza caratteri di terminazione riga che separano i campi nel registro. Se il testo JSON è formattato, quando si prova a eseguire una query sulla tabella dopo averla creata, è possibile che venga visualizzato un messaggio di errore come HIVE_CURSOR_ERROR: Row is not a valid JSON Object (HIVE_CURSOR_ERROR: la riga non è un oggetto JSON valido) o HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE_CURSOR_ERROR: JSONParseException: fine di input imprevisto: indicatore di chiusura previsto per OBJECT). Per ulteriori informazioni, consulta File di dati JSON nella documentazione OpenX SerDe su GitHub.

  • Genera i dati con codifica JSON in colonne con distinzione tra maiuscole e minuscole.

  • Fornisci un'opzione per ignorare i record in formato errato, come in questo esempio.

    CREATE EXTERNAL TABLE json_table ( column_a string, column_b int ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true') LOCATION 's3://amzn-s3-demo-bucket/path/';
  • Converti i campi nei dati di origine che hanno uno schema indeterminato in stringhe con codifica JSON in Athena.

Quando Athena crea tabelle basate su dati con codifica JSON, analizza i dati in base allo schema esistente e predefinito. Tuttavia, è possibile che non tutti i dati presentino uno schema predefinito. In questi casi, per semplificare la gestione degli schemi, spesso è consigliabile convertire i campi in dati di origine che dispongano di uno schema indeterminato su stringhe JSON in Athena, per poi utilizzare Librerie SerDe JSON.

Prendiamo ad esempio in considerazione un'applicazione IoT che pubblica eventi con campi comuni da diversi sensori. Uno di tali campi devono archiviare un payload personalizzato univoco per il sensore che invia l'evento. In questo caso, poiché lo schema non è noto, è consigliabile archiviare le informazioni in forma di stringa con codifica JSON. A tale scopo, occorre convertire i dati nella tabella Athena in JSON, come nell'esempio seguente. È inoltre possibile convertire i dati con codifica JSON in tipi di dati Athena.