Uso de extractores de rutas
Amazon Ion es un formato de archivo de estilo de documento. Por otro lado, Apache Hive es un formato de columnas plano. Puede utilizar las propiedades especiales del SerDe de Amazon Ion denominadas path extractors
para asignar entre los dos formatos. Los extractores de rutas aplanan el formato Amazon Ion jerárquico, asignan valores de Amazon Ion a columnas de Hive y se pueden utilizar para cambiar los nombres de los campos.
Athena puede generar los extractores por usted; sin embargo, usted también puede definir sus propios extractores si es necesario.
Extractores de rutas generados
Athena busca de forma predeterminada valores de Amazon Ion de nivel superior que coincidan con los nombres de las columnas de Hive y crea extractores de rutas en tiempo de ejecución en función de estos valores coincidentes. Si el formato de datos de Amazon Ion coincide con el esquema de tabla de Hive, Athena genera de forma dinámica los extractores por usted y usted no necesita agregar ningún extractor de ruta adicional. Estos extractores de rutas predeterminados no se almacenan en los metadatos de la tabla.
En el siguiente ejemplo, se muestra cómo Athena genera extractores en función del nombre de la columna.
-- 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/'
Athena genera los siguientes extractores de ejemplo. El primero extrae el campo identification
a la columna identification
y el segundo extrae el campo alias
a la columna alias
.
'ion.identification.path_extractor' = '(identification)' 'ion.alias.path_extractor' = '(alias)'
En el siguiente ejemplo, se muestra la tabla que se extrajo.
| identification | alias | |----------------------------------------------------|----------| |{["name", "driver_license"],["John Smith", "XXXX"]} | "Johnny" |
Especificación de sus propios extractores de rutas
Si los campos de Amazon Ion no se asignan de forma perfecta a las columnas de Hive, puede especificar sus propios extractores de ruta. En la cláusula WITH SERDEPROPERTIES
de la instrucción CREATE TABLE
, utilice la siguiente sintaxis.
WITH SERDEPROPERTIES ( "ion.path_extractor.case_sensitive" = "
<Boolean>
", "ion.<column_name>
.path_extractor" = "<path_extractor_expression>
" )
nota
Los extractores de rutas distinguen entre mayúsculas y minúsculas de forma predeterminada. Para anular esta configuración, configure la propiedad del SerDe ion.path_extractor.case_sensitive en true
.
Uso de rutas de búsqueda en extractores de rutas
La sintaxis de la propiedad del SerDe para el extractor de ruta contiene <path_extractor_expression>
:
"ion.
<column_name>
.path_extractor" = "<path_extractor_expression>
"
Puede utilizar <path_extractor_expression>
para especificar una ruta de búsqueda que analice el documento de Amazon Ion y encuentre datos coincidentes. La ruta de búsqueda está entre paréntesis y puede contener uno o más de los siguientes componentes separados por espacios.
-
Comodín: coincide con todos los valores.
-
Índice: coincide con el valor del índice numérico especificado. Los índices están basados en cero.
-
Texto: coincide con todos los valores cuya coincidencia de nombres de campo son equivalentes al texto especificado.
-
Anotaciones: coincide con los valores especificados por un componente de ruta encapsulado que tiene las anotaciones especificadas.
En el siguiente ejemplo, se muestra un documento de Amazon Ion y algunas rutas de búsqueda de ejemplo.
-- 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"
Ejemplos de extractores
Aplanamiento y cambio de los nombres de los campos
En el siguiente ejemplo, se muestra un conjunto de rutas de búsqueda que aplanan y cambian los nombres de los campos. En el ejemplo, se utilizan las rutas de búsqueda para hacer lo siguiente:
-
asignar la columna
nickname
al campoalias
y -
asignar la columna
name
al subcamponame
ubicado en la estructuraidentification
.
A continuación, se presenta el documento de Amazon Ion de ejemplo.
-- Example Amazon Ion Document { identification: { name: "John Smith", driver_license: "XXXX" }, alias: "Johnny" }
A continuación, se muestra la instrucción CREATE TABLE
de ejemplo que define los extractores de rutas.
-- 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/'
En el siguiente ejemplo, se muestran los datos extraídos.
-- Extracted Table | name | nickname | |--------------|--------------| | "John Smith" | "Johnny" |
Para obtener más información sobre las rutas de búsqueda y ejemplos de rutas de búsqueda adicionales, consulte Ion Java Path Extraction
Extracción de datos de vuelo en formato de texto
En el siguiente ejemplo, la consulta CREATE TABLE
utiliza WITH
SERDEPROPERTIES
para agregar extractores de rutas con el objetivo de extraer datos de vuelo y especificar la codificación de salida como texto de Amazon Ion. En el ejemplo se utiliza la sintaxis 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
/'