Skip to content

voluntas/duckdb-wasm-parquet

Repository files navigation

DuckDB-Wasm (OPFS) + Parquet + S3-compatible object storage

Static Badge License

ๆฆ‚่ฆ

DuckDB-Wasm ใ‚’ใƒ–ใƒฉใ‚ฆใ‚ถใงไฝฟ็”จใ—ใฆใ€ OPFS ใซ DuckDB ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใ€ S3 ไบ’ๆ›ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚นใƒˆใƒฌใƒผใ‚ธใซใ‚ใ‚‹ Parquet ใƒ•ใ‚กใ‚คใƒซใ‚’่ชญใฟ่พผใ‚“ใง DuckdB-Wasm ใซ็™ป้Œฒใ—ใ€ DuckDB-Wasm ใง SQL ใงใ‚ฏใ‚จใƒชใ‚’ๅฎŸ่กŒใ™ใ‚‹ใŠ่ฉฆใ—็”จใฎใ‚ขใƒ—ใƒชใงใ™ใ€‚

ๆณจๆ„

  • TypeScript ใฏ้ฉๅฝ“ใงใ™ใฎใงใ€ๅ‚่€ƒใซใ—ใชใ„ใงไธ‹ใ•ใ„
  • SQL ใฏ้ฉๅฝ“ใงใ™ใฎใงใ€ๅ‚่€ƒใซใ—ใชใ„ใงไธ‹ใ•ใ„

ใจใ‚Šใ‚ใˆใš่งฆใฃใฆใฟใŸใ„

GitHub Pages ใซใ‚ขใƒ—ใƒชใ‚’ใƒ‡ใƒ—ใƒญใ‚คใ—ใฆใ‚ใ‚Šใพใ™ใ€‚

DuckDB-Wasm (OPFS) + Parquet + S3-compatible object storage

ใƒญใƒผใ‚ซใƒซใงๅ‹•ไฝœใ•ใ›ใ‚‹ๆ–นๆณ•

pnpm install
mv .env.template .env
# https://duckdb-wasm.shiguredo.jp/P78BHZM3MD3MV47JDZG47PB8PW.parquet ใ‚’่จญๅฎšใ™ใ‚‹
pnpm run dev
  • ใƒ–ใƒฉใ‚ฆใ‚ถใง http://localhost:5173/ ใซใ‚ขใ‚ฏใ‚ปใ‚นใ™ใ‚‹ใจ่‡ชๅ‹•ใง OPFS ใซ DuckDB ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใ€Parquet ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ–ใ‚Š่พผใฟใพใ™
  • Read Parquet ใƒœใ‚ฟใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใ€Purge ใƒœใ‚ฟใƒณใ‚’ๆŠผใ—ใŸๅพŒใซๅ†ๅบฆ DuckDB ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใพใ™
  • Samples (1%) ใƒœใ‚ฟใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใ€ใ‚ตใƒณใƒ—ใƒชใƒณใ‚ฐใ—ใŸ 1% ใฎใƒ‡ใƒผใ‚ฟใ‚’่กจ็คบใ—ใฆใฟใฆใใ ใ•ใ„
  • Aggregation ใƒœใ‚ฟใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใ€้›†่จˆใ—ใŸ็ตๆžœใ‚’่กจ็คบใ—ใฆใฟใฆใใ ใ•ใ„
  • Purge ใƒœใ‚ฟใƒณใง OPFS ใฎ DuckDB ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒ•ใ‚กใ‚คใƒซใ‚’ๅ‰Š้™คใ—ใพใ™

ๅ‹•ไฝœไพ‹

Image from Gyazo

ใ‚คใƒณใ‚นใ‚ฟใƒณใƒˆๆคœ็ดข

ๆฏŽๅ›ž SQL ใ‚’ๅฎŸ่กŒใ—ใฆใ„ใพใ™ใ€‚

Image from Gyazo

CodeMirror ใ‚’ๅˆฉ็”จใ—ใŸ SQL ใ‚จใƒ‡ใ‚ฃใ‚ฟใƒผ

Vim ใ‚ญใƒผใƒใ‚คใƒณใƒ‡ใ‚ฃใƒณใ‚ฐใ‚’่ฟฝๅŠ ใ—ใฆใพใ™ใ€‚

Image from Gyazo

Parquet ใƒ•ใ‚กใ‚คใƒซใซใคใ„ใฆ

ไปฅไธ‹ใฎ URL ใงใŠ่ฉฆใ—็”จใฎ Parquet ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ–ๅพ—ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

https://duckdb-wasm.shiguredo.jp/P78BHZM3MD3MV47JDZG47PB8PW.parquet

ใ“ใฎ Parquet ใƒ•ใ‚กใ‚คใƒซใฏๆ™‚้›จๅ ‚ใฎ WebRTC SFU Sora ใŒๅ‡บๅŠ›ใ™ใ‚‹ ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆใ‹ใ‚‰้€ใ‚‰ใ‚Œใฆใใ‚‹ WebRTC ็ตฑ่จˆๆƒ…ๅ ฑ ใ‚’ Fluent Bit ็ตŒ็”ฑใง S3 ไบ’ๆ›ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚นใƒˆใƒฌใƒผใ‚ธ ใธไฟๅญ˜ใ—ใ€ DuckDB ใง้›†็ด„ใ— Parquet ใƒ•ใ‚กใ‚คใƒซใจใ—ใฆๅ‡บๅŠ›ใ—ใŸใ‚‚ใฎใงใ™ใ€‚ ๅ…ƒใ€…ใฎใƒญใ‚ฐใฏ JSONL ๅฝขๅผใง gzip ๅœง็ธฎใงใ™ใ€‚

  • ใ“ใฎ Parquet ใƒ•ใ‚กใ‚คใƒซใฏ zstd ใงๅœง็ธฎใ•ใ‚Œใฆใ„ใพใ™
  • ใ“ใฎ Parquet ใƒ•ใ‚กใ‚คใƒซใฏ Cloudflare R2 ใซไฟๅญ˜ใ•ใ‚ŒใฆใŠใ‚Šใ€ใƒ‘ใƒ–ใƒชใƒƒใ‚ฏใง่ชฐใงใ‚‚ใ‚ขใ‚ฏใ‚ปใ‚นใ™ใ‚‹ใ“ใจใŒใงใใพใ™
  • ใ“ใฎ Parquet ใƒ•ใ‚กใ‚คใƒซใฎ Access-Control-Allow-Origin ใฏ http://localhost:5173/ ใ‹ใ‚‰ใฎใ‚ขใ‚ฏใ‚ปใ‚นใ‚’่จฑๅฏใ—ใฆใ„ใพใ™
  • ใ“ใฎ Parquet ใƒ•ใ‚กใ‚คใƒซใฎใƒฉใ‚คใ‚ปใƒณใ‚นใฏ CC BY-NC-ND 4.0 ใงใ™

OPFS ใซใคใ„ใฆ

Origin private file system - Web APIs | MDN

ๅฎ‰ๅ…จใซใƒ–ใƒฉใ‚ฆใ‚ถใงใƒ•ใ‚กใ‚คใƒซใ‚’ๅ–ใ‚Šๆ‰ฑใ†ไป•็ต„ใฟใงใ™ใ€‚ DuckDB-Wasm ใฎ OPFS ใซ DuckDB ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒ•ใ‚กใ‚คใƒซใ‚’ไฟๅญ˜ใ™ใ‚‹ไป•็ต„ใฟใ‚’ๅˆฉ็”จใ—ใฆใ„ใพใ™ใ€‚

await db.open({
  path: 'opfs://test.db',
  accessMode: duckdb.DuckDBAccessMode.READ_WRITE,
})

ใ“ใฎไป•็ต„ใฟใ‚’ไฝฟใ†ไบ‹ใงใƒ–ใƒฉใ‚ฆใ‚ถใซ DuckDB ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒ•ใ‚กใ‚คใƒซใ‚’ๆฐธ็ถšๅŒ–ใ™ใ‚‹ใ“ใจใŒใงใใ‚‹ใ‚ˆใ†ใซใชใ‚Šใ€ ใƒ–ใƒฉใ‚ฆใ‚ถใ‚’้–‰ใ˜ใฆใ‚‚ใƒ‡ใƒผใ‚ฟใŒๆฎ‹ใ‚Š็ถšใ‘ใพใ™ใ€‚

DuckDB ใงใ‚ขใ‚ฏใ‚ปใ‚นใ—ใฆใฟใ‚‹

D SELECT * FROM parquet_scan('https://duckdb-wasm.shiguredo.jp/P78BHZM3MD3MV47JDZG47PB8PW.parquet');
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚    connection_id     โ”‚          id          โ”‚      label      โ”‚ โ€ฆ โ”‚   rtc_timestamp   โ”‚      rtc_type       โ”‚
โ”‚       varchar        โ”‚       varchar        โ”‚     varchar     โ”‚   โ”‚      double       โ”‚       varchar       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ media-playout       โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ certificate         โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ certificate         โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ codec               โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ codec               โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ candidate-pair      โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ candidate-pair      โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ candidate-pair      โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ candidate-pair      โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ candidate-pair      โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ candidate-pair      โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ data-channel        โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ data-channel        โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ data-channel        โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ data-channel        โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ local-candidate     โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ local-candidate     โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ local-candidate     โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ local-candidate     โ”‚
โ”‚ F6WJ4SY2HD63Z25XD3โ€ฆ  โ”‚ DE5MC2JG3H2PK667ZGโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726394702721.481 โ”‚ local-candidate     โ”‚
โ”‚          ยท           โ”‚          ยท           โ”‚        ยท        โ”‚ ยท โ”‚         ยท         โ”‚       ยท             โ”‚
โ”‚          ยท           โ”‚          ยท           โ”‚        ยท        โ”‚ ยท โ”‚         ยท         โ”‚       ยท             โ”‚
โ”‚          ยท           โ”‚          ยท           โ”‚        ยท        โ”‚ ยท โ”‚         ยท         โ”‚       ยท             โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ candidate-pair      โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ data-channel        โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ data-channel        โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ data-channel        โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ data-channel        โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ inbound-rtp         โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ inbound-rtp         โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ inbound-rtp         โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ inbound-rtp         โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ outbound-rtp        โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ outbound-rtp        โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚   1726403011612.0 โ”‚ remote-inbound-rtp  โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚   1726403014647.0 โ”‚ remote-inbound-rtp  โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚   1726403013580.0 โ”‚ remote-outbound-rtp โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚   1726403011612.0 โ”‚ remote-outbound-rtp โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚   1726403015068.0 โ”‚ remote-outbound-rtp โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚   1726403014750.0 โ”‚ remote-outbound-rtp โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ media-source        โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ media-source        โ”‚
โ”‚ ZVWETDA641527D2A6Tโ€ฆ  โ”‚ S31C88V2SX7M76DD6Mโ€ฆ  โ”‚ WebRTC SFU Sora โ”‚ โ€ฆ โ”‚ 1726403015487.149 โ”‚ transport           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 83911 rows (40 shown)                                                                  20 columns (5 shown) โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่จ˜ไบ‹

DuckDB/DuckDB-Wasm ใ‚’ๅˆฉ็”จใ—ใŸไฝŽใ‚ณใ‚นใƒˆใงใฎๅฏ่ฆ–ๅŒ–

ใƒฉใ‚คใ‚ปใƒณใ‚น

Copyright 2024-2025, @voluntas

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.