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.

Problemas al realizar una actualización en Cassandra con una clave de partición compuesta.

Tengo esta tabla en Cassandra:

CREATE TABLE wear_dealer.product_color_size_stock (
    productcode text,
    colorcode text,
    sizecode text,
    ean text,
    shortdescription text,
    stock int,
    PRIMARY KEY (productcode, colorcode, sizecode)
) WITH CLUSTERING ORDER BY (colorcode ASC, sizecode ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';
CREATE INDEX product_color_size_stock_stock_idx ON wear_dealer.product_color_size_stock (stock);

¿Cómo puedo actualizar el campo “shortdescription” teniendo solo el valor para “productcode”?

Cuando ejecuto esta consulta:

cqlsh:wear_dealer> update seasons_product_color_size
                   set shortdescription ='AAA'
                   where productcode='RUNTS';

Obtengo el siguiente error:

InvalidRequest: Error from server: code=2200 [Invalid query] message="Some partition key parts are missing: seasoncode"

¿Alguna estrategia para superar esto?

¡Muchas gracias de antemano!

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la consulta de actualización no tiene una clave de partición requerida, en este caso, el seasoncode. Sin la clave primaria completa, Cassandra no puede localizar la fila específica en la tabla que necesita ser actualizada. Para superar esto, puede proporcionar todos los valores de clave primaria para la fila que desea modificar o cambiar el esquema de la tabla para incluir un nuevo índice secundario en el productcode. Al agregar el índice, puede crear una búsqueda eficiente en el campo productcode, que luego se puede utilizar para localizar la fila correcta para la actualización. Una definición de tabla modificada que incluye un índice se vería así:

    CREATE TABLE wear_dealer.product_color_size_stock (
        productcode text,
        colorcode text,
        sizecode text,
        ean text,
        shortdescription text,
        stock int,
        PRIMARY KEY (productcode, colorcode, sizecode)
    ) WITH CLUSTERING ORDER BY (colorcode ASC, sizecode ASC)
        AND bloom_filter_fp_chance = 0.01
        AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
        AND comment = ''
        AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy',
                         'max_threshold': '32', 'min_threshold': '4'}
        AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
        AND crc_check_chance = 1.0
        AND dclocal_read_repair_chance = 0.1
        AND default_time_to_live = 0
        AND gc_grace_seconds = 864000
        AND max_index_interval = 2048
        AND memtable_flush_period_in_ms = 0
        AND min_index_interval = 128
        AND read_repair_chance = 0.0
        AND speculative_retry = '99PERCENTILE';
    
    CREATE INDEX product_code_idx ON wear_dealer.product_color_size_stock (productcode);
    

    Con este esquema modificado, ahora puede actualizar el campo shortdescription para un productcode particular utilizando la siguiente consulta:

    cqlsh:wear_dealer> UPDATE product_color_size_stock SET shortdescription = 'AAA' WHERE productcode = 'RUNTS';
    

    Esto debería permitirle actualizar el campo shortdescription sin encontrar el error de “Solicitud inválida”.

Comments are closed.