Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

101
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda