¿Quiere deshacerse de documentos con contenido duplicado?

Tanto si está combinando datos de dos fuentes de datos diferentes, como si tiene varias compras de un mismo cliente o acaba de introducir dos veces los mismos datos en un formulario web, parece que todo el mundo se enfrenta al problema de los datos duplicados en un momento u otro.

En esta entrada del blog, veremos cómo utilizar vistas en Couchbase Server 2.0 para encontrar campos coincidentes entre documentos y retener los documentos no duplicados. Por el bien de este ejemplo, supongamos que cada documento tiene tres campos comunes especificados por el usuario - nombre, apellido, código_postal. Utilización de la cliente ruby para Couchbase Server y el farsante ruby gem, puedes construir un sencillo generador de datos para cargar algunos datos duplicados de ejemplo en Couchbase. Para utilizar ruby como lenguaje de programación con Couchbase, debes descargar el SDK de Ruby aquí.

 

He aquí un ejemplo de ejecución:

 

$ ruby ./generate.rb -help

Uso: generate.rb [opciones]
   -h, -nombrehost NOMBREHOST           Nombre de host al que conectarse (por defecto: 127.0.0.1:8091)
   -u, -usuario USERNAME               Nombre de usuario para iniciar sesión (por defecto: ninguno)
   -p, -passwd CONTRASEÑA            Contraseña para iniciar sesión (por defecto: ninguna)
   -b, -nombre del cubo                 Nombre del bucket al que conectarse (por defecto: default)
   -t, -total-registros NUM           El número total de registros a generar (por defecto: 10000)
   -d, -duplicate-rate NUM          Cada registro NUM-th será duplicado (por defecto: 30)
   -?, -help                        Mostrar este mensaje


$ ruby ./generate.rb -t 1000 -d 5
     1000 / 1000

 

Cada documento en Couchbase tiene una clave especificada por el usuario que es accesible como meta.id en la función map de la vista. En la Figura 1 de abajo, hay múltiples documentos cargados en Couchbase Server usando el cliente generador de datos anterior.
 

Primer paso

Escribe una función map personalizada que emita el ID del documento (meta.id) de todos los documentos si coincide un determinado patrón de duplicados (nombre, apellido, código_postal en este caso).
 

function (doc, meta) {

      emit([doc.first_name + '-' + doc.last_name + '-' + doc.postal_code], meta.id);

}

La función de mapa define cuándo dos documentos son duplicados. Según la función map definida anteriormente, dos documentos son duplicados cuando el nombre, el apellido y el código postal coinciden. Utilizamos '-' para evitar el aliasing de los datos al concatenar el nombre, el apellido y el código postal.

Paso 2

La función reduce tiene el siguiente aspecto -

function (keys, values, rereduce) {

  if (rereduce) {
    var res = [];
    for (var i = 0; i < valores.longitud; i++){
      res = res.concat(valores[i])
    }
    devolver res;
  } else {
    valores de retorno;
  }
}
 

Tras la agrupación, si hay más de un valor meta.id, los concatenamos para obtener una lista de meta.id que hagan referencia a un documento duplicado.

Paso 3

La parte central del limpiador de datos está escrito en Ruby.
 
 
requiere couchbase
 
conexión = Couchbase.conecte(opciones)
ddoc = conexión.diseño_docs[opciones[:documento_diseño]]
ver = ddoc.enviar(opciones[:ver])
conexión.ejecute do
 ver.cada(:grupo => verdadero) do |doc|
   dup_num = doc.valor.talla
   si dup_num > 1
      pone "doc izquierda #{doc.valor[0]}, “
      # suprimir documentos del penúltimo al último
       conexión.borrar(doc.valor[1..1])
      pone "eliminado #{dup_num} duplicado(s)"
   fin
 fin
fin
 
Conéctate a Couchbase Server y consulta la vista. El campo valor es un array de meta.id's que corresponden a documentos duplicados (que coincidan con nombre, apellidos y código postal). Si el tamaño del array es mayor que 1, eliminamos todos los documentos excepto el correspondiente al último meta.id.

Si el número de meta.id en la matriz de valores es superior a 2, hay documentos duplicados correspondientes a esa clave. Como se muestra en la figura anterior, id19 e id20 son documentos duplicados.

La salida del script de limpieza de datos tiene el siguiente aspecto -
 
Como se muestra en la siguiente figura, ahora se eliminan los documentos duplicados.
¡Que aproveche!
Gracias a Sergey por reunir el código ruby.
Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Don Pinto, Director Principal de Producto, Couchbase

Don Pinto es Gerente Principal de Producto en Couchbase y actualmente está enfocado en avanzar las capacidades de Couchbase Server. Es un apasionado de la tecnología de datos, y en el pasado ha escrito varios artículos sobre Couchbase Server, incluyendo blogs técnicos y libros blancos. Antes de unirse a Couchbase, Don pasó varios años en IBM, donde desempeñó el papel de desarrollador de software en el grupo de gestión de la información DB2 y, más recientemente, como director de programa en el equipo de SQL Server en Microsoft. Don tiene un máster en informática y una licenciatura en ingeniería informática por la Universidad de Toronto, Canadá.

4 Comentarios

  1. Me da un error de "Reducción demasiado grande".

    1. Cuando elimino el trozo de código de reducción, el error desaparece. Pero supongo que necesito ese código de reducción...

  2. ¿Es posible hacer esto en N1QL? Debería ser más rápido que desde el cliente.

    1. Sí, sin duda sería posible hacer algo similar con N1QL en 4.0 y posteriores. Este blog fue escrito originalmente para 2.0. Dicho esto, Couchbase se despliega como un sistema distribuido, por lo que un procedimiento N1QL ejecutándose actuaría igual que lo haría un cliente. Realmente es un cliente para los datos subyacentes. Obtienes un beneficio en algunos casos ejecutando el servicio de consulta co-localizado con los datos, pero ciertamente puedes hacer eso con otros programas también.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.