From c27daaa4315f16366946fdbd7391ec4e713c99a7 Mon Sep 17 00:00:00 2001 From: Nulo Date: Sat, 23 Nov 2024 23:07:38 -0300 Subject: [PATCH] temp --- sepa/bun.lockb | Bin 338656 -> 462408 bytes sepa/duckdb.sql | 81 +++++++++++++ sepa/importer.js | 287 ++++++++++++++++++++++++++++++++++++++++++++++ sepa/importer.ts | 253 ---------------------------------------- sepa/package.json | 14 ++- 5 files changed, 379 insertions(+), 256 deletions(-) create mode 100644 sepa/duckdb.sql create mode 100644 sepa/importer.js delete mode 100644 sepa/importer.ts diff --git a/sepa/bun.lockb b/sepa/bun.lockb index 13f51e85f84aa552f1d4225d99d9a143775e3969..c2790269f32436950a73a3a9f4d82eb2370ba94a 100755 GIT binary patch delta 145015 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 diff --git a/sepa/duckdb.sql b/sepa/duckdb.sql new file mode 100644 index 0000000..c61e7e9 --- /dev/null +++ b/sepa/duckdb.sql @@ -0,0 +1,81 @@ +CREATE TABLE datasets ( + id INTEGER PRIMARY KEY, + name TEXT UNIQUE, + date DATE, + id_comercio INTEGER +); +CREATE SEQUENCE seq_datasets START 1; + + +CREATE TABLE precios ( + id_dataset INTEGER, + id_comercio INTEGER, + id_bandera INTEGER, + id_sucursal INTEGER, + id_producto BIGINT, + productos_ean INTEGER, + productos_descripcion TEXT, + productos_cantidad_presentacion DECIMAL(10,2), + productos_unidad_medida_presentacion TEXT, + productos_marca TEXT, + productos_precio_lista DECIMAL(10,2), + productos_precio_referencia DECIMAL(10,2), + productos_cantidad_referencia DECIMAL(10,2), + productos_unidad_medida_referencia TEXT, + productos_precio_unitario_promo1 DECIMAL(10,2), + productos_leyenda_promo1 TEXT, + productos_precio_unitario_promo2 DECIMAL(10,2), + productos_leyenda_promo2 TEXT, + FOREIGN KEY (id_dataset) REFERENCES datasets(id) +); + +CREATE TABLE productos_descripcion_index ( + id_producto BIGINT, + productos_descripcion TEXT UNIQUE, + productos_marca TEXT +); + +CREATE TABLE sucursales ( + id_dataset INTEGER, + id_comercio INTEGER, + id_bandera INTEGER, + id_sucursal INTEGER, + sucursales_nombre TEXT, + sucursales_tipo TEXT, + sucursales_calle TEXT, + sucursales_numero TEXT, + sucursales_latitud DECIMAL, + sucursales_longitud DECIMAL, + sucursales_observaciones TEXT, + sucursales_barrio TEXT, + sucursales_codigo_postal TEXT, + sucursales_localidad TEXT, + sucursales_provincia TEXT, + sucursales_lunes_horario_atencion TEXT, + sucursales_martes_horario_atencion TEXT, + sucursales_miercoles_horario_atencion TEXT, + sucursales_jueves_horario_atencion TEXT, + sucursales_viernes_horario_atencion TEXT, + sucursales_sabado_horario_atencion TEXT, + sucursales_domingo_horario_atencion TEXT, + FOREIGN KEY (id_dataset) REFERENCES datasets(id), + UNIQUE (id_dataset, id_comercio, id_bandera, id_sucursal) +); + +CREATE TABLE banderas ( + id_dataset INTEGER, + id_comercio INTEGER NOT NULL, + id_bandera INTEGER NOT NULL, + comercio_cuit TEXT NOT NULL, + comercio_razon_social TEXT, + comercio_bandera_nombre TEXT, + comercio_bandera_url TEXT, + comercio_ultima_actualizacion DATE, + comercio_version_sepa TEXT, + FOREIGN KEY (id_dataset) REFERENCES datasets(id) +); + +-- Create indexes +CREATE INDEX idx_precios_id_producto ON precios(id_producto); +CREATE INDEX idx_precios_id_producto_id_dataset ON precios(id_producto, id_dataset); +CREATE INDEX idx_precios_id_dataset_id_comercio_id_sucursal ON precios(id_dataset, id_comercio, id_sucursal); \ No newline at end of file diff --git a/sepa/importer.js b/sepa/importer.js new file mode 100644 index 0000000..667fd54 --- /dev/null +++ b/sepa/importer.js @@ -0,0 +1,287 @@ +// @ts-check + +import * as fs from "fs/promises"; +import Papa from "papaparse"; +import { basename, join, dirname } from "path"; +import { $ } from "zx"; +import PQueue from "p-queue"; +import { Database } from "duckdb-async"; +import fg from "fast-glob"; +// import { waddler } from "waddler"; + +// TODO: verificar que pasa cuando hay varios datasets del mismo día (como los suele haber cuando actualizan el dataset con nuevos comercios) + +/** + * @param {string} path + * @returns {Promise} + */ +async function readFile(path) { + // XXX: DORINKA SRL a veces envía archivos con UTF-16. + const buffer = await fs.readFile(path, { encoding: null }); + if (buffer[0] === 0xff && buffer[1] === 0xfe) { + return buffer.toString("utf16le"); + } else { + return buffer.toString("utf8"); + } +} + +/** + * @param {Database} db + * @param {number} datasetId + * @param {string} dir + */ +async function importSucursales(db, datasetId, dir) { + const sucursales = Papa.parse(await readFile(join(dir, "sucursales.csv")), { + header: true, + }); + + const objs = sucursales.data + .filter((data) => data.id_comercio && data.id_bandera && data.id_sucursal) + .map((data) => { + // Megatone + if ("sucursales_domingohorario_atencion" in data) { + data.sucursales_domingo_horario_atencion = + data.sucursales_domingohorario_atencion; + delete data.sucursales_domingohorario_atencion; + } + data.sucursales_nombre = data.sucursales_nombre + .replaceAll("\t", " ") + .trim(); + return { + id_dataset: datasetId, + ...data, + }; + }); + const keys = Object.keys(objs[0]); + if (!keys.includes("sucursales_longitud")) { + throw new Error("Alberdi S.A. strikes again! las sucursales están rotas."); + } + const lines = objs.map( + (data) => keys.map((key) => data[key]).join("\t") + "\n" + ); + + const tsv = `${keys.join("\t")}\n${lines.join("")}`; + await importTsv(db, "sucursales", tsv); +} + +/** + * @param {Database} db + * @param {string} table + * @param {string} tsv + */ +async function importTsv(db, table, tsv) { + const dir = await fs.mkdtemp("/tmp/sepa-precios-importer-"); + try { + const tempFile = join(dir, "temp.tsv"); + await fs.writeFile(tempFile, tsv); + console.log( + `COPY ${table} FROM '${tempFile}' WITH (HEADER, DELIMITER '\t', NULL '', QUOTE '')` + ); + await db.exec( + `COPY ${table} FROM '${tempFile}' WITH (HEADER, DELIMITER '\t', NULL '', QUOTE '')` + ); + await fs.rm(dir, { recursive: true }); + } finally { + } +} + +/** + * @param {Database} db + * @param {number} datasetId + * @param {string} dir + */ +async function importBanderas(db, datasetId, dir) { + const banderas = Papa.parse(await readFile(join(dir, "comercio.csv")), { + header: true, + }); + const objs = banderas.data.map((data) => ({ + id_dataset: datasetId, + ...data, + })); + const keys = [ + "id_dataset", + "id_comercio", + "id_bandera", + "comercio_cuit", + "comercio_razon_social", + "comercio_bandera_nombre", + "comercio_bandera_url", + "comercio_ultima_actualizacion", + "comercio_version_sepa", + ]; + const lines = objs + .filter((data) => data.id_comercio && data.id_bandera) + .map((data) => + keys + .map((key) => { + const value = data[key]; + if (typeof value !== "string") { + return value; + } + return value.replaceAll("\t", " ").trim(); + }) + .join("\t") + ); + const tsv = `${keys.join("\t")}\n${lines.join("\n")}`; + + await importTsv(db, "banderas", tsv); +} + +/** + * @param {string} dir + */ +async function importDataset(dir) { + console.log(dir); + const date = basename(dir).match(/(\d{4}-\d{2}-\d{2})/)?.[1]; + const id_comercio = basename(dir).match(/comercio-sepa-(\d+)/)?.[1]; + // TODO: parsear "Ultima actualizacion" al final del CSV y insertarlo en la tabla datasets + + const db = await Database.create("importer.db"); + + try { + await db.exec("begin transaction"); + let datasetId; + const res = await db.all( + `insert into datasets (id, name, date, id_comercio) values (nextval('seq_datasets'), '${basename(dir)}', '${date}', ${id_comercio}) returning id` + ); + console.log("inserted dataset"); + datasetId = res[0].id; + + const comercios = Papa.parse(await readFile(join(dir, "comercio.csv")), { + header: true, + }); + const comercioCuit = comercios.data[0].comercio_cuit; + console.log(`dataset ${datasetId}, comercio ${comercioCuit}`); + + await importBanderas(db, datasetId, dir); + await importSucursales(db, datasetId, dir); + + let file = await readFile(join(dir, "productos.csv")); + // WALL OF SHAME: estos proveedores no saben producir CSVs correctos + if (comercioCuit == "30612929455") { + // Libertad S.A. + file = file.replaceAll("|RAPTOR 6X16X45", "/RAPTOR 6X16X45"); + } else if (comercioCuit == "30578411174") { + // Alberdi S.A. + file = file.replaceAll(";", "|"); + } + if (["30707429468", "30589621499"].includes(comercioCuit)) { + // TODO: si tienen los valores, pero con otros nombres, por ejemplo + // productos_precio_lista seria precio_unitario_bulto_por_unidad_venta_con_iva. + // pero no quiero mentir, asi que por ahora no lo importo + throw new Error( + `No voy a importar el dataset ${dir} porque el formato está mal. Pero se podría importar. Pero por ahora no lo voy a hacer. Véase https://gist.github.com/catdevnull/587d5c63c4bab11b9798861c917db93b` + ); + } + + console.time("parse"); + + const parsedData = Papa.parse(file, { + header: true, + skipEmptyLines: true, + }); + const objs = parsedData.data + .filter( + (data) => + data.id_comercio && + data.id_bandera && + data.id_sucursal && + data.id_producto + ) + .map((data) => { + delete data.id_dun_14; + return { + id_dataset: datasetId, + ...data, + productos_descripcion: data.productos_descripcion + .replaceAll("\t", " ") + .trim(), + productos_marca: data.productos_marca.trim(), + }; + }); + + const keys = [ + "id_dataset", + "id_comercio", + "id_bandera", + "id_sucursal", + "id_producto", + "productos_ean", + "productos_descripcion", + "productos_cantidad_presentacion", + "productos_unidad_medida_presentacion", + "productos_marca", + "productos_precio_lista", + "productos_precio_referencia", + "productos_cantidad_referencia", + "productos_unidad_medida_referencia", + "productos_precio_unitario_promo1", + "productos_leyenda_promo1", + "productos_precio_unitario_promo2", + "productos_leyenda_promo2", + ]; + + const lines = objs.map( + (data) => keys.map((key) => data[key]).join("\t") + "\n" + ); + + const tsv = `${keys.join("\t")}\n${lines.join("")}`; + await importTsv(db, "precios", tsv); + + console.timeEnd("parse"); + await db.exec("commit"); + console.info(`saved ${objs.length} rows`); + } catch (e) { + // @ts-ignore + if (e.errorType == "Constraint") { + console.log(`dataset ${basename(dir)} already exists`); + await db.exec("abort"); + return; + } + console.error("errored, aborting transaction", e); + await db.exec("abort"); + } finally { + try { + Bun.gc(true); + } catch {} + } +} + +/** + * @param {string} tarPath + */ +async function importDatasetTar(tarPath) { + console.log(`importing tar ${tarPath}`); + const dir = await fs.mkdtemp("/tmp/sepa-precios-importer-"); + try { + await $`tar -x -C ${dir} -f ${tarPath}`; + await importDump(dir); + } finally { + await fs.rm(dir, { recursive: true }); + } +} + +/** + * @param {string} dumpDir + */ +async function importDump(dumpDir) { + const pQueue = new PQueue({ concurrency: 1 }); + const files = await fg("**/productos.csv", { cwd: dumpDir }); + for (const file of files) { + const dir = join(dumpDir, dirname(file)); + pQueue.add(() => importDataset(dir)); + } + await pQueue.onIdle(); +} + +let hasTars = false; +const files = await fg("**/*.tar.zst", { cwd: process.argv[2] }); +for (const file of files) { + hasTars = true; + const tar = join(process.argv[2], file); + await importDatasetTar(tar); +} + +if (!hasTars) { + await importDump(process.argv[2]); +} diff --git a/sepa/importer.ts b/sepa/importer.ts deleted file mode 100644 index 27f5574..0000000 --- a/sepa/importer.ts +++ /dev/null @@ -1,253 +0,0 @@ -import * as fs from "fs/promises"; -import Papa from "papaparse"; -import { basename, join, dirname } from "path"; -import postgres from "postgres"; -import { Readable } from "stream"; -import { pipeline } from "node:stream/promises"; -import { $, Glob } from "bun"; -import PQueue from "p-queue"; - -// TODO: verificar que pasa cuando hay varios datasets del mismo día (como los suele haber cuando actualizan el dataset con nuevos comercios) - -const sql = postgres({}); - -async function readFile(path: string) { - // XXX: DORINKA SRL a veces envía archivos con UTF-16. - const buffer = await fs.readFile(path, { encoding: null }); - if (buffer[0] === 0xff && buffer[1] === 0xfe) { - return buffer.toString("utf16le"); - } else { - return buffer.toString("utf8"); - } -} - -async function importSucursales( - sql: postgres.Sql, - datasetId: number, - dir: string -) { - const sucursales: Papa.ParseResult = Papa.parse( - await readFile(join(dir, "sucursales.csv")), - { - header: true, - } - ); - - const objs = sucursales.data - .filter((data) => data.id_comercio && data.id_bandera && data.id_sucursal) - .map((data) => { - // Megatone - if ("sucursales_domingohorario_atencion" in data) { - data.sucursales_domingo_horario_atencion = - data.sucursales_domingohorario_atencion; - delete data.sucursales_domingohorario_atencion; - } - return { - id_dataset: datasetId, - ...data, - }; - }); - const keys = Object.keys(objs[0]); - const lines = Readable.from( - objs.map((data) => keys.map((key) => (data as any)[key]).join("\t") + "\n") - ); - const writable = - await sql`copy sucursales (${sql.unsafe(keys.join(", "))}) from stdin with CSV DELIMITER E'\t' QUOTE E'\b'`.writable(); - await pipeline(lines, writable); -} - -async function importBanderas( - sql: postgres.Sql, - datasetId: number, - dir: string -) { - const banderas: Papa.ParseResult = Papa.parse( - await readFile(join(dir, "comercio.csv")), - { header: true } - ); - const objs = banderas.data.map((data) => ({ - id_dataset: datasetId, - ...data, - })); - const keys = [ - "id_dataset", - "id_comercio", - "id_bandera", - "comercio_cuit", - "comercio_razon_social", - "comercio_bandera_nombre", - "comercio_bandera_url", - "comercio_ultima_actualizacion", - "comercio_version_sepa", - ]; - const lines = Readable.from( - objs - .filter((data) => data.id_comercio && data.id_bandera) - .map( - (data) => - keys - .map((key) => { - const value = (data as any)[key]; - if (typeof value !== "string") { - return value; - } - return value.replaceAll("\t", " ").trim(); - }) - .join("\t") + "\n" - ) - ); - const writable = - await sql`copy banderas (${sql.unsafe(keys.join(", "))}) from stdin with CSV DELIMITER E'\t' QUOTE E'\b'`.writable(); - await pipeline(lines, writable); -} - -async function importDataset(dir: string) { - console.log(dir); - const date = basename(dir).match(/(\d{4}-\d{2}-\d{2})/)![1]; - const id_comercio = basename(dir).match(/comercio-sepa-(\d+)/)![1]; - // TODO: parsear "Ultima actualizacion" al final del CSV y insertarlo en la tabla datasets - - try { - await sql.begin(async (sql) => { - let datasetId: number; - const res = - await sql`insert into datasets (name, date, id_comercio) values (${basename(dir)}, ${date}, ${id_comercio}) returning id`; - datasetId = res[0].id; - - const comercios: Papa.ParseResult<{ comercio_cuit: string }> = Papa.parse( - await readFile(join(dir, "comercio.csv")), - { header: true } - ); - const comercioCuit = comercios.data[0].comercio_cuit; - console.log(`dataset ${datasetId}, comercio ${comercioCuit}`); - - await importBanderas(sql, datasetId, dir); - await importSucursales(sql, datasetId, dir); - - let file = await readFile(join(dir, "productos.csv")); - // WALL OF SHAME: estos proveedores no saben producir CSVs correctos - if (comercioCuit == "30612929455") { - // Libertad S.A. - file = file.replaceAll("|RAPTOR 6X16X45", "/RAPTOR 6X16X45"); - } else if (comercioCuit == "30578411174") { - // Alberdi S.A. - file = file.replaceAll(";", "|"); - } - if (["30707429468", "30589621499"].includes(comercioCuit)) { - // TODO: si tienen los valores, pero con otros nombres, por ejemplo - // productos_precio_lista seria precio_unitario_bulto_por_unidad_venta_con_iva. - // pero no quiero mentir, asi que por ahora no lo importo - throw new Error( - `No voy a importar el dataset ${dir} porque el formato está mal. Pero se podría importar. Pero por ahora no lo voy a hacer. Véase https://gist.github.com/catdevnull/587d5c63c4bab11b9798861c917db93b` - ); - } - - console.time("parse"); - - const writable = - await sql`copy precios (id_dataset, id_comercio, id_bandera, id_sucursal, id_producto, productos_ean, productos_descripcion, productos_cantidad_presentacion, productos_unidad_medida_presentacion, productos_marca, productos_precio_lista, productos_precio_referencia, productos_cantidad_referencia, productos_unidad_medida_referencia, productos_precio_unitario_promo1, productos_leyenda_promo1, productos_precio_unitario_promo2, productos_leyenda_promo2) from stdin with CSV DELIMITER E'\t' QUOTE E'\b'`.writable(); - - let rowCount = 0; - - async function* processRows() { - const parsedData = Papa.parse(file, { - header: true, - skipEmptyLines: true, - }); - - for (const data of parsedData.data as any[]) { - if ( - data.id_comercio && - data.id_bandera && - data.id_sucursal && - data.id_producto - ) { - delete data.id_dun_14; - const row = { - id_dataset: datasetId, - ...data, - productos_descripcion: data.productos_descripcion - .replaceAll("\t", " ") - .trim(), - productos_marca: data.productos_marca.trim(), - }; - const values = - [ - row.id_dataset, - row.id_comercio, - row.id_bandera, - row.id_sucursal, - row.id_producto, - row.productos_ean, - row.productos_descripcion, - row.productos_cantidad_presentacion, - row.productos_unidad_medida_presentacion, - row.productos_marca, - row.productos_precio_lista, - row.productos_precio_referencia, - row.productos_cantidad_referencia, - row.productos_unidad_medida_referencia, - row.productos_precio_unitario_promo1, - row.productos_leyenda_promo1, - row.productos_precio_unitario_promo2, - row.productos_leyenda_promo2, - ].join("\t") + "\n"; - - rowCount++; - yield values; - } - } - } - - const generator = processRows(); - await pipeline(Readable.from(generator), writable); - - console.timeEnd("parse"); - console.info(`saved ${rowCount} rows`); - - Bun.gc(true); - }); - } catch (e) { - if ((e as any).code == "23505") { - console.log(`dataset ${basename(dir)} already exists`); - return; - } - throw e; - } -} - -async function importDatasetTar(tarPath: string) { - console.log(`importing tar ${tarPath}`); - const dir = await fs.mkdtemp("/tmp/sepa-precios-importer-"); - try { - await $`tar -x -C ${dir} -f ${tarPath}`; - await importDump(dir); - } finally { - await fs.rm(dir, { recursive: true }); - } -} -async function importDump(dumpDir: string) { - const pQueue = new PQueue({ concurrency: 2 }); - const glob = new Glob("**/productos.csv"); - for await (const file of glob.scan(dumpDir)) { - const dir = join(dumpDir, dirname(file)); - pQueue.add(() => importDataset(dir)); - } - await pQueue.onIdle(); -} - -try { - const tarGlob = new Glob("**/*.tar.zst"); - let hasTars = false; - for await (const file of tarGlob.scan(process.argv[2])) { - hasTars = true; - const tar = join(process.argv[2], file); - await importDatasetTar(tar); - } - - if (!hasTars) { - await importDump(process.argv[2]); - } -} finally { - await sql.end(); -} diff --git a/sepa/package.json b/sepa/package.json index ddeecd8..c0f48b4 100644 --- a/sepa/package.json +++ b/sepa/package.json @@ -3,10 +3,13 @@ "private": true, "type": "module", "devDependencies": { + "0x": "^5.8.0", + "@mmarchini/observe": "^3.0.0", "@types/bun": "^1.1.11", - "bun-types": "^1.1.30", "@types/papaparse": "^5.3.14", - "drizzle-kit": "^0.24.2" + "bun-types": "^1.1.30", + "drizzle-kit": "^0.24.2", + "tsx": "^4.19.2" }, "peerDependencies": { "typescript": "^5.0.0" @@ -16,11 +19,16 @@ "@aws-sdk/lib-storage": "^3.651.0", "date-fns": "^3.6.0", "drizzle-orm": "^0.33.0", + "duckdb": "^1.1.3", + "duckdb-async": "^1.1.3", + "fast-glob": "^3.3.2", "jschardet": "^3.1.3", "p-queue": "^8.0.1", "papaparse": "^5.4.1", "postgres": "^3.4.4", - "zod": "^3.23.8" + "waddler": "^0.0.3", + "zod": "^3.23.8", + "zx": "^8.2.2" }, "workspaces": [ "sitio2"