Created
November 20, 2015 22:38
-
-
Save junquera/20abd48ca5f2e53688b7 to your computer and use it in GitHub Desktop.
Script en python para generar los datos de inserción masiva de la PECL2 de Bases de Datos Avanzadas (Asignatura de 3º en la Universidad de Alcalá)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #! /usr/bin/env python | |
| # CARGA MASIVA POSTGRESQL | |
| # # -*- coding: UTF-8 | |
| # 100 Planes de precios con cuotas entre 20 y 100 euros | |
| # 500.000 clientes dados de alta | |
| # Cada cliente, tiene una línea dada de alta | |
| # Hay almacenados 12 millones de consumos de voz y de mensajes, repartidos entre todas las líneas y realizadas a lo largo de los meses del año 2014 | |
| # Cada lnea tiene una factura de acuerdo a su consumo y su plan de precios que tiene asociado para cada mes del año 2014 | |
| import random | |
| insertConsumos = "INSERT INTO consumos(codigo_apunte, telefono_destino, numero_linea) VALUES (%d, %d, %d);\n" | |
| insertClientes = "INSERT INTO \"Clientes\"(codigo_cliente, nombre, apellidos, direccion, \"NIF\", provincia) VALUES (%d, \'%s\', \'%s\', \'%s\', \'%s\', \'%s\');" | |
| insertFactura = "INSERT INTO facturas(codigo_factura, lugar_emision, fecha_emision, fecha_inicio_facturacion, fecha_fin_facturacion, importe_sin_ivan, \"IVA\", importe_total, numero_linea) VALUES (%d, \'%s\', \'%s\', \'%s\', \'%s\', %f, %f, %f, %d);\n" | |
| insertLinea = "INSERT INTO lineas(numero_linea, codigo_cliente, codigo_plan, fecha_alta) VALUES (%d, %d, %d, \'%s\');\n" | |
| insertMensaje = "INSERT INTO mensajes(codigo_apunte, fecha_hora_envio, tipo_mensaje, tamanio) VALUES (%d, \'%s\', \'%s\', %f);\n" | |
| insertPlanPrec = "INSERT INTO planes_precios(codigo_plan, nombre_plan, cuota, establecimiento_llamada, centimos_minuto, precio_sms, precio_mms) VALUES (%d, \'%s\', %f, %f, %f, %f, %f);\n" | |
| insertVoz = "INSERT INTO voz(codigo_apunte, fecha_hora_inicio, fecha_hora_fin, duracion) VALUES (%d, \'%s\', \'%s\', %f);\n" | |
| nPlanesPrecios = 100 | |
| precios = (20, 100) | |
| nClientes = 500000 | |
| consumos = 12000000 | |
| consumosCliente = consumos / nClientes | |
| pM = random.random() | |
| consumosM = consumos * pM | |
| consumosV = consumos * (1 - pM) | |
| precioVoz = random.random() | |
| precioMensaje = random.random() | |
| ymdhms = '2014-%d-%d %d:%d:%d' | |
| fConsumo = open('consumo.sql','w') | |
| fFacturas = open('facturas.sql','w') | |
| fLinea = open('linea.sql','w') | |
| fMensajes = open('mensajes.sql','w') | |
| fPlan = open('plan.sql','w') | |
| fVoz = open('voz.sql', 'w') | |
| fClientes = open('clientes.sql', 'w') | |
| for i in range(nPlanesPrecios): | |
| fPlan.write(insertPlanPrec%(i, str(i), 20+80*(i/100.0), precioVoz, 0, precioMensaje, precioMensaje)) | |
| for i in range(nClientes): | |
| planp = random.randint(0, nPlanesPrecios-1) | |
| fLinea.write(insertLinea%(i, i, planp, '2014-1-1')) | |
| fClientes.write(insertClientes%(i, str(i), str(i), "C/ "+str(i), str(i), "Madrid")) | |
| mensajes = [0,0,0,0,0,0,0,0,0,0,0,0] | |
| llamadas = [0,0,0,0,0,0,0,0,0,0,0,0] | |
| for j in range(consumosCliente): | |
| mes = random.randint(1, 12) | |
| hora = random.randint(0,23) | |
| minuto = random.randint(0,58) | |
| fecha = ymdhms%(mes, random.randint(1,28), hora, minuto, random.randint(0,59)) | |
| fin = ymdhms%(mes, random.randint(1,28), hora, minuto+1, random.randint(0,59)) | |
| num = i * 1000000 + j | |
| fConsumo.write(insertConsumos%(num, random.randint(0, nClientes), i)) | |
| if random.random() > 0.5: | |
| llamadas[mes-1]+=1 | |
| fVoz.write(insertVoz%(num , fecha, fin, 1)) | |
| else: | |
| mensajes[mes-1]+=1 | |
| tipo_mensaje = 'SMS' if random.random() > 0.5 else 'MMS' | |
| fMensajes.write(insertMensaje%(num, fecha, tipo_mensaje, 140)) | |
| for j in range(13)[1:]: | |
| importe = 20+80*(planp/100.0) | |
| importe+=mensajes[j-1]*precioMensaje | |
| importe+=llamadas[j-1]*precioVoz | |
| fFacturas.write(insertFactura%(num, 'Madrid', ymdhms%(j, 28, 0, 0, 0), ymdhms%(j, 1, 0, 0, 0), ymdhms%(j, 28, 0, 0, 0), importe, 0.21, 0.21*importe, i)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment