@milaboratories/pl-middle-layer 1.41.9 → 1.41.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1331 -1260
- package/dist/index.mjs.map +1 -1
- package/dist/pool/data.d.ts +8 -4
- package/dist/pool/data.d.ts.map +1 -1
- package/dist/pool/driver.d.ts.map +1 -1
- package/package.json +15 -15
- package/src/pool/data.ts +107 -18
- package/src/pool/driver.ts +20 -5
package/dist/pool/data.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { JsonDataInfo, ParquetChunk, PColumnSpec, PColumnValue, PColumnValues, PObjectId, PObjectSpec } from '@platforma-sdk/model';
|
|
2
2
|
import { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';
|
|
3
|
+
import { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
|
|
3
4
|
import { ResourceType } from '@milaboratories/pl-client';
|
|
4
|
-
export declare function allBlobs<B>(data: DataInfo<B>): Generator<B>;
|
|
5
|
-
export declare function mapBlobs<B1, B2>(data: DataInfo<B1>, mapping: (blob: B1) => B2): DataInfo<B2>;
|
|
5
|
+
export declare function allBlobs<B>(data: PFrameInternal.DataInfo<B>): Generator<B>;
|
|
6
|
+
export declare function mapBlobs<B1, B2>(data: PFrameInternal.DataInfo<B1>, mapping: (blob: B1) => B2): PFrameInternal.DataInfo<B2>;
|
|
6
7
|
export declare const PColumnDataJsonPartitioned: ResourceType;
|
|
7
8
|
export declare const PColumnDataJsonSuperPartitioned: ResourceType;
|
|
8
9
|
export declare const PColumnDataBinaryPartitioned: ResourceType;
|
|
9
10
|
export declare const PColumnDataBinarySuperPartitioned: ResourceType;
|
|
11
|
+
export declare const PColumnDataParquetPartitioned: ResourceType;
|
|
12
|
+
export declare const PColumnDataParquetSuperPartitioned: ResourceType;
|
|
10
13
|
export declare const PColumnDataJson: ResourceType;
|
|
11
14
|
export type PColumnDataJsonResourceValue = {
|
|
12
15
|
keyLength: number;
|
|
@@ -19,7 +22,8 @@ export type PColumnDataSuperPartitionedResourceValue = {
|
|
|
19
22
|
superPartitionKeyLength: number;
|
|
20
23
|
partitionKeyLength: number;
|
|
21
24
|
};
|
|
22
|
-
export declare function parseDataInfoResource(data: PlTreeNodeAccessor): DataInfo<ResourceInfo>;
|
|
25
|
+
export declare function parseDataInfoResource(data: PlTreeNodeAccessor): PFrameInternal.DataInfo<ResourceInfo>;
|
|
26
|
+
export declare function traverseParquetPartitionedResource(resource: PlTreeNodeAccessor): ParquetChunk<ResourceInfo>;
|
|
23
27
|
export declare function makeDataInfoFromPColumnValues(spec: PColumnSpec, data: PColumnValues): JsonDataInfo;
|
|
24
28
|
export declare function deriveLegacyPObjectId(spec: PObjectSpec, data: PlTreeNodeAccessor): PObjectId;
|
|
25
29
|
export declare function deriveGlobalPObjectId(blockId: string, exportName: string): PObjectId;
|
package/dist/pool/data.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/pool/data.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/pool/data.ts"],"names":[],"mappings":";AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAGjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAElB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAWhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,wBAAiB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAmB3E;AAYD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAC7B,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GACxB,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CA4B7B;AAED,eAAO,MAAM,0BAA0B,kDAAmD,CAAC;AAC3F,eAAO,MAAM,+BAA+B,kDAG3C,CAAC;AACF,eAAO,MAAM,4BAA4B,kDAAqD,CAAC;AAC/F,eAAO,MAAM,iCAAiC,kDAG7C,CAAC;AACF,eAAO,MAAM,6BAA6B,kDAAsD,CAAC;AACjG,eAAO,MAAM,kCAAkC,kDAG9C,CAAC;AACF,eAAO,MAAM,eAAe,kDAAwC,CAAC;AAErE,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,GACvB,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CA0LvC;AAED,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,kBAAkB,GAAG,YAAY,CAAC,YAAY,CAAC,CAc3G;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,aAAa,GAClB,YAAY,CAcd;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,GAAG,SAAS,CAK5F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAEpF;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAEzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-middle-layer",
|
|
3
|
-
"version": "1.41.
|
|
3
|
+
"version": "1.41.11",
|
|
4
4
|
"description": "Pl Middle Layer",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20.16.0"
|
|
@@ -22,31 +22,31 @@
|
|
|
22
22
|
"keywords": [],
|
|
23
23
|
"license": "UNLICENSED",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@milaboratories/pframes-rs-node": "1.0.
|
|
25
|
+
"@milaboratories/pframes-rs-node": "1.0.57",
|
|
26
26
|
"canonicalize": "~2.1.0",
|
|
27
27
|
"denque": "^2.1.0",
|
|
28
28
|
"lru-cache": "^11.1.0",
|
|
29
29
|
"quickjs-emscripten": "0.31.0",
|
|
30
|
-
"undici": "~7.
|
|
30
|
+
"undici": "~7.13.0",
|
|
31
31
|
"utility-types": "^3.11.0",
|
|
32
|
-
"yaml": "^2.
|
|
32
|
+
"yaml": "^2.8.0",
|
|
33
33
|
"zod": "~3.23.8",
|
|
34
|
-
"remeda": "^2.
|
|
34
|
+
"remeda": "^2.28.0",
|
|
35
35
|
"@milaboratories/computable": "^2.6.3",
|
|
36
|
-
"@
|
|
37
|
-
"@milaboratories/pl-http": "^1.1.4",
|
|
36
|
+
"@milaboratories/pl-http": "^1.1.5",
|
|
38
37
|
"@milaboratories/resolve-helper": "^1.1.0",
|
|
39
|
-
"@milaboratories/pl-
|
|
40
|
-
"@milaboratories/pl-
|
|
41
|
-
"@milaboratories/pl-model-middle-layer": "~1.8.
|
|
42
|
-
"@milaboratories/pl-model-common": "~1.19.
|
|
38
|
+
"@milaboratories/pl-client": "^2.11.7",
|
|
39
|
+
"@milaboratories/pl-drivers": "^1.9.0",
|
|
40
|
+
"@milaboratories/pl-model-middle-layer": "~1.8.7",
|
|
41
|
+
"@milaboratories/pl-model-common": "~1.19.5",
|
|
42
|
+
"@platforma-sdk/block-tools": "^2.5.81",
|
|
43
43
|
"@milaboratories/pl-tree": "~1.7.5",
|
|
44
|
-
"@
|
|
45
|
-
"@platforma-sdk/workflow-tengo": "4.17.1",
|
|
46
|
-
"@platforma-sdk/model": "~1.42.10",
|
|
44
|
+
"@platforma-sdk/model": "~1.42.15",
|
|
47
45
|
"@milaboratories/pl-model-backend": "~1.1.2",
|
|
46
|
+
"@platforma-sdk/workflow-tengo": "4.17.1",
|
|
47
|
+
"@milaboratories/ts-helpers": "^1.4.3",
|
|
48
|
+
"@milaboratories/pl-errors": "^1.1.14",
|
|
48
49
|
"@milaboratories/pl-config": "^1.6.3",
|
|
49
|
-
"@milaboratories/pl-errors": "^1.1.13",
|
|
50
50
|
"@milaboratories/pl-deployments": "^2.4.7"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
package/src/pool/data.ts
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
PFrameDriverError,
|
|
3
|
+
type BinaryChunk,
|
|
4
|
+
type JsonDataInfo,
|
|
5
|
+
type ParquetChunk,
|
|
6
|
+
type ParquetChunkMapping,
|
|
7
|
+
type ParquetChunkMetadata,
|
|
8
|
+
type PColumnSpec,
|
|
9
|
+
type PColumnValue,
|
|
10
|
+
type PColumnValues,
|
|
11
|
+
type PlRef,
|
|
12
|
+
type PObjectId,
|
|
13
|
+
type PObjectSpec,
|
|
14
|
+
} from '@platforma-sdk/model';
|
|
2
15
|
import type { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';
|
|
3
16
|
import { assertNever } from '@milaboratories/ts-helpers';
|
|
4
17
|
import canonicalize from 'canonicalize';
|
|
@@ -10,20 +23,24 @@ import {
|
|
|
10
23
|
} from '@milaboratories/pl-client';
|
|
11
24
|
import type { Writable } from 'utility-types';
|
|
12
25
|
import { createHash } from 'node:crypto';
|
|
26
|
+
import type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
|
|
13
27
|
|
|
14
|
-
export function* allBlobs<B>(data: DataInfo<B>): Generator<B> {
|
|
28
|
+
export function* allBlobs<B>(data: PFrameInternal.DataInfo<B>): Generator<B> {
|
|
15
29
|
switch (data.type) {
|
|
16
30
|
case 'Json':
|
|
17
31
|
return;
|
|
18
32
|
case 'JsonPartitioned':
|
|
19
|
-
for (const
|
|
33
|
+
for (const blob of Object.values(data.parts)) yield blob;
|
|
20
34
|
return;
|
|
21
35
|
case 'BinaryPartitioned':
|
|
22
|
-
for (const
|
|
36
|
+
for (const { index, values } of Object.values(data.parts)) {
|
|
23
37
|
yield index;
|
|
24
38
|
yield values;
|
|
25
39
|
}
|
|
26
40
|
return;
|
|
41
|
+
case 'ParquetPartitioned':
|
|
42
|
+
for (const { data: blob } of Object.values(data.parts)) yield blob;
|
|
43
|
+
return;
|
|
27
44
|
default:
|
|
28
45
|
assertNever(data);
|
|
29
46
|
}
|
|
@@ -40,14 +57,17 @@ function mapValues<T extends object, TResult>(
|
|
|
40
57
|
}
|
|
41
58
|
|
|
42
59
|
export function mapBlobs<B1, B2>(
|
|
43
|
-
data: DataInfo<B1>,
|
|
60
|
+
data: PFrameInternal.DataInfo<B1>,
|
|
44
61
|
mapping: (blob: B1) => B2,
|
|
45
|
-
): DataInfo<B2> {
|
|
62
|
+
): PFrameInternal.DataInfo<B2> {
|
|
46
63
|
switch (data.type) {
|
|
47
64
|
case 'Json':
|
|
48
65
|
return { ...data };
|
|
49
66
|
case 'JsonPartitioned':
|
|
50
|
-
return {
|
|
67
|
+
return {
|
|
68
|
+
...data,
|
|
69
|
+
parts: mapValues(data.parts, mapping),
|
|
70
|
+
};
|
|
51
71
|
case 'BinaryPartitioned':
|
|
52
72
|
return {
|
|
53
73
|
...data,
|
|
@@ -56,6 +76,14 @@ export function mapBlobs<B1, B2>(
|
|
|
56
76
|
values: mapping(v.values),
|
|
57
77
|
})),
|
|
58
78
|
};
|
|
79
|
+
case 'ParquetPartitioned':
|
|
80
|
+
return {
|
|
81
|
+
...data,
|
|
82
|
+
parts: mapValues(data.parts, (v) => ({
|
|
83
|
+
...v,
|
|
84
|
+
data: mapping(v.data),
|
|
85
|
+
})),
|
|
86
|
+
};
|
|
59
87
|
default:
|
|
60
88
|
assertNever(data);
|
|
61
89
|
}
|
|
@@ -71,6 +99,11 @@ export const PColumnDataBinarySuperPartitioned = resourceType(
|
|
|
71
99
|
'PColumnData/Partitioned/BinaryPartitioned',
|
|
72
100
|
'1',
|
|
73
101
|
);
|
|
102
|
+
export const PColumnDataParquetPartitioned = resourceType('PColumnData/ParquetPartitioned', '1');
|
|
103
|
+
export const PColumnDataParquetSuperPartitioned = resourceType(
|
|
104
|
+
'PColumnData/Partitioned/ParquetPartitioned',
|
|
105
|
+
'1',
|
|
106
|
+
);
|
|
74
107
|
export const PColumnDataJson = resourceType('PColumnData/Json', '1');
|
|
75
108
|
|
|
76
109
|
export type PColumnDataJsonResourceValue = {
|
|
@@ -89,12 +122,12 @@ export type PColumnDataSuperPartitionedResourceValue = {
|
|
|
89
122
|
|
|
90
123
|
export function parseDataInfoResource(
|
|
91
124
|
data: PlTreeNodeAccessor,
|
|
92
|
-
): DataInfo<ResourceInfo> {
|
|
93
|
-
if (!data.getIsReadyOrError()) throw new
|
|
125
|
+
): PFrameInternal.DataInfo<ResourceInfo> {
|
|
126
|
+
if (!data.getIsReadyOrError()) throw new PFrameDriverError('Data not ready.');
|
|
94
127
|
|
|
95
128
|
const resourceData = data.getDataAsJson();
|
|
96
129
|
if (resourceData === undefined)
|
|
97
|
-
throw new
|
|
130
|
+
throw new PFrameDriverError('unexpected data info structure, no resource data');
|
|
98
131
|
|
|
99
132
|
if (resourceTypesEqual(data.resourceType, PColumnDataJson)) {
|
|
100
133
|
const dataContent = resourceData as PColumnDataJsonResourceValue;
|
|
@@ -125,7 +158,7 @@ export function parseDataInfoResource(
|
|
|
125
158
|
for (const superKey of data.listInputFields()) {
|
|
126
159
|
const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });
|
|
127
160
|
const keys = superPart.listInputFields();
|
|
128
|
-
if (keys === undefined) throw new
|
|
161
|
+
if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);
|
|
129
162
|
|
|
130
163
|
for (const key of keys) {
|
|
131
164
|
const partKey = JSON.stringify([
|
|
@@ -166,13 +199,13 @@ export function parseDataInfoResource(
|
|
|
166
199
|
parts[partKey] = part;
|
|
167
200
|
}
|
|
168
201
|
part.values = data.traverse({ field, errorIfFieldNotSet: true }).resourceInfo;
|
|
169
|
-
} else throw new
|
|
202
|
+
} else throw new PFrameDriverError(`unrecognized part field name: ${field}`);
|
|
170
203
|
}
|
|
171
204
|
|
|
172
205
|
// structure validation
|
|
173
206
|
for (const [key, part] of Object.entries(parts)) {
|
|
174
|
-
if (part.index === undefined) throw new
|
|
175
|
-
if (part.values === undefined) throw new
|
|
207
|
+
if (part.index === undefined) throw new PFrameDriverError(`no index for part ${key}`);
|
|
208
|
+
if (part.values === undefined) throw new PFrameDriverError(`no values for part ${key}`);
|
|
176
209
|
}
|
|
177
210
|
|
|
178
211
|
return {
|
|
@@ -190,7 +223,7 @@ export function parseDataInfoResource(
|
|
|
190
223
|
for (const superKey of data.listInputFields()) {
|
|
191
224
|
const superData = data.traverse({ field: superKey, errorIfFieldNotSet: true });
|
|
192
225
|
const keys = superData.listInputFields();
|
|
193
|
-
if (keys === undefined) throw new
|
|
226
|
+
if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);
|
|
194
227
|
|
|
195
228
|
for (const field of keys) {
|
|
196
229
|
if (field.endsWith('.index')) {
|
|
@@ -223,7 +256,7 @@ export function parseDataInfoResource(
|
|
|
223
256
|
field,
|
|
224
257
|
errorIfFieldNotSet: true,
|
|
225
258
|
}).resourceInfo;
|
|
226
|
-
} else throw new
|
|
259
|
+
} else throw new PFrameDriverError(`unrecognized part field name: ${field}`);
|
|
227
260
|
}
|
|
228
261
|
}
|
|
229
262
|
|
|
@@ -232,9 +265,65 @@ export function parseDataInfoResource(
|
|
|
232
265
|
partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,
|
|
233
266
|
parts: parts as Record<string, BinaryChunk<ResourceInfo>>,
|
|
234
267
|
};
|
|
268
|
+
} else if (resourceTypesEqual(data.resourceType, PColumnDataParquetPartitioned)) {
|
|
269
|
+
const meta = resourceData as PColumnDataPartitionedResourceValue;
|
|
270
|
+
|
|
271
|
+
const parts: Record<string, ParquetChunk<ResourceInfo>> = {};
|
|
272
|
+
for (const key of data.listInputFields()) {
|
|
273
|
+
const resource = data.traverse({ field: key, assertFieldType: 'Input', errorIfFieldNotSet: true });
|
|
274
|
+
|
|
275
|
+
parts[key] = traverseParquetPartitionedResource(resource);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return {
|
|
279
|
+
type: 'ParquetPartitioned',
|
|
280
|
+
partitionKeyLength: meta.partitionKeyLength,
|
|
281
|
+
parts,
|
|
282
|
+
};
|
|
283
|
+
} else if (resourceTypesEqual(data.resourceType, PColumnDataParquetSuperPartitioned)) {
|
|
284
|
+
const meta = resourceData as PColumnDataSuperPartitionedResourceValue;
|
|
285
|
+
|
|
286
|
+
const parts: Record<string, ParquetChunk<ResourceInfo>> = {};
|
|
287
|
+
for (const superKey of data.listInputFields()) {
|
|
288
|
+
const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });
|
|
289
|
+
const keys = superPart.listInputFields();
|
|
290
|
+
if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);
|
|
291
|
+
|
|
292
|
+
for (const key of keys) {
|
|
293
|
+
const resource = data.traverse({ field: key, errorIfFieldNotSet: true });
|
|
294
|
+
|
|
295
|
+
const partKey = JSON.stringify([
|
|
296
|
+
...JSON.parse(superKey) as PColumnValue[],
|
|
297
|
+
...JSON.parse(key) as PColumnValue[],
|
|
298
|
+
]);
|
|
299
|
+
parts[partKey] = traverseParquetPartitionedResource(resource);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return {
|
|
304
|
+
type: 'ParquetPartitioned',
|
|
305
|
+
partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,
|
|
306
|
+
parts,
|
|
307
|
+
};
|
|
235
308
|
}
|
|
236
309
|
|
|
237
|
-
throw new
|
|
310
|
+
throw new PFrameDriverError(`unsupported resource type: ${resourceTypeToString(data.resourceType)}`);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export function traverseParquetPartitionedResource(resource: PlTreeNodeAccessor): ParquetChunk<ResourceInfo> {
|
|
314
|
+
const blob = resource.traverse(
|
|
315
|
+
{ field: 'blob', assertFieldType: 'Service', errorIfFieldNotSet: true },
|
|
316
|
+
).resourceInfo;
|
|
317
|
+
const partInfo = resource.getDataAsJson() as ParquetChunkMetadata;
|
|
318
|
+
const mapping = resource.traverse(
|
|
319
|
+
{ field: 'mapping', assertFieldType: 'Service', errorIfFieldNotSet: true },
|
|
320
|
+
).getDataAsJson() as ParquetChunkMapping;
|
|
321
|
+
|
|
322
|
+
return {
|
|
323
|
+
data: blob,
|
|
324
|
+
...partInfo,
|
|
325
|
+
...mapping,
|
|
326
|
+
};
|
|
238
327
|
}
|
|
239
328
|
|
|
240
329
|
export function makeDataInfoFromPColumnValues(
|
|
@@ -245,7 +334,7 @@ export function makeDataInfoFromPColumnValues(
|
|
|
245
334
|
const jsonData: Record<string, PColumnValue> = {};
|
|
246
335
|
for (const { key, val } of data) {
|
|
247
336
|
if (key.length !== keyLength)
|
|
248
|
-
throw new
|
|
337
|
+
throw new PFrameDriverError(`inline column key length ${key.length} differs from axes count ${keyLength}`);
|
|
249
338
|
jsonData[JSON.stringify(key)] = val;
|
|
250
339
|
}
|
|
251
340
|
|
package/src/pool/driver.ts
CHANGED
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
import { LRUCache } from 'lru-cache';
|
|
47
47
|
import type { PollResource } from './ref_count_pool';
|
|
48
48
|
import { RefCountResourcePool } from './ref_count_pool';
|
|
49
|
-
import { allBlobs, makeDataInfoFromPColumnValues, mapBlobs, parseDataInfoResource } from './data';
|
|
49
|
+
import { allBlobs, makeDataInfoFromPColumnValues, mapBlobs, parseDataInfoResource, traverseParquetPartitionedResource } from './data';
|
|
50
50
|
import { createHash } from 'node:crypto';
|
|
51
51
|
import type { MiLogger } from '@milaboratories/ts-helpers';
|
|
52
52
|
import { assertNever, emptyDir, ConcurrencyLimitingExecutor } from '@milaboratories/ts-helpers';
|
|
@@ -62,7 +62,7 @@ function blobKey(res: ResourceInfo): string {
|
|
|
62
62
|
return String(res.id);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
type InternalPFrameData = PFrameDef<DataInfo<ResourceInfo>>;
|
|
65
|
+
type InternalPFrameData = PFrameDef<PFrameInternal.DataInfo<ResourceInfo>>;
|
|
66
66
|
|
|
67
67
|
const valueTypes: ValueType[] = ['Int', 'Long', 'Float', 'Double', 'String', 'Bytes'] as const;
|
|
68
68
|
|
|
@@ -537,14 +537,16 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
537
537
|
def: PFrameDef<PColumnDataUniversal>,
|
|
538
538
|
ctx: ComputableCtx,
|
|
539
539
|
): PFrameHandle {
|
|
540
|
-
const internalData = def
|
|
540
|
+
const internalData: InternalPFrameData = def
|
|
541
541
|
.filter((c) => valueTypes.find((t) => t === c.spec.valueType))
|
|
542
542
|
.map((c) =>
|
|
543
543
|
mapPObjectData(c, (d) =>
|
|
544
544
|
isPlTreeNodeAccessor(d)
|
|
545
545
|
? parseDataInfoResource(d)
|
|
546
546
|
: isDataInfo(d)
|
|
547
|
-
?
|
|
547
|
+
? d.type === 'ParquetPartitioned'
|
|
548
|
+
? mapDataInfo(d, (a) => traverseParquetPartitionedResource(a))
|
|
549
|
+
: mapDataInfo(d, (a) => a.resourceInfo)
|
|
548
550
|
: makeDataInfoFromPColumnValues(c.spec, d),
|
|
549
551
|
),
|
|
550
552
|
);
|
|
@@ -782,7 +784,7 @@ function stableKeyFromFullPTableDef(data: FullPTableDef): string {
|
|
|
782
784
|
return hash.digest().toString('hex');
|
|
783
785
|
}
|
|
784
786
|
|
|
785
|
-
function stableKeyFromPFrameData(data: PColumn<DataInfo<ResourceInfo>>[]): string {
|
|
787
|
+
function stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<ResourceInfo>>[]): string {
|
|
786
788
|
const orderedData = [...data].map((column) =>
|
|
787
789
|
mapPObjectData(column, (r) => {
|
|
788
790
|
let result: {
|
|
@@ -825,6 +827,19 @@ function stableKeyFromPFrameData(data: PColumn<DataInfo<ResourceInfo>>[]): strin
|
|
|
825
827
|
})),
|
|
826
828
|
};
|
|
827
829
|
break;
|
|
830
|
+
case 'ParquetPartitioned':
|
|
831
|
+
result = {
|
|
832
|
+
type: r.type,
|
|
833
|
+
keyLength: r.partitionKeyLength,
|
|
834
|
+
payload: Object.entries(r.parts).map(([part, info]) => ({
|
|
835
|
+
key: part,
|
|
836
|
+
value: info.dataDigest || [
|
|
837
|
+
blobKey(info.data),
|
|
838
|
+
JSON.stringify({ axes: info.axes, column: info.column }),
|
|
839
|
+
] as const,
|
|
840
|
+
})),
|
|
841
|
+
};
|
|
842
|
+
break;
|
|
828
843
|
default:
|
|
829
844
|
throw new PFrameDriverError(`unsupported resource type: ${JSON.stringify(type satisfies never)}`);
|
|
830
845
|
}
|