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.

Actualizar una tabla a una tabla splayed existente en memoria que resulta en un error: `type (Q/KDB+)`

Soy nuevo en el lenguaje Q y en la base de datos KDB+. Estoy teniendo problemas para hacer upsert de otra tabla en una tabla particionada existente en la memoria.

Tengo la siguiente tabla llamada temp, la cual es guardada como una tabla particionada en :temp.

col1 col2 col3

a 0 1
b 1.5 2.5
c 1.1 2.2
d 0.99 0.98

La estructura de directorios de la tabla particionada es:


temp
| .d
| col1
| col2
| col3
| sym

Digamos que tengo otra tabla llamada new.


new: ([] col1:ef`g; col2:1.0 1.1 1.1; col3: 2.25 2.20 2.70)

Mi pregunta es: ¿Cómo puedo hacer upsert de new en :temp?

He leído https://code.kx.com/q/ref/upsert/, pero el ejemplo que se muestra allí solamente hace upsert de un registro (no una tabla completa). He intentado :temp upsert (sym?new)lo cual provoca un error detype`.

Editar (Todos los comandos que ejecuto)


q)temp: ([] col1:abcd; col2:0.0 1.5 1.1 0.99; col3: 1.0 2.5 2.2 0.98)
q):temp/ set .Q.en[:.;temp]
:temp/
q)new: ([] col1:
efg; col2:1.0 1.1 1.1; col3: 2.25 2.20 2.70)
q):temp upsert new
'type
[0]
:temp upsert new
^

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para actualizar una tabla completa llamada new a la tabla splay existente llamada temp, puedes usar el siguiente comando:

    `:temp upsert new
    

    Este comando agrega filas nuevas en new a temp basándose en las claves coincidentes (en este caso, col1). Si no se encuentran claves coincidentes, las filas nuevas se agregan a temp.

    Asegúrate de que los nombres de columna y los tipos de datos en new coincidan con los de temp. Además, asegúrate de que la tabla splay temp se haya guardado correctamente en el disco antes de intentar agregar datos adicionales, utilizando la función .Q.en u otra similar.

    En tu caso, al ejecutar el comando :temp upsert new debería actualizar correctamente la tabla new a la tabla splay existente temp. Si recibes un mensaje de ‘error de tipo’, verifica nuevamente los tipos de datos y los nombres de las columnas en ambas tablas.

Comments are closed.