Created
September 29, 2024 02:09
-
-
Save HiroNakamura/65d6c8652def5e589c3e01b685235289 to your computer and use it in GitHub Desktop.
Programando en BigQuery & Java
This file contains 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
import java.util.List; | |
import java.util.concurrent.ExecutorService; | |
import java.util.concurrent.Executors; | |
public class Main { | |
public static void main(String[] args) { | |
String strFecha = "2024-01-01"; // Ejemplo de fecha | |
List<Tabla> listaTabla = getDatosTabla(strFecha); // Método que obtiene datos de la tabla | |
if (listaTabla.size() > 0) { | |
// Creamos un pool de hilos para ejecutar tareas en paralelo | |
ExecutorService executorService = Executors.newFixedThreadPool(5); // 5 hilos | |
for (Tabla tabla : listaTabla) { | |
executorService.submit(new ProcesarTablaTask(tabla, listaTabla)); | |
} | |
// Cerramos el servicio una vez que todas las tareas están en cola | |
executorService.shutdown(); | |
} | |
} | |
// Esta clase representa una tarea que se ejecutará en un hilo | |
static class ProcesarTablaTask implements Runnable { | |
private Tabla tabla; | |
private List<Tabla> listaTabla; | |
public ProcesarTablaTask(Tabla tabla, List<Tabla> listaTabla) { | |
this.tabla = tabla; | |
this.listaTabla = listaTabla; | |
} | |
@Override | |
public void run() { | |
try { | |
Data data = new Data(); | |
data.setFecha(tabla.getFecha()); | |
// Aquí llamamos al método obtData en un hilo | |
double obtDato = obtData(data.getFecha()); | |
Image img = null; | |
for (Tabla otro : listaTabla) { | |
img = new Image(); | |
img.setImageNew(otro.getImage()); | |
} | |
// Inserta los datos en la tabla | |
insertarDatosEnTabla(img, data); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
// Métodos que simulan la lógica de la base de datos | |
public static List<Tabla> getDatosTabla(String strFecha) { | |
// Simula obtener datos de una tabla | |
return List.of(new Tabla(strFecha),new Tabla(strFecha),new Tabla(strFecha),new Tabla(strFecha),new Tabla(strFecha)); | |
} | |
public static double obtData(String fecha) { | |
// Simula obtener un dato de la base de datos basado en la fecha | |
return 123.45; | |
} | |
public static void insertarDatosEnTabla(Image img, Data data) { | |
// Simula insertar datos en la tabla | |
System.out.println("Insertando datos: " + data.getFecha() + ", Imagen: " + img.getImageNew()); | |
} | |
} | |
// Clases simuladas para representar la estructura de datos | |
class Tabla { | |
private String fecha; | |
private String image; | |
public Tabla(){} | |
public Tabla(String fecha) { | |
this.fecha = fecha; | |
} | |
public Tabla(String fecha, String image) { | |
this.fecha = fecha; | |
this.image = image; | |
} | |
public String getFecha() { | |
return fecha; | |
} | |
public String getImage() { | |
return image; | |
} | |
} | |
class Data { | |
private String fecha; | |
public void setFecha(String fecha) { | |
this.fecha = fecha; | |
} | |
public String getFecha() { | |
return fecha; | |
} | |
} | |
class Image { | |
private String imageNew; | |
public void setImageNew(String imageNew) { | |
this.imageNew = imageNew; | |
} | |
public String getImageNew() { | |
return imageNew; | |
} | |
} |
This file contains 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
CREATE OR REPLACE PROCEDURE `your_project.your_dataset.mi_stored_procedure`(input_fecha STRING) | |
BEGIN | |
-- Variable para almacenar el dato intermedio | |
DECLARE obt_dato FLOAT64; | |
-- Bucle FOR para iterar sobre los resultados de la tabla 'Tabla' | |
FOR record IN ( | |
SELECT fecha | |
FROM `your_project.your_dataset.Tabla` | |
WHERE fecha = input_fecha | |
) | |
DO | |
-- Obtener el dato calculado de la tabla 'Data' basado en la fecha | |
SET obt_dato = ( | |
SELECT AVG(valor) | |
FROM `your_project.your_dataset.Data` | |
WHERE fecha = record.fecha | |
); | |
-- Bucle FOR para iterar sobre los resultados de la tabla 'Otro' | |
FOR otro_record IN ( | |
SELECT image | |
FROM `your_project.your_dataset.Otro` | |
WHERE fecha = input_fecha | |
) | |
DO | |
-- Insertar datos en la tabla 'Resultados' | |
INSERT INTO `your_project.your_dataset.Resultados` (fecha, valor_calculado, image_new) | |
VALUES (record.fecha, obt_dato, otro_record.image); | |
END FOR; | |
END FOR; | |
END; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment