Utilisation d'extracteurs de chemin - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation d'extracteurs de chemin

Amazon Ion est un format de fichier de style document, mais Apache Hive est un format à colonnes plates. Vous pouvez utiliser les SerDe propriétés spéciales d'Amazon Ion appelées path extractors pour établir une correspondance entre les deux formats. Les extracteurs de chemins aplatissent le format hiérarchique Amazon Ion, mappent les valeurs Amazon Ion aux colonnes Hive et peuvent être utilisés pour renommer des champs.

Athena peut générer les extracteurs pour vous, mais vous pouvez également définir vos propres extracteurs si nécessaire.

Extracteurs de chemin générés

Par défaut, Athena recherche des valeurs Amazon Ion de premier niveau qui correspondent aux noms de colonnes Hive et crée des extracteurs de chemin à l'exécution en fonction de ces valeurs correspondantes. Si votre format de données Amazon Ion correspond au schéma de la table Hive, Athena génère dynamiquement les extracteurs pour vous, et vous n'avez pas besoin d'ajouter d'autres extracteurs de chemin. Ces extracteurs de chemins par défaut ne sont pas stockés dans les métadonnées de la table.

L'exemple suivant montre comment Athena génère des extracteurs basés sur le nom de la colonne.

-- Example Amazon Ion Document { identification: { name: "John Smith", driver_license: "XXXX" }, alias: "Johnny" } -- Example DDL CREATE EXTERNAL TABLE example_schema2 ( identification MAP<STRING, STRING>, alias STRING ) STORED AS ION LOCATION 's3://DOC-EXAMPLE-BUCKET/path_extraction1/'

Les exemples d’extracteurs suivants sont générés par Athena. Le premier extrait le champ identification vers la colonne identification et le second extrait le champ alias vers la colonne alias.

'ion.identification.path_extractor' = '(identification)' 'ion.alias.path_extractor' = '(alias)'

L'exemple suivant montre la table extraite.

| identification | alias | |----------------------------------------------------|----------| |{["name", "driver_license"],["John Smith", "XXXX"]} | "Johnny" |

Spécification de vos propres extracteurs de chemin

Si vos champs Amazon Ion ne sont pas parfaitement mappés avec les colonnes Hive, vous pouvez spécifier vos propres extracteurs de chemin. Dans la clause WITH SERDEPROPERTIES de votre instruction CREATE TABLE, utilisez la syntaxe suivante.

WITH SERDEPROPERTIES ( "ion.path_extractor.case_sensitive" = "<Boolean>", "ion.<column_name>.path_extractor" = "<path_extractor_expression>" )
Note

Par défaut, les extracteurs de chemins ne sont pas sensibles à la casse. Pour annuler ce paramètre, définissez la ion.path_extractor.case_sensitive SerDe propriété sur. true

Utilisation des chemins de recherche dans les extracteurs de chemins

<path_extractor_expression>La syntaxe des SerDe propriétés de l'extracteur de chemin contient :

"ion.<column_name>.path_extractor" = "<path_extractor_expression>"

Vous pouvez utiliser la <path_extractor_expression> pour spécifier un chemin de recherche qui analyse le document Amazon Ion et trouve les données correspondantes. Le chemin de recherche est entre parenthèses et peut contenir un ou plusieurs des composants suivants séparés par des espaces.

  • Wild card – Correspond à toutes les valeurs.

  • Index – Correspond à la valeur de l'index numérique spécifié. Les index sont basés sur zéro.

  • Text – Correspond à toutes les valeurs dont les noms de champs correspondants sont équivalents au texte spécifié.

  • Annotations – Correspond aux valeurs spécifiées par un composant de chemin encapsulé dont les annotations sont spécifiées.

L'exemple suivant montre un document Amazon Ion et quelques exemples de chemins de recherche.

-- Amazon Ion document { foo: ["foo1", "foo2"] , bar: "myBarValue", bar: A::"annotatedValue" } -- Example search paths (foo 0) # matches "foo1" (1) # matches "myBarValue" (*) # matches ["foo1", "foo2"], "myBarValue" and A::"annotatedValue" () # matches {foo: ["foo1", "foo2"] , bar: "myBarValue", bar: A::"annotatedValue"} (bar) # matches "myBarValue" and A::"annotatedValue" (A::bar) # matches A::"annotatedValue"

Exemples d'extracteurs

Aplatissement et renommage des champs

L'exemple suivant montre un ensemble de chemins de recherche qui aplatissent et renomment les champs. L'exemple utilise des chemins de recherche pour effectuer les opérations suivantes :

  • Mapper la colonne nickname au champ alias

  • Mapper la colonne name au sous-champ name situé dans le struct identification.

Voici l'exemple de document Amazon Ion.

-- Example Amazon Ion Document { identification: { name: "John Smith", driver_license: "XXXX" }, alias: "Johnny" }

Voici l'exemple suivant d'instruction CREATE TABLE qui définit les extracteurs de chemin.

-- Example DDL Query CREATE EXTERNAL TABLE example_schema2 ( name STRING, nickname STRING ) ROW FORMAT SERDE 'com.amazon.ionhiveserde.IonHiveSerDe' WITH SERDEPROPERTIES ( 'ion.nickname.path_extractor' = '(alias)', 'ion.name.path_extractor' = '(identification name)' ) STORED AS ION LOCATION 's3://DOC-EXAMPLE-BUCKET/path_extraction2/'

L'exemple suivant montre les données extraites.

-- Extracted Table | name | nickname | |--------------|--------------| | "John Smith" | "Johnny" |

Pour plus d'informations sur les chemins de recherche et d'autres exemples de chemins de recherche, consultez la page Ion Java Path Extraction sur GitHub.

Extraction des données de vol au format texte

L'exemple de requête CREATE TABLE suivant utilise WITH SERDEPROPERTIES pour ajouter des extracteurs de chemin pour extraire les données de vol et spécifier le codage de sortie sous forme de texte Amazon Ion. L'exemple utilise la syntaxe STORED AS ION.

CREATE EXTERNAL TABLE flights_ion ( yr INT, quarter INT, month INT, dayofmonth INT, dayofweek INT, flightdate STRING, uniquecarrier STRING, airlineid INT, ) ROW FORMAT SERDE 'com.amazon.ionhiveserde.IonHiveSerDe' WITH SERDEPROPERTIES ( 'ion.encoding' = 'TEXT', 'ion.yr.path_extractor'='(year)', 'ion.quarter.path_extractor'='(results quarter)', 'ion.month.path_extractor'='(date month)') STORED AS ION LOCATION 's3://DOC-EXAMPLE-BUCKET/'