Я пытаюсь сделатьuckdb-wasm с angular, чтобы загрузить файл паркета и запросить его, мне удалось создать соединение, но не удалось загрузить файл паркета, получая ошибку
Ошибка: Неперехвачено (в обещании): Ошибка: Ошибка ввода-вывода: Файлы не найдены соответствует шаблону "test.parquet" Ошибка: Ошибка ввода-вывода: файлы не найдены сопоставьте шаблон "test.parquet" в O.onMessage (duckdb-browser.mjs:1:11169) в _ZoneDelegate.invokeTask (zone.js:402:31) в core.mjs:10757:55 в AsyncStackTaggedZoneSpec.onInvokeTask (core.mjs:10757:36) по адресу _ZoneDelegate.invokeTask (zone.js:401:60) в Object.onInvokeTask (core.mjs:11070:33) в _ZoneDelegate.invokeTask (zone.js:401:60) в Zone.runTask (zone.js:173:47) в ZoneTask.invokeTask [как вызвать] (zone.js:483:34) при вызовеTask (zone.js:1631:18) при разрешенииPromise (zone.js:1193:31) в Zone.js:1100:17 в Zone.js:1116:33 в asyncGeneratorStep (asyncToGenerator.js:6:1) в _throw (asyncToGenerator.js:25:1) в _ZoneDelegate.invoke (zone.js:368:26) в Object.onInvoke (core.mjs:11083:33) в _ZoneDelegate.invoke (zone.js:367:52) в Zone.run (zone.js:129:43) в Zone.js:1257:36
я написал код в сервисе,
import { Injectable } from '@angular/core';
import * as duckdb from '@duckdb/duckdb-wasm';
@Injectable({
providedIn: 'root',
})
export class DuckdbService {
constructor() {
this.makeConnection();
}
async makeConnection() {
const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles();
// Select a bundle based on browser checks
const bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES);
const worker_url = URL.createObjectURL(
new Blob([`importScripts("${bundle.mainWorker}");`], {
type: 'text/javascript',
})
);
// Instantiate the asynchronus version of DuckDB-Wasm
const worker = new Worker(worker_url);
const logger = new duckdb.ConsoleLogger();
const db = new duckdb.AsyncDuckDB(logger, worker);
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
console.info(db);
const conn = await db.connect();
const results = conn.query(`SELECT * FROM read_parquet('test.parquet')`);
console.info(results);
URL.revokeObjectURL(worker_url);
}
}
Пожалуйста помогите мне с решением проблемы
Я пытаюсь загрузить и запросить файл паркета
🤔 А знаете ли вы, что...
JavaScript можно использовать для создания видеоигр, как 2D, так и 3D, с использованием библиотеки Three.js.
Команда read_parquet('test.parquet')
)` прочитает виртуальный файл, зарегистрированный в DuckDB с псевдонимом «test.parquet». Вам необходимо сначала зарегистрировать физический файл в виртуальной файловой системе DuckDB, прежде чем вы сможете запросить его.
Существует несколько различных способов регистрации файла, показанного ниже, который был скопирован с https://duckdb.org/docs/api/wasm/data_ingestion.html#parquet.
// from Parquet files
// ...Local
const pickedFile: File = letUserPickFile();
await db.registerFileHandle('local.parquet', pickedFile, DuckDBDataProtocol.BROWSER_FILEREADER, true);
// ...Remote
await db.registerFileURL('remote.parquet', 'https://origin/remote.parquet', DuckDBDataProtocol.HTTP, false);
// ... Using Fetch
const res = await fetch('https://origin/remote.parquet');
await db.registerFileBuffer('buffer.parquet', new Uint8Array(await res.arrayBuffer()));
// ..., by specifying URLs in the SQL text
await c.query(`
CREATE TABLE direct AS
SELECT * FROM 'https://origin/remote.parquet'
`);
// ..., or by executing raw insert statements
await c.query(`
INSERT INTO existing_table
VALUES (1, 'foo'), (2, 'bar')`);
В качестве альтернативы вы можете запросить удаленный файл с расширением httpfs, не регистрируя его, как показано на странице https://duckdb.org/docs/api/wasm/data_ingestion.html#parquet
const results = conn.query(`SELECT * FROM read_parquet('https://origon/test.parquet')`);