Skip to content

Instantly share code, notes, and snippets.

@junquera
Created November 20, 2015 22:38
Show Gist options
  • Select an option

  • Save junquera/20abd48ca5f2e53688b7 to your computer and use it in GitHub Desktop.

Select an option

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á)
#! /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