es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Estructura de consulta de AWS Athena

Tengo un tipo complejo y quiero consultarlo usando Athena.

{id={s=c937b52e-fee8-4899-ae26-d4748e65fb5f}, __typename={s=Account}, role={s=COLLABORATOR}, updatedat={s=2021-04-23T04:38:29.385Z}, entityid={s=70f8a1a8-6f20-4dd3-a484-8385198ddf97}, status={s=ACTIVE}, createdat={s=2021-04-23T04:38:20.045Z}, email={s=dd@mail.com}, showonboarding={bool=true}, position={s=beta}, name={s=User2}, lastlogindate={s=2021-04-23T04:41:07.775Z}}

¿Cómo hacerlo?

SELECT c.*
FROM "db"."table" c
LIMIT 10

devuelve todos los datos de la tabla. Sin embargo, si selecciono algo como

SELECT c.id
FROM "db"."table" c
LIMIT 10

muestra un error.

Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para consultar un tipo complejo en Athena, primero es necesario definir el esquema para el tipo. Esto se puede hacer utilizando la sentencia CREATE TYPE. Aquí hay un ejemplo de esquema para el tipo complejo de la pregunta:

    CREATE TYPE account (
      id STRING,
      __typename STRING,
      role STRING,
      updatedat TIMESTAMP,
      entityid STRING,
      status STRING,
      createdat TIMESTAMP,
      email STRING,
      showonboarding BOOLEAN,
      position STRING,
      name STRING,
      lastlogindate TIMESTAMP
    );
    

    Una vez que se define el tipo, se puede utilizar en una definición de tabla. Aquí hay un ejemplo:

    CREATE EXTERNAL TABLE mytable (
      user_account STRUCT<
        id: STRING,
        __typename: STRING,
        role: STRING,
        updatedat: TIMESTAMP,
        entityid: STRING,
        status: STRING,
        createdat: TIMESTAMP,
        email: STRING,
        showonboarding: BOOLEAN,
        position: STRING,
        name: STRING,
        lastlogindate: TIMESTAMP
      >
    )
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    WITH SERDEPROPERTIES (
      'ignore.malformed.json' = 'true'
    )
    LOCATION 's3://mi-bucket/ruta/hacia/los/datos/';
    

    Ten en cuenta que este ejemplo asume que los datos están almacenados en formato JSON. Si están almacenados en un formato diferente, deberás ajustar el formato de la fila serde en consecuencia.

    Una vez que se define la tabla, puedes consultarla utilizando la sintaxis estándar de SQL. Aquí hay un ejemplo para seleccionar todos los campos de las primeras 10 filas:

    SELECT *
    FROM mytable
    LIMIT 10;
    

    Y aquí hay un ejemplo para seleccionar solo el campo id:

    SELECT user_account.id
    FROM mytable
    LIMIT 10;
    

Comments are closed.