-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathparquetWorker.ts
More file actions
30 lines (27 loc) · 1.03 KB
/
parquetWorker.ts
File metadata and controls
30 lines (27 loc) · 1.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import type { ColumnData } from 'hyparquet'
import { parquetRead } from 'hyparquet'
import { compressors } from 'hyparquet-compressors'
import { asyncBufferFrom } from '../utils.js'
import type { ChunkMessage, ClientMessage, ErrorMessage, ResultMessage } from './types.js'
function postChunkMessage ({ chunk, queryId }: ChunkMessage) {
self.postMessage({ chunk, queryId })
}
function postResultMessage ({ queryId }: ResultMessage) {
self.postMessage({ queryId })
}
function postErrorMessage ({ error, queryId }: ErrorMessage) {
self.postMessage({ error, queryId })
}
self.onmessage = async ({ data }: { data: ClientMessage }) => {
const { rowStart, rowEnd, columns, metadata, from, queryId } = data
const file = await asyncBufferFrom(from)
try {
await parquetRead({ metadata, file, rowStart, rowEnd, columns, compressors, onChunk })
postResultMessage({ queryId })
} catch (error) {
postErrorMessage({ error: error as Error, queryId })
}
function onChunk(chunk: ColumnData) {
postChunkMessage({ chunk, queryId })
}
}