Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

98
Views
Athena AWS nombre de campo incorrecto y varias carpetas con Hive DDL

Soy nuevo en AWS Athena y estoy tratando de consultar varios depósitos S3 que contienen archivos JSON. Encontré una serie de problemas que no tienen ninguna respuesta en la documentación (lamentablemente, su registro de errores no es lo suficientemente informativo como para tratar de resolverlo yo mismo):

  1. ¿Cómo consultar un campo JSON nombrado entre paréntesis? Por ejemplo, tengo un campo llamado "Capacidad (GB)", y cuando trato de incluirlo en la declaración CREAR EXTERNA recibo un error:
 CREATE EXTERNAL TABLE IF NOT EXISTS test-scema.test_table ( `device`: string, `Capacity(GB)`: string)

Su consulta tiene los siguientes errores:

FALLIDO: Error de ejecución, código de retorno 1 de org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.IllegalArgumentException: Error: se esperaba en la posición de 'Capacidad (GB): cadena>' pero se encuentra '('.

  1. Mis archivos están ubicados en subcarpetas en S3 en la siguiente estructura:

    'nombre_ubicación/AAAA/MM/DD/cadenaaplicación/'

y quiero consultar todas las fechas de una cadena de aplicación específica (de muchas). ¿Hay algún 'comodín' que pueda usar para reemplazar la ruta de las fechas? Algo como esto:

LOCATION 's3://location_name/%/%/%/appstring/'

  1. ¿Tengo que cargar los datos sin procesar tal como están usando CREAR TABLA EXTERNA, y solo luego consultarlos, o puedo agregar algunas declaraciones WHERE incorporadas? Específicamente, algo como esto es posible:
 CREATE EXTERNAL TABLE IF NOT EXISTS test_schema.test_table ( field1:string, field2:string ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://folder/YYYY/MM/DD/appstring' WHERE field2='value'

¿Cuáles serían los resultados en términos de facturación? Porque en este momento estoy creando esta declaración CREATE solo para reutilizar los datos en una consulta SQL una vez más.

¡Gracias!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

1. Campo JSON nombrado con paréntesis

No es necesario crear un campo llamado Capacity(GB) . En su lugar, cree el campo con un nombre diferente:

 CREATE EXTERNAL TABLE test_table ( device string, capacity string ) ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe' with serdeproperties ( 'paths'='device,Capacity(GB)') LOCATION 's3://xxx';

Si está utilizando JSON anidado , puede usar la propiedad de mapping de Serde (que vi en un problema con Hive Serde que trata estructuras anidadas ):

 CREATE external TABLE test_table ( top string, inner struct<device:INT, capacity:INT> ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' with serdeproperties ( "mapping.capacity" = "Capacity(GB)" ) LOCATION 's3://xxx';

Esto funciona muy bien con una entrada de:

 { "top" : "123", "inner": { "Capacity(GB)": 12, "device":2}}

2. Subcarpetas

No puede utilizar comodines en la mitad de la ruta ( s3://location_name/*/*/*/appstring/ ). La opción más cercana es usar datos particionados, pero eso requeriría un formato de nombre diferente para sus directorios.

3. Creación de tablas

No puede especificar sentencias WHERE como parte de la CREATE TABLE .

Si su objetivo es reducir los costos de datos, utilice datos particionados para reducir la cantidad de archivos escaneados o almacene en un formato basado en columnas como Parquet.

Para ver ejemplos, consulte: Análisis de datos en S3 con Amazon Athena

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!