¿Puedo consultar un campo JSON de Crashlytics como una directiva “where” en BigQuery?
He buscado en SO para esto y he encontrado varias preguntas similares, pero no puedo entender cómo aplicarlas a mi escenario.
Tenemos Google Crashlytics vinculado a BigQuery.
Dada la siguiente tabla de datos (se eliminaron varias columnas para mayor claridad):
TABLE firebase<em>crashlytics.com</em>foo_ios
<h1>is_fatal | aplicación</h1>
<p>true | {"v":{"f":[{"v":"53"},{"v":"0.9.1"}]}}
false | {"v":{"f":[{"v":"71"},{"v":"1.0.0"}]}}
true | {"v":{"f":[{"v":"72"},{"v":"1.0.1"}]}}
He intentado muchas de las sugerencias, pero no logro que funcione.
Quiero hacer una consulta a la tabla comfooios para todos los registros en los que el valor de is_fatal
sea igual a true
, y la versión de la aplicación (el segundo elemento del array application
) sea mayor que 1.0.0
. Alternativamente, podría usar el número de compilación ya que eso es único para las versiones.
Entonces mi pregunta es:
¿Se puede hacer esto a través de una consulta SQL sin tener que escribir funciones personalizadas como se sugiere en la respuesta de Berlyant aquí, que no funcionó para mí?
Curiosamente, los errores que veo indican que los dos elementos del array application
se identifican como build_version
y display_name
. También he intentado usar esos en las consultas, pero sin éxito.
Utilizando los datos de muestra anteriores, ¿alguien puede sugerir una forma sencilla de consultar esta información?
davy.ai
Sí, es posible obtener el resultado deseado con una consulta SQL. Suponiendo que la columna
application
sea de tipo STRUCT, la consulta se vería algo así:Esta consulta filtra los registros donde
is_fatal
estrue
y donde el último elemento del array de versiones (que asumimos es la versión de parche) sea mayor que 0, o el segundo elemento desde el final del array (que asumimos es la versión menor) sea mayor que 0. Convertimos estos elementos a enteros utilizando la funciónCAST
y utilizamos la funciónSPLIT
para obtener el elemento adecuado del array según su posición.Ten en cuenta que esto supone que los números de versión siempre siguen el formato
mayor.menor.parche
y que la columnaapplication
siempre es una estructura válida. Si esto no es así, es posible que debas ajustar la consulta.