@malloydata/db-snowflake 0.0.402 → 0.0.404
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/snowflake_connection.d.ts +31 -3
- package/dist/snowflake_connection.js +51 -13
- package/dist/snowflake_connection.js.map +1 -1
- package/dist/snowflake_sample_strategy.spec.js +58 -0
- package/dist/snowflake_sample_strategy.spec.js.map +1 -1
- package/package.json +2 -2
- package/src/snowflake_connection.ts +61 -16
- package/src/snowflake_sample_strategy.spec.ts +75 -1
|
@@ -25,9 +25,11 @@ export interface TableSizeProbe {
|
|
|
25
25
|
*
|
|
26
26
|
* tablesample-only: probe confirmed a base table above the small
|
|
27
27
|
* threshold. TABLESAMPLE BLOCK is safe (reads a few micro
|
|
28
|
-
* partitions)
|
|
29
|
-
* partitioned tables, so we skip the LIMIT fallback
|
|
30
|
-
*
|
|
28
|
+
* partitions); plain LIMIT without a WHERE is unsafe on large
|
|
29
|
+
* partitioned tables, so we skip the LIMIT fallback and instead
|
|
30
|
+
* escalate the BLOCK percentage until a draw returns rows (see
|
|
31
|
+
* sampleVariantBlocks). A column degrades to variant only on a
|
|
32
|
+
* genuinely empty table or a hard failure, never an unlucky draw.
|
|
31
33
|
*
|
|
32
34
|
* tablesample-then-limit: probe gave no size info (views, temp
|
|
33
35
|
* views, exotic names). We can't distinguish a small view from a
|
|
@@ -36,6 +38,32 @@ export interface TableSizeProbe {
|
|
|
36
38
|
*/
|
|
37
39
|
export type SampleStrategy = 'full-scan-then-sample' | 'tablesample-only' | 'tablesample-then-limit';
|
|
38
40
|
export declare function pickSampleStrategy(probe: TableSizeProbe | undefined, fullScanMaxBytes: number): SampleStrategy;
|
|
41
|
+
/**
|
|
42
|
+
* `TABLESAMPLE BLOCK` percentages tried, in order, when sampling a known-large
|
|
43
|
+
* base table for VARIANT schema inference. Terminates at 100 so the only empty
|
|
44
|
+
* draw is a genuinely empty table. See sampleVariantBlocks.
|
|
45
|
+
*/
|
|
46
|
+
export declare const VARIANT_SAMPLE_BLOCK_PERCENTS: readonly [1, 10, 100];
|
|
47
|
+
/**
|
|
48
|
+
* Draw a VARIANT schema sample from a known-large base table, escalating the
|
|
49
|
+
* `TABLESAMPLE BLOCK` percentage until a draw returns rows.
|
|
50
|
+
*
|
|
51
|
+
* BLOCK decides independently per micro-partition, so a low percentage on a
|
|
52
|
+
* table with few partitions can draw zero rows. An empty draw is
|
|
53
|
+
* indistinguishable downstream from a genuinely-opaque variant — and, since
|
|
54
|
+
* BLOCK is unseeded, non-deterministic — so accepting it would silently degrade
|
|
55
|
+
* every variant column to `sql native`. Escalate instead: an empty draw is
|
|
56
|
+
* itself evidence the table is small enough to sample harder. (Probabilities
|
|
57
|
+
* and sizing are in the PR description.)
|
|
58
|
+
*
|
|
59
|
+
* Contract: a column degrades to variant only from a genuinely empty table
|
|
60
|
+
* (empty even at `BLOCK (100)`) or a hard failure — never an unlucky draw.
|
|
61
|
+
*
|
|
62
|
+
* `runSample` resolves to the rows, to `[]` on an empty draw (escalate), or to
|
|
63
|
+
* `undefined` on error/timeout (stop — no "table is small" evidence). Returns
|
|
64
|
+
* the first non-empty draw, else `undefined`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function sampleVariantBlocks(runSample: (blockPercent: number) => Promise<QueryRecord[] | undefined>, blockPercents?: readonly number[]): Promise<QueryRecord[] | undefined>;
|
|
39
67
|
export interface SnowflakeConnectionOptions {
|
|
40
68
|
connOptions?: ConnectionOptions;
|
|
41
69
|
poolOptions?: PoolOptions;
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.SnowflakeConnection = void 0;
|
|
25
|
+
exports.SnowflakeConnection = exports.VARIANT_SAMPLE_BLOCK_PERCENTS = void 0;
|
|
26
26
|
exports.pickSampleStrategy = pickSampleStrategy;
|
|
27
|
+
exports.sampleVariantBlocks = sampleVariantBlocks;
|
|
27
28
|
const malloy_1 = require("@malloydata/malloy");
|
|
28
29
|
const connection_1 = require("@malloydata/malloy/connection");
|
|
29
30
|
const snowflake_executor_1 = require("./snowflake_executor");
|
|
@@ -36,6 +37,44 @@ function pickSampleStrategy(probe, fullScanMaxBytes) {
|
|
|
36
37
|
return 'full-scan-then-sample';
|
|
37
38
|
return 'tablesample-only';
|
|
38
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* `TABLESAMPLE BLOCK` percentages tried, in order, when sampling a known-large
|
|
42
|
+
* base table for VARIANT schema inference. Terminates at 100 so the only empty
|
|
43
|
+
* draw is a genuinely empty table. See sampleVariantBlocks.
|
|
44
|
+
*/
|
|
45
|
+
exports.VARIANT_SAMPLE_BLOCK_PERCENTS = [1, 10, 100];
|
|
46
|
+
/**
|
|
47
|
+
* Draw a VARIANT schema sample from a known-large base table, escalating the
|
|
48
|
+
* `TABLESAMPLE BLOCK` percentage until a draw returns rows.
|
|
49
|
+
*
|
|
50
|
+
* BLOCK decides independently per micro-partition, so a low percentage on a
|
|
51
|
+
* table with few partitions can draw zero rows. An empty draw is
|
|
52
|
+
* indistinguishable downstream from a genuinely-opaque variant — and, since
|
|
53
|
+
* BLOCK is unseeded, non-deterministic — so accepting it would silently degrade
|
|
54
|
+
* every variant column to `sql native`. Escalate instead: an empty draw is
|
|
55
|
+
* itself evidence the table is small enough to sample harder. (Probabilities
|
|
56
|
+
* and sizing are in the PR description.)
|
|
57
|
+
*
|
|
58
|
+
* Contract: a column degrades to variant only from a genuinely empty table
|
|
59
|
+
* (empty even at `BLOCK (100)`) or a hard failure — never an unlucky draw.
|
|
60
|
+
*
|
|
61
|
+
* `runSample` resolves to the rows, to `[]` on an empty draw (escalate), or to
|
|
62
|
+
* `undefined` on error/timeout (stop — no "table is small" evidence). Returns
|
|
63
|
+
* the first non-empty draw, else `undefined`.
|
|
64
|
+
*/
|
|
65
|
+
async function sampleVariantBlocks(runSample, blockPercents = exports.VARIANT_SAMPLE_BLOCK_PERCENTS) {
|
|
66
|
+
for (const blockPercent of blockPercents) {
|
|
67
|
+
const rows = await runSample(blockPercent);
|
|
68
|
+
// Error/timeout carries no "table is small" evidence, and a higher
|
|
69
|
+
// percentage only scans more — stop rather than escalate into more timeouts.
|
|
70
|
+
if (rows === undefined)
|
|
71
|
+
return undefined;
|
|
72
|
+
if (rows.length > 0)
|
|
73
|
+
return rows;
|
|
74
|
+
// Empty draw: proven small enough to sample harder — escalate.
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
39
78
|
/**
|
|
40
79
|
* Default statement timeoutMs value, 10 Mins
|
|
41
80
|
*/
|
|
@@ -122,7 +161,7 @@ class SnowflakeConnection extends connection_1.BaseConnection {
|
|
|
122
161
|
await this.executor.batch('SELECT 1 as one');
|
|
123
162
|
}
|
|
124
163
|
async schemaFromTablePath(tablePath, structDef) {
|
|
125
|
-
var _a, _b, _c
|
|
164
|
+
var _a, _b, _c;
|
|
126
165
|
const infoQuery = `DESCRIBE TABLE ${tablePath}`;
|
|
127
166
|
const rows = await this.executor.batch(infoQuery);
|
|
128
167
|
const nestedColumns = [];
|
|
@@ -195,22 +234,21 @@ class SnowflakeConnection extends connection_1.BaseConnection {
|
|
|
195
234
|
(_a = (await this.executor.tryBatch(makeSampleQuery(`${projectVariants} from ${tablePath}`), {}, this.schemaSampleTimeoutMs))) !== null && _a !== void 0 ? _a : undefined;
|
|
196
235
|
}
|
|
197
236
|
if (fieldPathRows === undefined) {
|
|
198
|
-
const
|
|
237
|
+
const blockSampleQuery = (blockPercent) => makeSampleQuery(`${projectVariants} from ${tablePath} TABLESAMPLE BLOCK (${blockPercent}) limit ${n}`);
|
|
199
238
|
if (strategy === 'tablesample-only') {
|
|
200
|
-
// Known-large base table:
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
//
|
|
204
|
-
//
|
|
205
|
-
fieldPathRows =
|
|
206
|
-
(_b = (await this.executor.tryBatch(tablesampleQuery, {}, this.schemaSampleTimeoutMs))) !== null && _b !== void 0 ? _b : undefined;
|
|
239
|
+
// Known-large base table: BLOCK decides per-partition, so a low
|
|
240
|
+
// percentage can draw zero rows; escalate until one returns rows
|
|
241
|
+
// rather than degrade the column to sql native (see
|
|
242
|
+
// sampleVariantBlocks). Plain LIMIT without a WHERE is unsafe here,
|
|
243
|
+
// so there is no LIMIT fallback.
|
|
244
|
+
fieldPathRows = await sampleVariantBlocks(blockPercent => this.executor.tryBatch(blockSampleQuery(blockPercent), {}, this.schemaSampleTimeoutMs));
|
|
207
245
|
}
|
|
208
246
|
else {
|
|
209
247
|
// Unknown size (view, temp view, non-parseable name) or
|
|
210
248
|
// full-scan fallback: best-effort TABLESAMPLE→LIMIT chain.
|
|
211
249
|
// The LIMIT fallback is the acknowledged "can't help" case
|
|
212
250
|
// for views over large partitioned tables.
|
|
213
|
-
fieldPathRows = await this.runSchemaSample(
|
|
251
|
+
fieldPathRows = await this.runSchemaSample(blockSampleQuery(1), makeSampleQuery(`${projectVariants} from ${tablePath} limit ${n}`));
|
|
214
252
|
}
|
|
215
253
|
}
|
|
216
254
|
const state = (0, snowflake_variant_schema_1.createVariantSchemaState)();
|
|
@@ -224,8 +262,8 @@ class SnowflakeConnection extends connection_1.BaseConnection {
|
|
|
224
262
|
}
|
|
225
263
|
if (fieldPathRows !== undefined) {
|
|
226
264
|
for (const f of fieldPathRows) {
|
|
227
|
-
const pathString = (
|
|
228
|
-
const fieldType = (
|
|
265
|
+
const pathString = (_b = f['PATH']) === null || _b === void 0 ? void 0 : _b.valueOf().toString();
|
|
266
|
+
const fieldType = (_c = f['TYPE']) === null || _c === void 0 ? void 0 : _c.valueOf().toString();
|
|
229
267
|
if (pathString === undefined || fieldType === undefined)
|
|
230
268
|
continue;
|
|
231
269
|
const pathParser = new snowflake_variant_schema_1.PathParser(pathString);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake_connection.js","sourceRoot":"","sources":["../src/snowflake_connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snowflake_connection.js","sourceRoot":"","sources":["../src/snowflake_connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,64 @@ describe('pickSampleStrategy', () => {
|
|
|
23
23
|
expect((0, snowflake_connection_1.pickSampleStrategy)({ bytes: 1, rowCount: 1 }, 0)).toBe('tablesample-only');
|
|
24
24
|
});
|
|
25
25
|
});
|
|
26
|
+
describe('sampleVariantBlocks', () => {
|
|
27
|
+
const rows = (n) => Array.from({ length: n }, (_, i) => ({ N: i }));
|
|
28
|
+
test('returns the first non-empty draw and does not escalate', async () => {
|
|
29
|
+
const tried = [];
|
|
30
|
+
const result = await (0, snowflake_connection_1.sampleVariantBlocks)(blockPercent => {
|
|
31
|
+
tried.push(blockPercent);
|
|
32
|
+
return Promise.resolve(rows(3));
|
|
33
|
+
});
|
|
34
|
+
expect(result).toHaveLength(3);
|
|
35
|
+
expect(tried).toEqual([1]);
|
|
36
|
+
});
|
|
37
|
+
test('escalates past an empty draw until one returns rows', async () => {
|
|
38
|
+
const tried = [];
|
|
39
|
+
const result = await (0, snowflake_connection_1.sampleVariantBlocks)(blockPercent => {
|
|
40
|
+
tried.push(blockPercent);
|
|
41
|
+
return Promise.resolve(blockPercent >= 10 ? rows(2) : []);
|
|
42
|
+
});
|
|
43
|
+
expect(result).toHaveLength(2);
|
|
44
|
+
expect(tried).toEqual([1, 10]);
|
|
45
|
+
});
|
|
46
|
+
test('stops on an errored (undefined) draw without escalating', async () => {
|
|
47
|
+
// A timeout/error carries no "table is small" evidence, and higher
|
|
48
|
+
// percentages only scan more — so we must not escalate into more timeouts.
|
|
49
|
+
const tried = [];
|
|
50
|
+
const result = await (0, snowflake_connection_1.sampleVariantBlocks)(blockPercent => {
|
|
51
|
+
tried.push(blockPercent);
|
|
52
|
+
return Promise.resolve(undefined);
|
|
53
|
+
});
|
|
54
|
+
expect(result).toBeUndefined();
|
|
55
|
+
expect(tried).toEqual([1]);
|
|
56
|
+
});
|
|
57
|
+
test('escalates past an empty draw but stops at a later error', async () => {
|
|
58
|
+
const tried = [];
|
|
59
|
+
const result = await (0, snowflake_connection_1.sampleVariantBlocks)(blockPercent => {
|
|
60
|
+
tried.push(blockPercent);
|
|
61
|
+
return Promise.resolve(blockPercent === 1 ? [] : undefined);
|
|
62
|
+
});
|
|
63
|
+
expect(result).toBeUndefined();
|
|
64
|
+
expect(tried).toEqual([1, 10]);
|
|
65
|
+
});
|
|
66
|
+
test('returns undefined when every percentage comes back empty', async () => {
|
|
67
|
+
const tried = [];
|
|
68
|
+
const result = await (0, snowflake_connection_1.sampleVariantBlocks)(blockPercent => {
|
|
69
|
+
tried.push(blockPercent);
|
|
70
|
+
return Promise.resolve([]);
|
|
71
|
+
});
|
|
72
|
+
expect(result).toBeUndefined();
|
|
73
|
+
expect(tried).toEqual([...snowflake_connection_1.VARIANT_SAMPLE_BLOCK_PERCENTS]);
|
|
74
|
+
});
|
|
75
|
+
test('honors a custom percentage ladder, in order', async () => {
|
|
76
|
+
const tried = [];
|
|
77
|
+
await (0, snowflake_connection_1.sampleVariantBlocks)(blockPercent => {
|
|
78
|
+
tried.push(blockPercent);
|
|
79
|
+
return Promise.resolve([]);
|
|
80
|
+
}, [5, 25]);
|
|
81
|
+
expect(tried).toEqual([5, 25]);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
26
84
|
describe('parseSnowflakeTableName', () => {
|
|
27
85
|
test('single bare identifier', () => {
|
|
28
86
|
expect((0, snowflake_table_name_1.parseSnowflakeTableName)('aircraft')).toEqual({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake_sample_strategy.spec.js","sourceRoot":"","sources":["../src/snowflake_sample_strategy.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"snowflake_sample_strategy.spec.js","sourceRoot":"","sources":["../src/snowflake_sample_strategy.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@malloydata/db-snowflake",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.404",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"prepublishOnly": "npm run build"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@malloydata/malloy": "0.0.
|
|
26
|
+
"@malloydata/malloy": "0.0.404",
|
|
27
27
|
"generic-pool": "^3.9.0",
|
|
28
28
|
"snowflake-sdk": "2.3.1",
|
|
29
29
|
"toml": "^3.0.0"
|
|
@@ -74,9 +74,11 @@ export interface TableSizeProbe {
|
|
|
74
74
|
*
|
|
75
75
|
* tablesample-only: probe confirmed a base table above the small
|
|
76
76
|
* threshold. TABLESAMPLE BLOCK is safe (reads a few micro
|
|
77
|
-
* partitions)
|
|
78
|
-
* partitioned tables, so we skip the LIMIT fallback
|
|
79
|
-
*
|
|
77
|
+
* partitions); plain LIMIT without a WHERE is unsafe on large
|
|
78
|
+
* partitioned tables, so we skip the LIMIT fallback and instead
|
|
79
|
+
* escalate the BLOCK percentage until a draw returns rows (see
|
|
80
|
+
* sampleVariantBlocks). A column degrades to variant only on a
|
|
81
|
+
* genuinely empty table or a hard failure, never an unlucky draw.
|
|
80
82
|
*
|
|
81
83
|
* tablesample-then-limit: probe gave no size info (views, temp
|
|
82
84
|
* views, exotic names). We can't distinguish a small view from a
|
|
@@ -97,6 +99,47 @@ export function pickSampleStrategy(
|
|
|
97
99
|
return 'tablesample-only';
|
|
98
100
|
}
|
|
99
101
|
|
|
102
|
+
/**
|
|
103
|
+
* `TABLESAMPLE BLOCK` percentages tried, in order, when sampling a known-large
|
|
104
|
+
* base table for VARIANT schema inference. Terminates at 100 so the only empty
|
|
105
|
+
* draw is a genuinely empty table. See sampleVariantBlocks.
|
|
106
|
+
*/
|
|
107
|
+
export const VARIANT_SAMPLE_BLOCK_PERCENTS = [1, 10, 100] as const;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Draw a VARIANT schema sample from a known-large base table, escalating the
|
|
111
|
+
* `TABLESAMPLE BLOCK` percentage until a draw returns rows.
|
|
112
|
+
*
|
|
113
|
+
* BLOCK decides independently per micro-partition, so a low percentage on a
|
|
114
|
+
* table with few partitions can draw zero rows. An empty draw is
|
|
115
|
+
* indistinguishable downstream from a genuinely-opaque variant — and, since
|
|
116
|
+
* BLOCK is unseeded, non-deterministic — so accepting it would silently degrade
|
|
117
|
+
* every variant column to `sql native`. Escalate instead: an empty draw is
|
|
118
|
+
* itself evidence the table is small enough to sample harder. (Probabilities
|
|
119
|
+
* and sizing are in the PR description.)
|
|
120
|
+
*
|
|
121
|
+
* Contract: a column degrades to variant only from a genuinely empty table
|
|
122
|
+
* (empty even at `BLOCK (100)`) or a hard failure — never an unlucky draw.
|
|
123
|
+
*
|
|
124
|
+
* `runSample` resolves to the rows, to `[]` on an empty draw (escalate), or to
|
|
125
|
+
* `undefined` on error/timeout (stop — no "table is small" evidence). Returns
|
|
126
|
+
* the first non-empty draw, else `undefined`.
|
|
127
|
+
*/
|
|
128
|
+
export async function sampleVariantBlocks(
|
|
129
|
+
runSample: (blockPercent: number) => Promise<QueryRecord[] | undefined>,
|
|
130
|
+
blockPercents: readonly number[] = VARIANT_SAMPLE_BLOCK_PERCENTS
|
|
131
|
+
): Promise<QueryRecord[] | undefined> {
|
|
132
|
+
for (const blockPercent of blockPercents) {
|
|
133
|
+
const rows = await runSample(blockPercent);
|
|
134
|
+
// Error/timeout carries no "table is small" evidence, and a higher
|
|
135
|
+
// percentage only scans more — stop rather than escalate into more timeouts.
|
|
136
|
+
if (rows === undefined) return undefined;
|
|
137
|
+
if (rows.length > 0) return rows;
|
|
138
|
+
// Empty draw: proven small enough to sample harder — escalate.
|
|
139
|
+
}
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
|
|
100
143
|
export interface SnowflakeConnectionOptions {
|
|
101
144
|
// snowflake sdk connection options
|
|
102
145
|
connOptions?: ConnectionOptions;
|
|
@@ -363,28 +406,30 @@ export class SnowflakeConnection
|
|
|
363
406
|
}
|
|
364
407
|
|
|
365
408
|
if (fieldPathRows === undefined) {
|
|
366
|
-
const
|
|
367
|
-
|
|
368
|
-
|
|
409
|
+
const blockSampleQuery = (blockPercent: number) =>
|
|
410
|
+
makeSampleQuery(
|
|
411
|
+
`${projectVariants} from ${tablePath} TABLESAMPLE BLOCK (${blockPercent}) limit ${n}`
|
|
412
|
+
);
|
|
369
413
|
if (strategy === 'tablesample-only') {
|
|
370
|
-
// Known-large base table:
|
|
371
|
-
//
|
|
372
|
-
//
|
|
373
|
-
//
|
|
374
|
-
//
|
|
375
|
-
fieldPathRows =
|
|
376
|
-
|
|
377
|
-
|
|
414
|
+
// Known-large base table: BLOCK decides per-partition, so a low
|
|
415
|
+
// percentage can draw zero rows; escalate until one returns rows
|
|
416
|
+
// rather than degrade the column to sql native (see
|
|
417
|
+
// sampleVariantBlocks). Plain LIMIT without a WHERE is unsafe here,
|
|
418
|
+
// so there is no LIMIT fallback.
|
|
419
|
+
fieldPathRows = await sampleVariantBlocks(blockPercent =>
|
|
420
|
+
this.executor.tryBatch(
|
|
421
|
+
blockSampleQuery(blockPercent),
|
|
378
422
|
{},
|
|
379
423
|
this.schemaSampleTimeoutMs
|
|
380
|
-
)
|
|
424
|
+
)
|
|
425
|
+
);
|
|
381
426
|
} else {
|
|
382
427
|
// Unknown size (view, temp view, non-parseable name) or
|
|
383
428
|
// full-scan fallback: best-effort TABLESAMPLE→LIMIT chain.
|
|
384
429
|
// The LIMIT fallback is the acknowledged "can't help" case
|
|
385
430
|
// for views over large partitioned tables.
|
|
386
431
|
fieldPathRows = await this.runSchemaSample(
|
|
387
|
-
|
|
432
|
+
blockSampleQuery(1),
|
|
388
433
|
makeSampleQuery(`${projectVariants} from ${tablePath} limit ${n}`)
|
|
389
434
|
);
|
|
390
435
|
}
|
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
* SPDX-License-Identifier: MIT
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import type {QueryRecord} from '@malloydata/malloy';
|
|
7
|
+
import {
|
|
8
|
+
pickSampleStrategy,
|
|
9
|
+
sampleVariantBlocks,
|
|
10
|
+
VARIANT_SAMPLE_BLOCK_PERCENTS,
|
|
11
|
+
} from './snowflake_connection';
|
|
7
12
|
import {parseSnowflakeTableName} from './snowflake_table_name';
|
|
8
13
|
|
|
9
14
|
describe('pickSampleStrategy', () => {
|
|
@@ -43,6 +48,75 @@ describe('pickSampleStrategy', () => {
|
|
|
43
48
|
});
|
|
44
49
|
});
|
|
45
50
|
|
|
51
|
+
describe('sampleVariantBlocks', () => {
|
|
52
|
+
const rows = (n: number): QueryRecord[] =>
|
|
53
|
+
Array.from({length: n}, (_, i) => ({N: i}));
|
|
54
|
+
|
|
55
|
+
test('returns the first non-empty draw and does not escalate', async () => {
|
|
56
|
+
const tried: number[] = [];
|
|
57
|
+
const result = await sampleVariantBlocks(blockPercent => {
|
|
58
|
+
tried.push(blockPercent);
|
|
59
|
+
return Promise.resolve(rows(3));
|
|
60
|
+
});
|
|
61
|
+
expect(result).toHaveLength(3);
|
|
62
|
+
expect(tried).toEqual([1]);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('escalates past an empty draw until one returns rows', async () => {
|
|
66
|
+
const tried: number[] = [];
|
|
67
|
+
const result = await sampleVariantBlocks(blockPercent => {
|
|
68
|
+
tried.push(blockPercent);
|
|
69
|
+
return Promise.resolve(blockPercent >= 10 ? rows(2) : []);
|
|
70
|
+
});
|
|
71
|
+
expect(result).toHaveLength(2);
|
|
72
|
+
expect(tried).toEqual([1, 10]);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test('stops on an errored (undefined) draw without escalating', async () => {
|
|
76
|
+
// A timeout/error carries no "table is small" evidence, and higher
|
|
77
|
+
// percentages only scan more — so we must not escalate into more timeouts.
|
|
78
|
+
const tried: number[] = [];
|
|
79
|
+
const result = await sampleVariantBlocks(blockPercent => {
|
|
80
|
+
tried.push(blockPercent);
|
|
81
|
+
return Promise.resolve(undefined);
|
|
82
|
+
});
|
|
83
|
+
expect(result).toBeUndefined();
|
|
84
|
+
expect(tried).toEqual([1]);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('escalates past an empty draw but stops at a later error', async () => {
|
|
88
|
+
const tried: number[] = [];
|
|
89
|
+
const result = await sampleVariantBlocks(blockPercent => {
|
|
90
|
+
tried.push(blockPercent);
|
|
91
|
+
return Promise.resolve(blockPercent === 1 ? [] : undefined);
|
|
92
|
+
});
|
|
93
|
+
expect(result).toBeUndefined();
|
|
94
|
+
expect(tried).toEqual([1, 10]);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test('returns undefined when every percentage comes back empty', async () => {
|
|
98
|
+
const tried: number[] = [];
|
|
99
|
+
const result = await sampleVariantBlocks(blockPercent => {
|
|
100
|
+
tried.push(blockPercent);
|
|
101
|
+
return Promise.resolve([]);
|
|
102
|
+
});
|
|
103
|
+
expect(result).toBeUndefined();
|
|
104
|
+
expect(tried).toEqual([...VARIANT_SAMPLE_BLOCK_PERCENTS]);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test('honors a custom percentage ladder, in order', async () => {
|
|
108
|
+
const tried: number[] = [];
|
|
109
|
+
await sampleVariantBlocks(
|
|
110
|
+
blockPercent => {
|
|
111
|
+
tried.push(blockPercent);
|
|
112
|
+
return Promise.resolve([]);
|
|
113
|
+
},
|
|
114
|
+
[5, 25]
|
|
115
|
+
);
|
|
116
|
+
expect(tried).toEqual([5, 25]);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
46
120
|
describe('parseSnowflakeTableName', () => {
|
|
47
121
|
test('single bare identifier', () => {
|
|
48
122
|
expect(parseSnowflakeTableName('aircraft')).toEqual({
|