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 champalias
-
Mapper la colonne
name
au sous-champname
situé dans le structidentification
.
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
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/'