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.

Cómo eliminar todos los bordes existentes y reinsertarlos desde un archivo CSV.

Actualmente estoy usando el cargador masivo de Neptune para cargar datos desde CSV a la base de datos de Neptune usando Python. Solo estaba obteniendo registros modificados. Entonces solo estaba insertando los datos.

Ahora el archivo contiene registros completos/históricos y el requisito es eliminar todos los bordes existentes para un registro dado en el archivo CSV y volver a cargar todos los bordes desde el archivo CSV. Estaba pensando en eliminar todos los bordes según cierta propiedad de la base de datos y luego llamar al método del cargador masivo de Neptune.

Tengo varios bordes (diferentes etiquetas) que se cargan desde archivos CSV (almacenados en un bucket s3). Entonces, es posible que tenga que eliminar varios bordes antes de poder comenzar a cargar archivos CSV.

Sin embargo, si elimino los bordes y luego falla la carga masiva de CSV, no habrá forma de recuperar los datos eliminados.

¿Cómo puedo asegurarme de que mi eliminación e inserción masiva ocurran dentro de un bloque de transacción? ¿Tenemos esa opción en Neptune? Estoy usando Python Gremlin.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que la eliminación y la inserción masiva ocurren dentro de un bloque de transacción, puede utilizar el objeto gremlinpython.driver.Client y su método submitAsync. Este método le permite enviar varias solicitudes como una única transacción, lo que garantiza que todas las solicitudes se ejecuten correctamente o ninguna de ellas.

    Aquí le presentamos un ejemplo de fragmento de código que demuestra cómo puede utilizar submitAsync para lograr un comportamiento transaccional:

    from gremlin_python.driver.client import Client
    
    # crear un nuevo objeto de cliente
    client = Client('ws://your-neptune-endpoint:8182/gremlin')
    
    # iniciar una nueva transacción
    traversal = client.submitAsync('g')
    traversal_id = traversal.result().objectId
    
    # eliminar todos los bordes con un cierto valor de propiedad
    delete_query = "g.E().has('property', 'value').drop()"
    delete_traversal = client.submitAsync(delete_query, {'gremlin': 'true', 'aliases': {'g': traversal_id}})
    delete_traversal.result()
    
    # cargar en masa nuevos bordes desde un archivo CSV
    bulk_load_query = "g.addV('vertex1').as('v1').addV('vertex2').as('v2').addE('edge1').from('v1').to('v2')"
    bulk_load_traversal = client.submitAsync(bulk_load_query, {'gremlin': 'true', 'aliases': {'g': traversal_id}})
    bulk_load_traversal.result()
    
    # confirmar la transacción
    client.submitAsync('g.tx().commit()', {'gremlin': 'true', 'aliases': {'g': traversal_id}}).result()
    
    # cerrar el objeto de cliente
    client.close()
    

    En este ejemplo, comenzamos creando un nuevo objeto Client y enviando una consulta para iniciar una nueva transacción. Luego utilizamos una segunda consulta para eliminar todos los bordes con un cierto valor de propiedad y una tercera consulta para cargar en masa nuevos bordes desde un archivo CSV. Luego confirmamos la transacción utilizando una cuarta consulta y finalmente cerramos el objeto Client.

    Tenga en cuenta que en las llamadas del método submitAsync, utilizamos un diccionario de opciones que incluye la bandera de lenguaje Gremlin ('gremlin': 'true') y un alias para el objeto de recorrido del gráfico g ('aliases': {'g': traversal_id}). Esto garantiza que todas las consultas compartan el mismo objeto de recorrido del gráfico y que las variables se conserven en las consultas dentro de la misma transacción.

Comments are closed.