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.

Cargando JSON en bruto en Delta Lake (Como en Snowflake)

Estoy probando Delta Lake para un caso de uso simple que es muy fácil en Snowflake, pero me está costando mucho entender si se puede hacer, y mucho menos hacerlo realmente.

Quiero poder cargar un archivo JSON “en bruto”, sin especificar un esquema, y quiero poder consultarlo y desglosarlo más adelante. En Snowflake, puedo crear una columna de tipo VARIANT y cargar el texto JSON allí, y luego puedo solicitar las diferentes partes usando “::” y “lateral flatten”, etc.

Los ejemplos que he visto hasta ahora sobre Delta Lake tienen estipulaciones de “inferencia de esquema” o “carga automática”, y con esos parece que incluso si no especifico un esquema, se crea uno para mí y luego todavía tengo que adivinar (o buscar) qué columnas creó Delta Lake para poder consultar esas partes del JSON. Parece un poco demasiado complicado.

Esta página tiene el siguiente comentario:

Al ingresar datos, es posible que necesite mantenerlos en una cadena JSON, y algunos datos pueden no estar en el tipo de datos correcto.

… pero no proporciona un ejemplo de cómo hacerlo. Para mí, esto sugiere que de alguna manera se puede almacenar el JSON sin procesar y consultarlo más tarde, pero no sé cómo. ¿Simplemente hacer una columna STRING e insertar el JSON como una cadena? ¿Alguien puede publicar un ejemplo?

¿Estoy probando la herramienta equivocada para lo que necesito o me estoy perdiendo algo? Gracias por su ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el usuario tiene dificultades para entender si Delta Lake puede manejar un caso de uso específico relacionado con la carga y consulta de archivos JSON sin especificar un esquema. El usuario menciona que en Snowflake pueden crear una columna de tipo VARIANT y cargar el texto JSON sin especificar un esquema, y luego consultar las diferentes partes usando :: y LATERAL FLATTEN. Sin embargo, no están seguros si Delta Lake puede manejar este caso de uso sin inferencia de esquema o carga automática.

    El usuario encontró un comentario en una publicación de blog de Databricks que sugiere que Delta Lake puede admitir mantener los datos en un formato de cadena JSON, pero están buscando un ejemplo de cómo hacer esto. El usuario se pregunta si está probando la herramienta equivocada o si algo les está faltando.

    Es posible cargar archivos JSON en Delta Lake sin especificar un esquema. Una forma de hacer esto es crear una columna de tipo STRING y almacenar el texto JSON crudo como una cadena. Luego, se puede usar la función get_json_object para extraer partes específicas del JSON. Aquí hay un ejemplo de código utilizando PySpark:

    from pyspark.sql.functions import get_json_object
    
    # Cargar archivo JSON como DataFrame
    df = spark.read.json("ruta/al/archivo/json", multiLine=True)
    
    # Crear una columna STRING para almacenar el texto JSON crudo
    df = df.withColumn("raw_json", df["_corrupt_record"].cast("string"))
    
    # Consultar partes específicas del JSON utilizando get_json_object
    df.select(get_json_object("raw_json", "$.person.name").alias("nombre")).show()
    

    Cabe destacar que este enfoque asume que el archivo JSON tiene un esquema consistente. Si el esquema varía entre los objetos JSON en el mismo archivo, puede ser necesario utilizar la inferencia de esquema o la carga automática.

    En conclusión, Delta Lake puede manejar el caso de uso del usuario de cargar y consultar archivos JSON sin especificar un esquema. El usuario puede almacenar el JSON crudo como una columna STRING y usar la función get_json_object para consultar partes específicas del JSON. El usuario no está probando la herramienta equivocada y este enfoque puede funcionar siempre que el archivo JSON tenga un esquema consistente.

Comments are closed.