@gscdump/lakehouse 5.3.0 → 5.7.0
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/catalog.d.mts +6 -0
- package/dist/catalog.mjs +145 -1
- package/dist/dataset-runtime.mjs +20 -2
- package/dist/dataset.d.mts +27 -0
- package/dist/dataset.mjs +21 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
package/dist/catalog.d.mts
CHANGED
|
@@ -108,6 +108,12 @@ export declare function connectIcebergCatalog(config: IcebergCatalogConfig, opts
|
|
|
108
108
|
* exact keys readers populate — see {@link invalidateSnapshotRef}.
|
|
109
109
|
*/
|
|
110
110
|
export declare function catalogCacheScope(config: Pick<IcebergCatalogConfig, 'catalogUri' | 'warehouse'>): string;
|
|
111
|
+
/** An existing namespace cannot prove this caller created or owns its contents. */
|
|
112
|
+
export declare function createIcebergNamespace(conn: IcebergConnection): Promise<{
|
|
113
|
+
_tag: 'Created';
|
|
114
|
+
} | {
|
|
115
|
+
_tag: 'Exists';
|
|
116
|
+
}>;
|
|
111
117
|
/**
|
|
112
118
|
* Ensure the catalog namespace exists. Idempotent — an "already exists"
|
|
113
119
|
* response from the REST catalog is swallowed.
|
package/dist/catalog.mjs
CHANGED
|
@@ -163,6 +163,12 @@ function isNamespaceAlreadyExistsError(err) {
|
|
|
163
163
|
const msg = (err instanceof Error ? err.message : String(err)).toLowerCase();
|
|
164
164
|
return msg.includes("already exists") || msg.includes("409") || msg.includes("conflict");
|
|
165
165
|
}
|
|
166
|
+
async function createIcebergNamespace(conn) {
|
|
167
|
+
return restCatalogCreateNamespace(conn.catalog, { namespace: conn.namespace }).then(() => ({ _tag: "Created" })).catch((error) => {
|
|
168
|
+
if (error && typeof error === "object" && "status" in error && error.status === 409) return { _tag: "Exists" };
|
|
169
|
+
throw error;
|
|
170
|
+
});
|
|
171
|
+
}
|
|
166
172
|
async function ensureIcebergNamespace(conn) {
|
|
167
173
|
await restCatalogCreateNamespace(conn.catalog, { namespace: conn.namespace }).catch((err) => {
|
|
168
174
|
if (!isNamespaceAlreadyExistsError(err)) throw err;
|
|
@@ -459,6 +465,144 @@ async function loadSnapshotIdUnshared(conn, namespace, table, cache, now) {
|
|
|
459
465
|
metadata
|
|
460
466
|
};
|
|
461
467
|
}
|
|
468
|
+
async function resolveIcebergAppendFiles(conn, table, appendId, matches) {
|
|
469
|
+
return (await createIcebergAppendFileResolver(conn, table))(appendId, matches);
|
|
470
|
+
}
|
|
471
|
+
async function createIcebergAppendFileResolver(conn, table, dateColumn) {
|
|
472
|
+
const { metadata, metadataLocation } = await restCatalogLoadTable(conn.catalog, {
|
|
473
|
+
namespace: conn.namespace,
|
|
474
|
+
table
|
|
475
|
+
});
|
|
476
|
+
const dateFieldId = dateColumnFieldId(metadata, dateColumn);
|
|
477
|
+
const manifestCache = {
|
|
478
|
+
lists: /* @__PURE__ */ new Map(),
|
|
479
|
+
entries: /* @__PURE__ */ new Map()
|
|
480
|
+
};
|
|
481
|
+
const immutableBytes = /* @__PURE__ */ new Map();
|
|
482
|
+
const maxRetainedBytes = 4194304;
|
|
483
|
+
const budgetFailure = { _tag: "ManifestBudgetExceeded" };
|
|
484
|
+
let retainedBytes = 0;
|
|
485
|
+
let unavailable = false;
|
|
486
|
+
const resolver = {
|
|
487
|
+
...conn.resolver,
|
|
488
|
+
reader: async (url) => {
|
|
489
|
+
let bytes = immutableBytes.get(url);
|
|
490
|
+
if (!bytes) {
|
|
491
|
+
bytes = Promise.resolve(conn.resolver.reader(url)).then(async (buffer) => {
|
|
492
|
+
if (!Number.isSafeInteger(buffer.byteLength) || buffer.byteLength < 0 || retainedBytes + buffer.byteLength > maxRetainedBytes) {
|
|
493
|
+
unavailable = true;
|
|
494
|
+
throw budgetFailure;
|
|
495
|
+
}
|
|
496
|
+
retainedBytes += buffer.byteLength;
|
|
497
|
+
const content = await buffer.slice(0, buffer.byteLength);
|
|
498
|
+
if (content.byteLength !== buffer.byteLength) {
|
|
499
|
+
unavailable = true;
|
|
500
|
+
throw budgetFailure;
|
|
501
|
+
}
|
|
502
|
+
return content;
|
|
503
|
+
});
|
|
504
|
+
immutableBytes.set(url, bytes);
|
|
505
|
+
}
|
|
506
|
+
const buffer = await bytes;
|
|
507
|
+
return {
|
|
508
|
+
byteLength: buffer.byteLength,
|
|
509
|
+
slice: async (start, end) => buffer.slice(start, end)
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
const budgetUnavailable = (error) => {
|
|
514
|
+
if (error !== budgetFailure) throw error;
|
|
515
|
+
return [];
|
|
516
|
+
};
|
|
517
|
+
const current = metadata["current-snapshot-id"] == null ? [] : await icebergManifests({
|
|
518
|
+
metadata,
|
|
519
|
+
resolver,
|
|
520
|
+
manifestCache
|
|
521
|
+
}).catch(budgetUnavailable);
|
|
522
|
+
const currentFiles = /* @__PURE__ */ new Map();
|
|
523
|
+
for (const manifest of current) for (const entry of manifest.entries) if (entry.status !== 2 && entry.data_file.content === 0) currentFiles.set(entry.data_file.file_path, entry.data_file);
|
|
524
|
+
const resolve = async (appendId, matches) => {
|
|
525
|
+
if (unavailable) return {
|
|
526
|
+
_tag: "Err",
|
|
527
|
+
reason: "append-unavailable"
|
|
528
|
+
};
|
|
529
|
+
const snapshots = metadata.snapshots?.filter((snapshot) => snapshot.summary?.[APPEND_ID_SUMMARY_KEY] === appendId) ?? [];
|
|
530
|
+
if (!appendId || snapshots.length !== 1) return {
|
|
531
|
+
_tag: "Err",
|
|
532
|
+
reason: "append-unavailable"
|
|
533
|
+
};
|
|
534
|
+
if (snapshots[0].summary?.operation !== "append") return {
|
|
535
|
+
_tag: "Err",
|
|
536
|
+
reason: "append-unavailable"
|
|
537
|
+
};
|
|
538
|
+
const snapshotId = snapshots[0]["snapshot-id"];
|
|
539
|
+
const manifests = await icebergManifests({
|
|
540
|
+
metadata,
|
|
541
|
+
resolver,
|
|
542
|
+
snapshotId,
|
|
543
|
+
manifestCache
|
|
544
|
+
}).catch(budgetUnavailable);
|
|
545
|
+
if (unavailable) return {
|
|
546
|
+
_tag: "Err",
|
|
547
|
+
reason: "append-unavailable"
|
|
548
|
+
};
|
|
549
|
+
const files = [];
|
|
550
|
+
for (const manifest of manifests) for (const entry of manifest.entries) {
|
|
551
|
+
if (entry.status === 2 || entry.data_file.content !== 0) return {
|
|
552
|
+
_tag: "Err",
|
|
553
|
+
reason: "append-unavailable"
|
|
554
|
+
};
|
|
555
|
+
if (entry.status !== 1 || entry.snapshot_id == null || String(entry.snapshot_id) !== String(snapshotId)) continue;
|
|
556
|
+
const file = toListedFile(entry, matches, void 0, /* @__PURE__ */ new Set(), null);
|
|
557
|
+
if (file) {
|
|
558
|
+
const member = currentFiles.get(file.filePath);
|
|
559
|
+
if (!member || Number(member.record_count) !== file.rowCount || Number(member.file_size_in_bytes) !== file.bytes) return {
|
|
560
|
+
_tag: "Err",
|
|
561
|
+
reason: "append-unavailable"
|
|
562
|
+
};
|
|
563
|
+
files.push(file);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
if (files.length === 0) return {
|
|
567
|
+
_tag: "Err",
|
|
568
|
+
reason: "append-unavailable"
|
|
569
|
+
};
|
|
570
|
+
return {
|
|
571
|
+
_tag: "Ok",
|
|
572
|
+
snapshotId: String(snapshotId),
|
|
573
|
+
files
|
|
574
|
+
};
|
|
575
|
+
};
|
|
576
|
+
return Object.assign(resolve, {
|
|
577
|
+
confirmCurrent: async () => {
|
|
578
|
+
if (unavailable) return false;
|
|
579
|
+
const fresh = await restCatalogLoadTable(conn.catalog, {
|
|
580
|
+
namespace: conn.namespace,
|
|
581
|
+
table
|
|
582
|
+
});
|
|
583
|
+
return fresh.metadataLocation === metadataLocation && fresh.metadata["table-uuid"] === metadata["table-uuid"] && String(fresh.metadata["current-snapshot-id"]) === String(metadata["current-snapshot-id"]);
|
|
584
|
+
},
|
|
585
|
+
currentFiles: (matches) => {
|
|
586
|
+
if (unavailable) return {
|
|
587
|
+
_tag: "Err",
|
|
588
|
+
reason: "append-unavailable"
|
|
589
|
+
};
|
|
590
|
+
const files = [];
|
|
591
|
+
for (const manifest of current) for (const entry of manifest.entries) {
|
|
592
|
+
if (entry.status !== 2 && entry.data_file.content !== 0) return {
|
|
593
|
+
_tag: "Err",
|
|
594
|
+
reason: "append-unavailable"
|
|
595
|
+
};
|
|
596
|
+
const file = toListedFile(entry, matches, void 0, /* @__PURE__ */ new Set(), dateFieldId);
|
|
597
|
+
if (file) files.push(file);
|
|
598
|
+
}
|
|
599
|
+
return {
|
|
600
|
+
_tag: "Ok",
|
|
601
|
+
files
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
}
|
|
462
606
|
function toListedFile(entry, matches, monthFieldName, wantedMonths, dateFieldId) {
|
|
463
607
|
if (entry.status === 2) return null;
|
|
464
608
|
const df = entry.data_file;
|
|
@@ -639,4 +783,4 @@ async function resolveIcebergDataFilesInBatch(conn, opts) {
|
|
|
639
783
|
}
|
|
640
784
|
return out;
|
|
641
785
|
}
|
|
642
|
-
export { catalogCacheScope, connectIcebergCatalog, dropIcebergTables, ensureIcebergNamespace, icebergAppendBatchesRetrying, icebergAppendRetrying, invalidateSnapshotRef, isCommitRateLimited, isCommitServerError, isCommitTransient, listIcebergTables, resolveIcebergDataFiles };
|
|
786
|
+
export { catalogCacheScope, connectIcebergCatalog, createIcebergAppendFileResolver, createIcebergNamespace, dropIcebergTables, ensureIcebergNamespace, icebergAppendBatchesRetrying, icebergAppendRetrying, invalidateSnapshotRef, isCommitRateLimited, isCommitServerError, isCommitTransient, listIcebergTables, resolveIcebergAppendFiles, resolveIcebergDataFiles };
|
package/dist/dataset-runtime.mjs
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { restCatalogLoadTable } from "./_virtual/node_modules/.pnpm/icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f/node_modules/icebird/src/catalog/rest.mjs";
|
|
2
|
+
import { connectIcebergCatalog, createIcebergAppendFileResolver, ensureIcebergNamespace, icebergAppendBatchesRetrying, icebergAppendRetrying, resolveIcebergAppendFiles, resolveIcebergDataFiles } from "./catalog.mjs";
|
|
2
3
|
import { icebergCreateTable } from "./_virtual/node_modules/.pnpm/icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f/node_modules/icebird/src/write/write.mjs";
|
|
4
|
+
async function verifyDatasetTable(conn, table, schema, partitionSpec) {
|
|
5
|
+
const { metadata } = await restCatalogLoadTable(conn.catalog, {
|
|
6
|
+
namespace: conn.namespace,
|
|
7
|
+
table
|
|
8
|
+
});
|
|
9
|
+
const currentSchema = metadata.schemas?.find((s) => s["schema-id"] === metadata["current-schema-id"]);
|
|
10
|
+
if (!currentSchema || currentSchema.fields.length !== schema.fields.length || !schema.fields.every((expected) => currentSchema.fields.some((actual) => actual.id === expected.id && actual.name === expected.name && actual.type === expected.type && actual.required === expected.required))) return {
|
|
11
|
+
_tag: "Err",
|
|
12
|
+
reason: "schema-mismatch"
|
|
13
|
+
};
|
|
14
|
+
const currentSpec = metadata["partition-specs"]?.find((s) => s["spec-id"] === metadata["default-spec-id"]);
|
|
15
|
+
if (!currentSpec || currentSpec.fields.length !== partitionSpec.fields.length || !partitionSpec.fields.every((expected) => currentSpec.fields.some((actual) => actual["source-id"] === expected["source-id"] && actual["field-id"] === expected["field-id"] && actual.name === expected.name && actual.transform === expected.transform))) return {
|
|
16
|
+
_tag: "Err",
|
|
17
|
+
reason: "partition-mismatch"
|
|
18
|
+
};
|
|
19
|
+
return { _tag: "Ok" };
|
|
20
|
+
}
|
|
3
21
|
async function createDatasetTable(conn, table, schema, partitionSpec, sortOrder) {
|
|
4
22
|
const results = [];
|
|
5
23
|
await icebergCreateTable({
|
|
@@ -65,4 +83,4 @@ async function connectDatasetCatalog(config, opts) {
|
|
|
65
83
|
async function resolveDatasetDataFiles(conn, opts) {
|
|
66
84
|
return resolveIcebergDataFiles(conn, opts);
|
|
67
85
|
}
|
|
68
|
-
export { appendDatasetBatches, appendDatasetRows, connectDatasetCatalog, createDatasetTable, resolveDatasetDataFiles };
|
|
86
|
+
export { appendDatasetBatches, appendDatasetRows, connectDatasetCatalog, createIcebergAppendFileResolver as createDatasetAppendFileResolver, createDatasetTable, resolveIcebergAppendFiles as resolveDatasetAppendFiles, resolveDatasetDataFiles, verifyDatasetTable };
|
package/dist/dataset.d.mts
CHANGED
|
@@ -105,6 +105,13 @@ export interface IcebergDataset {
|
|
|
105
105
|
icebergPartitionSpec: () => IcebergPartitionSpec;
|
|
106
106
|
icebergSortOrder: () => IcebergSortOrder | undefined;
|
|
107
107
|
createTable: (conn: IcebergConnection) => Promise<IcebergTableOpResult[]>;
|
|
108
|
+
/** Inspect current metadata without caches before admitting a provisioned table. */
|
|
109
|
+
verifyTable: (conn: IcebergConnection) => Promise<{
|
|
110
|
+
_tag: 'Ok';
|
|
111
|
+
} | {
|
|
112
|
+
_tag: 'Err';
|
|
113
|
+
reason: 'schema-mismatch' | 'partition-mismatch';
|
|
114
|
+
}>;
|
|
108
115
|
/**
|
|
109
116
|
* One-shot append over an EXISTING connection: identity INT32 guard, dedupe
|
|
110
117
|
* by identity+dims+naturalKey (last-wins), cluster pre-sort (if
|
|
@@ -120,6 +127,26 @@ export interface IcebergDataset {
|
|
|
120
127
|
* across source batches.
|
|
121
128
|
*/
|
|
122
129
|
appendBatches: (conn: IcebergConnection, source: AppendBatchSource, opts: AppendBatchesOptions) => Promise<AppendBatchesResult>;
|
|
130
|
+
/** Fresh, exact snapshot membership. Missing evidence never falls back to current files. */
|
|
131
|
+
resolveAppendFiles: (conn: IcebergConnection, appendId: string, identity: string | number, dims?: Record<string, string>) => Promise<{
|
|
132
|
+
_tag: 'Ok';
|
|
133
|
+
snapshotId: string;
|
|
134
|
+
files: IcebergListedDataFile[];
|
|
135
|
+
} | {
|
|
136
|
+
_tag: 'Err';
|
|
137
|
+
reason: 'append-unavailable';
|
|
138
|
+
}>;
|
|
139
|
+
/** Create once per request. The next request must create a fresh resolver. */
|
|
140
|
+
createAppendFileResolver: (conn: IcebergConnection) => Promise<((appendId: string, identity: string | number, dims?: Record<string, string>) => ReturnType<IcebergDataset['resolveAppendFiles']>) & {
|
|
141
|
+
currentFiles: (identity: string | number, dims?: Record<string, string>) => {
|
|
142
|
+
_tag: 'Ok';
|
|
143
|
+
files: IcebergListedDataFile[];
|
|
144
|
+
} | {
|
|
145
|
+
_tag: 'Err';
|
|
146
|
+
reason: 'append-unavailable';
|
|
147
|
+
};
|
|
148
|
+
confirmCurrent: () => Promise<boolean>;
|
|
149
|
+
}>;
|
|
123
150
|
/**
|
|
124
151
|
* PURE row processing — the identity INT32 guard, dedupe (identity+dims+
|
|
125
152
|
* naturalKey, last-wins) and cluster pre-sort `appendRows`/`appendSink`
|
package/dist/dataset.mjs
CHANGED
|
@@ -180,6 +180,10 @@ function defineIcebergDataset(def) {
|
|
|
180
180
|
const { createDatasetTable } = await import("./dataset-runtime.mjs");
|
|
181
181
|
return createDatasetTable(conn, def.table, schema, partitionSpecIcebird, sortOrder);
|
|
182
182
|
}
|
|
183
|
+
async function verifyTable(conn) {
|
|
184
|
+
const { verifyDatasetTable } = await import("./dataset-runtime.mjs");
|
|
185
|
+
return verifyDatasetTable(conn, def.table, schema, partitionSpecIcebird);
|
|
186
|
+
}
|
|
183
187
|
function process(rows) {
|
|
184
188
|
const guarded = [];
|
|
185
189
|
let skipped = 0;
|
|
@@ -280,6 +284,20 @@ function defineIcebergDataset(def) {
|
|
|
280
284
|
function partitionBoundFilter(identity, months, dims) {
|
|
281
285
|
return buildManifestPartitionFilter(def.partition, readerPredicate(identity, dims), months);
|
|
282
286
|
}
|
|
287
|
+
async function resolveAppendFiles(conn, appendId, identity, dims) {
|
|
288
|
+
const { resolveDatasetAppendFiles } = await import("./dataset-runtime.mjs");
|
|
289
|
+
return resolveDatasetAppendFiles(conn, def.table, appendId, readerPredicate(identity, dims));
|
|
290
|
+
}
|
|
291
|
+
async function createAppendFileResolver(conn) {
|
|
292
|
+
const { createDatasetAppendFileResolver } = await import("./dataset-runtime.mjs");
|
|
293
|
+
const dates = def.columns.filter((column) => column.type === "DATE");
|
|
294
|
+
const dateColumn = def.partition.find((field) => field.transform === "month")?.sourceColumn ?? (dates.length === 1 ? dates[0]?.name : void 0);
|
|
295
|
+
const resolve = await createDatasetAppendFileResolver(conn, def.table, dateColumn);
|
|
296
|
+
return Object.assign((appendId, identity, dims) => resolve(appendId, readerPredicate(identity, dims)), {
|
|
297
|
+
currentFiles: (identity, dims) => resolve.currentFiles(readerPredicate(identity, dims)),
|
|
298
|
+
confirmCurrent: resolve.confirmCurrent
|
|
299
|
+
});
|
|
300
|
+
}
|
|
283
301
|
async function resolveDataFiles(conn, identity, range, dims, opts = {}) {
|
|
284
302
|
const { resolveDatasetDataFiles } = await import("./dataset-runtime.mjs");
|
|
285
303
|
return resolveDatasetDataFiles(conn, {
|
|
@@ -300,8 +318,11 @@ function defineIcebergDataset(def) {
|
|
|
300
318
|
icebergPartitionSpec: () => partitionSpecIcebird,
|
|
301
319
|
icebergSortOrder: () => sortOrder,
|
|
302
320
|
createTable,
|
|
321
|
+
verifyTable,
|
|
303
322
|
appendRows,
|
|
304
323
|
appendBatches,
|
|
324
|
+
resolveAppendFiles,
|
|
325
|
+
createAppendFileResolver,
|
|
305
326
|
prepareRows: process,
|
|
306
327
|
appendSink,
|
|
307
328
|
readerPredicate,
|
package/dist/index.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ import { bigintJsonReplacer, coerceBigIntToNumber, encodeJsonBigintSafe, stringi
|
|
|
2
2
|
import { CatalogCache, CatalogCacheGetOutcome, cacheGet, cachePut } from "./catalog-cache.mjs";
|
|
3
3
|
import { DEFAULT_PARTITION_KEY_ENCODING, ICEBERG_TYPE_MAP, IcebergColumn, IcebergColumnType, IcebergPartitionField, IcebergPartitionTransform, IcebergPrimitiveType, IcebergS3Config, IcebergTableSpec, PartitionKeyEncoding } from "./schema.mjs";
|
|
4
4
|
import { IcebergFieldSummary, ManifestPartitionFilter, PartitionValueMatch, buildManifestPartitionFilter } from "./partition-prune.mjs";
|
|
5
|
-
import { CommitRetryOptions, ConnectIcebergOptions, IcebergCatalogConfig, IcebergConnection, IcebergDataFileDateBounds, IcebergListedDataFile, IcebergPartitionSpec, IcebergPartitionSpecField, IcebergSchema, IcebergSchemaField, IcebergSortOrder, IcebergSortOrderField, IcebergTableOpResult, QueryProfiler, ResolveIcebergDataFilesOptions, catalogCacheScope, connectIcebergCatalog, dropIcebergTables, ensureIcebergNamespace, invalidateSnapshotRef, listIcebergTables, resolveIcebergDataFiles } from "./catalog.mjs";
|
|
5
|
+
import { CommitRetryOptions, ConnectIcebergOptions, IcebergCatalogConfig, IcebergConnection, IcebergDataFileDateBounds, IcebergListedDataFile, IcebergPartitionSpec, IcebergPartitionSpecField, IcebergSchema, IcebergSchemaField, IcebergSortOrder, IcebergSortOrderField, IcebergTableOpResult, QueryProfiler, ResolveIcebergDataFilesOptions, catalogCacheScope, connectIcebergCatalog, createIcebergNamespace, dropIcebergTables, ensureIcebergNamespace, invalidateSnapshotRef, listIcebergTables, resolveIcebergDataFiles } from "./catalog.mjs";
|
|
6
6
|
import { AppendBatchSource, AppendBatchesOptions, AppendBatchesResult, AppendCommitOptions, AppendResult, AppendSink, AppendSinkCloseResult, AppendSinkOptions, DatasetDim, DatasetIdentity, IcebergDataset, IcebergDatasetColumnDef, IcebergDatasetDef, IcebergDatasetLedger, ResolveDataFilesOptions, defineIcebergDataset, deriveTableSpec } from "./dataset.mjs";
|
|
7
7
|
import { toIcebergDayCount } from "./date.mjs";
|
|
8
|
-
export { type AppendBatchSource, type AppendBatchesOptions, type AppendBatchesResult, type AppendCommitOptions, type AppendResult, type AppendSink, type AppendSinkCloseResult, type AppendSinkOptions, type CatalogCache, type CatalogCacheGetOutcome, type CommitRetryOptions, type ConnectIcebergOptions, DEFAULT_PARTITION_KEY_ENCODING, type DatasetDim, type DatasetIdentity, ICEBERG_TYPE_MAP, type IcebergCatalogConfig, type IcebergColumn, type IcebergColumnType, type IcebergConnection, type IcebergDataFileDateBounds, type IcebergDataset, type IcebergDatasetColumnDef, type IcebergDatasetDef, type IcebergDatasetLedger, type IcebergFieldSummary, type IcebergListedDataFile, type IcebergPartitionField, type IcebergPartitionSpec, type IcebergPartitionSpecField, type IcebergPartitionTransform, type IcebergPrimitiveType, type IcebergS3Config, type IcebergSchema, type IcebergSchemaField, type IcebergSortOrder, type IcebergSortOrderField, type IcebergTableOpResult, type IcebergTableSpec, type ManifestPartitionFilter, type PartitionKeyEncoding, type PartitionValueMatch, type QueryProfiler, type ResolveDataFilesOptions, type ResolveIcebergDataFilesOptions, bigintJsonReplacer, buildManifestPartitionFilter, cacheGet, cachePut, catalogCacheScope, coerceBigIntToNumber, connectIcebergCatalog, defineIcebergDataset, deriveTableSpec, dropIcebergTables, encodeJsonBigintSafe, ensureIcebergNamespace, invalidateSnapshotRef, listIcebergTables, resolveIcebergDataFiles, stringifyBigintSafe, toIcebergDayCount };
|
|
8
|
+
export { type AppendBatchSource, type AppendBatchesOptions, type AppendBatchesResult, type AppendCommitOptions, type AppendResult, type AppendSink, type AppendSinkCloseResult, type AppendSinkOptions, type CatalogCache, type CatalogCacheGetOutcome, type CommitRetryOptions, type ConnectIcebergOptions, DEFAULT_PARTITION_KEY_ENCODING, type DatasetDim, type DatasetIdentity, ICEBERG_TYPE_MAP, type IcebergCatalogConfig, type IcebergColumn, type IcebergColumnType, type IcebergConnection, type IcebergDataFileDateBounds, type IcebergDataset, type IcebergDatasetColumnDef, type IcebergDatasetDef, type IcebergDatasetLedger, type IcebergFieldSummary, type IcebergListedDataFile, type IcebergPartitionField, type IcebergPartitionSpec, type IcebergPartitionSpecField, type IcebergPartitionTransform, type IcebergPrimitiveType, type IcebergS3Config, type IcebergSchema, type IcebergSchemaField, type IcebergSortOrder, type IcebergSortOrderField, type IcebergTableOpResult, type IcebergTableSpec, type ManifestPartitionFilter, type PartitionKeyEncoding, type PartitionValueMatch, type QueryProfiler, type ResolveDataFilesOptions, type ResolveIcebergDataFilesOptions, bigintJsonReplacer, buildManifestPartitionFilter, cacheGet, cachePut, catalogCacheScope, coerceBigIntToNumber, connectIcebergCatalog, createIcebergNamespace, defineIcebergDataset, deriveTableSpec, dropIcebergTables, encodeJsonBigintSafe, ensureIcebergNamespace, invalidateSnapshotRef, listIcebergTables, resolveIcebergDataFiles, stringifyBigintSafe, toIcebergDayCount };
|
package/dist/index.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { bigintJsonReplacer, coerceBigIntToNumber, encodeJsonBigintSafe, stringi
|
|
|
2
2
|
import { cacheGet, cachePut } from "./catalog-cache.mjs";
|
|
3
3
|
import { toIcebergDayCount } from "./date.mjs";
|
|
4
4
|
import { buildManifestPartitionFilter } from "./partition-prune.mjs";
|
|
5
|
-
import { catalogCacheScope, connectIcebergCatalog, dropIcebergTables, ensureIcebergNamespace, invalidateSnapshotRef, listIcebergTables, resolveIcebergDataFiles } from "./catalog.mjs";
|
|
5
|
+
import { catalogCacheScope, connectIcebergCatalog, createIcebergNamespace, dropIcebergTables, ensureIcebergNamespace, invalidateSnapshotRef, listIcebergTables, resolveIcebergDataFiles } from "./catalog.mjs";
|
|
6
6
|
import { DEFAULT_PARTITION_KEY_ENCODING, ICEBERG_TYPE_MAP } from "./schema.mjs";
|
|
7
7
|
import { defineIcebergDataset, deriveTableSpec } from "./dataset.mjs";
|
|
8
|
-
export { DEFAULT_PARTITION_KEY_ENCODING, ICEBERG_TYPE_MAP, bigintJsonReplacer, buildManifestPartitionFilter, cacheGet, cachePut, catalogCacheScope, coerceBigIntToNumber, connectIcebergCatalog, defineIcebergDataset, deriveTableSpec, dropIcebergTables, encodeJsonBigintSafe, ensureIcebergNamespace, invalidateSnapshotRef, listIcebergTables, resolveIcebergDataFiles, stringifyBigintSafe, toIcebergDayCount };
|
|
8
|
+
export { DEFAULT_PARTITION_KEY_ENCODING, ICEBERG_TYPE_MAP, bigintJsonReplacer, buildManifestPartitionFilter, cacheGet, cachePut, catalogCacheScope, coerceBigIntToNumber, connectIcebergCatalog, createIcebergNamespace, defineIcebergDataset, deriveTableSpec, dropIcebergTables, encodeJsonBigintSafe, ensureIcebergNamespace, invalidateSnapshotRef, listIcebergTables, resolveIcebergDataFiles, stringifyBigintSafe, toIcebergDayCount };
|
package/package.json
CHANGED