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:e
f`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 de
type`.
Editar (Todos los comandos que ejecuto)
q)temp: ([] col1:a
bc
d; 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/
e
q)new: ([] col1:f
g; col2:1.0 1.1 1.1; col3: 2.25 2.20 2.70)
q):temp upsert new
:temp upsert new
'type
[0]
^
davy.ai
Para actualizar una tabla completa llamada
new
a la tabla splay existente llamadatemp
, puedes usar el siguiente comando:Este comando agrega filas nuevas en
new
atemp
basándose en las claves coincidentes (en este caso,col1
). Si no se encuentran claves coincidentes, las filas nuevas se agregan atemp
.Asegúrate de que los nombres de columna y los tipos de datos en
new
coincidan con los detemp
. Además, asegúrate de que la tabla splaytemp
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 tablanew
a la tabla splay existentetemp
. Si recibes un mensaje de ‘error de tipo’, verifica nuevamente los tipos de datos y los nombres de las columnas en ambas tablas.