Trabajar con tipos de datos mixtos dentro de un campo usando Rockset


Entonces… cree que todos sus datos en un campo en specific son un tipo de cadena, pero cuando intenta ejecutar su consulta, obtiene algunos errores. Al investigar más, parece que también tiene algunos tipos int e indefinidos. Gorrón…


panda llorando

¡No te desesperes! De hecho, podemos solucionar esto (sin preparación de datos 😉). Para recapitular, en nuestro primer weblog, creamos una integración con MongoDB en Rockset, para que Rockset pueda leer y (actualizar) los datos que ingresan en MongoDB. Una vez que los datos están en Rockset, podemos ejecutar SQL en datos sin esquema y sin estructura.

Los datos:

Contenido incrustado: https://gist.github.com/nfarah86/ef1cc9da88e56226c4c46fd0e3c8e16e

estamos interesados ​​en el release_date campo: "release_date": "1991-06-07".

La consulta:

Rockset tiene una función llamada FECHA_PARAR(), que le permite convertir una fecha con formato de cadena en un objeto de fecha. Si desea solicitar películas solo por año, puede utilizar EXTRACTO().

Esencialmente, una vez que convierte su fecha con formato de cadena en un objeto de fecha, puede extraer el año.

A primera vista, esto parece bastante fácil de resolver: si desea ordenar todos los títulos de películas por año de lanzamiento, puede escribir algo como esto:

SELECT
      t.title, t.release_date
FROM
    commons.TwtichMovies t
ORDER BY
    EXTRACT(
         YEAR
         FROM
         DATE_PARSE(t.release_date, '%Y-%m-%d')
    ) DESC
;

Al ejecutar esta consulta, obtenemos un error de análisis de marca de tiempo: Error (Consulta) Error de análisis de marca de tiempo:

Esto podría significar que está trabajando con otros tipos de datos que no son cadenas. Para inspeccionar, puedes escribir algo como esto:

SELECT
      t.title, TYPEOF(t.release_date)
FROM
    commons.TwtichMovies t
WHERE 
    TYPEOF(t.release_date) != 'string'
;

Esto es lo que obtenemos de vuelta:


resultado sql

Ahora que sabemos qué está causando el error, podemos volver a escribir la consulta para descartar cualquier cosa que no sea un tipo de cadena, ¿verdad?

SELECT
      t.title, t.release_date
FROM
    commons.TwtichMovies t
WHERE
    TYPEOF(t.release_date) = 'string';
ORDER BY
     EXTRACT(
          YEAR
          FROM
              DATE_PARSE(t.release_date, '%Y-%m-%d')
     )DESC
;

¡MAL 🥺! Esto también devuelve un error de análisis de marca de tiempo:

Error (Consulta) Error de análisis de marca de tiempo

Probablemente te estés diciendo a ti mismo, “qué diablos”. Un caso que no tomamos en consideración anteriormente es que podría haber cadenas vacías 🤯- Si ejecutamos la siguiente consulta:

SELECT DATE_PARSE('', '%Y-%m-%d');

Obtenemos el mismo error de análisis de marca de tiempo:

Error (Consulta) Error de análisis de marca de tiempo

Ajá.

¿Cómo escribimos realmente esta consulta para evitar los errores de análisis de la marca de tiempo? Aquí, en realidad podemos comprobar el LONGITUD() de la cadena y filtre todo lo que no cumpla con el requisito de longitud, así que algo como esto:

WHERE LENGTH(t.release_date) = 10

También podemos TRY_CAST() t.release_date a una cadena. Si el valor del campo no se puede convertir en una cadena, un null se devuelve el valor (es decir, no se producirá un error). Poniendo todo esto junto, técnicamente podemos escribir algo como esto:

SELECT
    t.title,
    t.release_date
FROM
    commons.TwtichMovies t
WHERE
    TRY_CAST(t.release_date AS string) just isn't null
    AND LENGTH(TRY_CAST(t.release_date AS string)) = 10
ORDER BY
    EXTRACT(
         YEAR
         FROM
         DATE_PARSE(t.release_date, '%Y-%m-%d')
    )
;

¡Voila! ¡funciona!


panda feliz

Durante la transmisión, en realidad escribí una versión más complicada de esta consulta. La consulta anterior y la consulta en la secuencia son equivalentes. ¡También escribimos consultas que agregan! Puede ver el desglose completo de la sesión a continuación:

Contenido incrustado: https://youtu.be/PGpEsg7Qw7A

TLDR: puede encontrar todos los recursos que necesita para comenzar a usar Rockset en el rincón del desarrollador.



Related Articles

Low Rider Tradition y “No Cruise Zones” en California.

Durante las décadas de 1980 y 1990, cuando los políticos...

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Same Category

spot_img

Stay in touch!

Follow our Instagram