@chkit/plugin-backfill 0.1.0-beta.19 → 0.1.0-beta.20
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/async-backfill.d.ts +64 -0
- package/dist/async-backfill.d.ts.map +1 -0
- package/dist/async-backfill.js +251 -0
- package/dist/async-backfill.js.map +1 -0
- package/dist/check.d.ts +9 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +79 -0
- package/dist/check.js.map +1 -0
- package/dist/chunking/analyze.d.ts +38 -0
- package/dist/chunking/analyze.d.ts.map +1 -0
- package/dist/chunking/analyze.js +76 -0
- package/dist/chunking/analyze.js.map +1 -0
- package/dist/chunking/build.d.ts +11 -0
- package/dist/chunking/build.d.ts.map +1 -0
- package/dist/chunking/build.js +51 -0
- package/dist/chunking/build.js.map +1 -0
- package/dist/chunking/introspect.d.ts +34 -0
- package/dist/chunking/introspect.d.ts.map +1 -0
- package/dist/chunking/introspect.js +96 -0
- package/dist/chunking/introspect.js.map +1 -0
- package/dist/chunking/splitter.d.ts +20 -0
- package/dist/chunking/splitter.d.ts.map +1 -0
- package/dist/chunking/splitter.js +76 -0
- package/dist/chunking/splitter.js.map +1 -0
- package/dist/chunking/sql.d.ts +12 -0
- package/dist/chunking/sql.d.ts.map +1 -0
- package/dist/chunking/sql.js +221 -0
- package/dist/chunking/sql.js.map +1 -0
- package/dist/chunking/types.d.ts +29 -0
- package/dist/chunking/types.d.ts.map +1 -0
- package/dist/chunking/types.js +2 -0
- package/dist/chunking/types.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +151 -4
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +160 -143
- package/dist/options.js.map +1 -1
- package/dist/payload.d.ts +6 -20
- package/dist/payload.d.ts.map +1 -1
- package/dist/payload.js +7 -21
- package/dist/payload.js.map +1 -1
- package/dist/planner.d.ts +4 -31
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +85 -336
- package/dist/planner.js.map +1 -1
- package/dist/plugin.d.ts +4 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +234 -228
- package/dist/plugin.js.map +1 -1
- package/dist/queries.d.ts +21 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +113 -0
- package/dist/queries.js.map +1 -0
- package/dist/state.d.ts +7 -31
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +33 -132
- package/dist/state.js.map +1 -1
- package/dist/types.d.ts +32 -124
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
package/dist/payload.js
CHANGED
|
@@ -7,25 +7,14 @@ export function planPayload(output) {
|
|
|
7
7
|
from: output.plan.from,
|
|
8
8
|
to: output.plan.to,
|
|
9
9
|
chunkCount: output.plan.chunks.length,
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
maxChunkBytes: output.plan.options.maxChunkBytes,
|
|
11
|
+
sortKeyColumn: output.plan.options.sortKeyColumn,
|
|
12
12
|
planPath: output.planPath,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
ok: output.status.status === 'completed',
|
|
19
|
-
command: 'run',
|
|
20
|
-
planId: output.run.planId,
|
|
21
|
-
status: output.status.status,
|
|
22
|
-
chunkCounts: output.status.totals,
|
|
23
|
-
attempts: output.status.attempts,
|
|
24
|
-
rowsWritten: output.status.rowsWritten,
|
|
25
|
-
runPath: output.runPath,
|
|
26
|
-
eventPath: output.eventPath,
|
|
27
|
-
lastError: output.status.lastError,
|
|
28
|
-
noop: output.noop,
|
|
13
|
+
strategy: output.plan.strategy,
|
|
14
|
+
partitionCount: output.plan.partitions?.length,
|
|
15
|
+
totalBytes: output.plan.partitions
|
|
16
|
+
? output.plan.partitions.reduce((sum, p) => sum + p.bytesOnDisk, 0)
|
|
17
|
+
: undefined,
|
|
29
18
|
};
|
|
30
19
|
}
|
|
31
20
|
export function statusPayload(summary) {
|
|
@@ -35,10 +24,8 @@ export function statusPayload(summary) {
|
|
|
35
24
|
planId: summary.planId,
|
|
36
25
|
status: summary.status,
|
|
37
26
|
chunkCounts: summary.totals,
|
|
38
|
-
attempts: summary.attempts,
|
|
39
27
|
rowsWritten: summary.rowsWritten,
|
|
40
28
|
runPath: summary.runPath,
|
|
41
|
-
eventPath: summary.eventPath,
|
|
42
29
|
updatedAt: summary.updatedAt,
|
|
43
30
|
lastError: summary.lastError,
|
|
44
31
|
};
|
|
@@ -51,7 +38,6 @@ export function cancelPayload(summary) {
|
|
|
51
38
|
status: summary.status,
|
|
52
39
|
chunkCounts: summary.totals,
|
|
53
40
|
runPath: summary.runPath,
|
|
54
|
-
eventPath: summary.eventPath,
|
|
55
41
|
};
|
|
56
42
|
}
|
|
57
43
|
export function doctorPayload(report) {
|
package/dist/payload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../src/payload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../src/payload.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,WAAW,CAAC,MAA+B;IAezD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QAC1B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;QACtB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QAClB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;QACrC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;QAChD,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;QAChD,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM;QAC9C,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACnE,CAAC,CAAC,SAAS;KACd,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA8B;IAW1D,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,QAAQ;QAC/B,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA8B;IAQ1D,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,WAAW;QAClC,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA4B;IASxD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAClC,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAA;AACH,CAAC"}
|
package/dist/planner.d.ts
CHANGED
|
@@ -1,41 +1,14 @@
|
|
|
1
1
|
import type { ResolvedChxConfig } from '@chkit/core';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
* Inject a time-range filter directly into a SQL query.
|
|
5
|
-
*
|
|
6
|
-
* Scans for top-level (not inside parentheses or string literals) SQL keywords
|
|
7
|
-
* to determine where to place the condition:
|
|
8
|
-
* - If a top-level WHERE exists, appends AND conditions at its end.
|
|
9
|
-
* - Otherwise, inserts a WHERE clause before trailing clauses (GROUP BY, etc.).
|
|
10
|
-
*
|
|
11
|
-
* This avoids wrapping the query in a CTE, which causes ClickHouse to infer
|
|
12
|
-
* Nullable wrappers on Array/Map columns — an illegal type combination.
|
|
13
|
-
*/
|
|
14
|
-
export declare function injectTimeFilter(query: string, timeColumn: string, from: string, to: string): string;
|
|
15
|
-
/**
|
|
16
|
-
* Rewrite a SQL query's SELECT projection so its output columns are in the
|
|
17
|
-
* same positional order as `targetColumns`.
|
|
18
|
-
*
|
|
19
|
-
* Parses the existing SELECT clause to build an alias→expression map,
|
|
20
|
-
* then emits columns in `targetColumns` order. Columns that came from
|
|
21
|
-
* a `*` expansion are emitted as bare names; aliased expressions (e.g.
|
|
22
|
-
* `_skills as skills`) are preserved with their original expression.
|
|
23
|
-
*/
|
|
24
|
-
export declare function rewriteSelectColumns(query: string, targetColumns: string[]): string;
|
|
2
|
+
import type { PlanOptions } from './options.js';
|
|
3
|
+
import type { BuildBackfillPlanOutput } from './types.js';
|
|
25
4
|
export declare function buildBackfillPlan(input: {
|
|
26
|
-
|
|
27
|
-
from: string;
|
|
28
|
-
to: string;
|
|
29
|
-
timeColumn: string;
|
|
5
|
+
opts: PlanOptions;
|
|
30
6
|
configPath: string;
|
|
31
7
|
config: Pick<ResolvedChxConfig, 'metaDir' | 'schema'>;
|
|
32
|
-
options: NormalizedBackfillPluginOptions;
|
|
33
|
-
chunkHours?: number;
|
|
34
|
-
forceLargeWindow?: boolean;
|
|
35
|
-
force?: boolean;
|
|
36
8
|
clickhouse?: {
|
|
37
9
|
url: string;
|
|
38
10
|
database: string;
|
|
39
11
|
};
|
|
12
|
+
clickhouseQuery: <T>(sql: string) => Promise<T[]>;
|
|
40
13
|
}): Promise<BuildBackfillPlanOutput>;
|
|
41
14
|
//# sourceMappingURL=planner.d.ts.map
|
package/dist/planner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAMpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAO/C,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,YAAY,CAAA;AAEnB,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,IAAI,EAAE,WAAW,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAA;IACrD,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,eAAe,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CAClD,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwHnC"}
|
package/dist/planner.js
CHANGED
|
@@ -1,364 +1,113 @@
|
|
|
1
1
|
import { dirname } from 'node:path';
|
|
2
|
-
import { unlink } from 'node:fs/promises';
|
|
3
2
|
import { loadSchemaDefinitions } from '@chkit/core/schema-loader';
|
|
3
|
+
import { analyzeAndChunk } from './chunking/analyze.js';
|
|
4
|
+
import { buildChunkSql } from './chunking/sql.js';
|
|
4
5
|
import { findMvForTarget } from './detect.js';
|
|
5
6
|
import { BackfillConfigError } from './errors.js';
|
|
6
|
-
import { backfillPaths, computeBackfillStateDir, computeEnvironmentFingerprint,
|
|
7
|
-
function ensureHoursWithinLimits(input) {
|
|
8
|
-
const fromMillis = new Date(input.from).getTime();
|
|
9
|
-
const toMillis = new Date(input.to).getTime();
|
|
10
|
-
if (toMillis <= fromMillis) {
|
|
11
|
-
throw new BackfillConfigError('Invalid backfill window. Expected --to to be after --from.');
|
|
12
|
-
}
|
|
13
|
-
const durationHours = (toMillis - fromMillis) / (1000 * 60 * 60);
|
|
14
|
-
if (durationHours > input.limits.maxWindowHours && !input.forceLargeWindow) {
|
|
15
|
-
throw new BackfillConfigError(`Requested window (${durationHours.toFixed(2)} hours) exceeds limits.maxWindowHours=${input.limits.maxWindowHours}. Retry with --force-large-window to acknowledge risk.`);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
function buildSettingsClause(token) {
|
|
19
|
-
if (token) {
|
|
20
|
-
return `SETTINGS async_insert=0, insert_deduplication_token='${token}'`;
|
|
21
|
-
}
|
|
22
|
-
return `SETTINGS async_insert=0`;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Inject a time-range filter directly into a SQL query.
|
|
26
|
-
*
|
|
27
|
-
* Scans for top-level (not inside parentheses or string literals) SQL keywords
|
|
28
|
-
* to determine where to place the condition:
|
|
29
|
-
* - If a top-level WHERE exists, appends AND conditions at its end.
|
|
30
|
-
* - Otherwise, inserts a WHERE clause before trailing clauses (GROUP BY, etc.).
|
|
31
|
-
*
|
|
32
|
-
* This avoids wrapping the query in a CTE, which causes ClickHouse to infer
|
|
33
|
-
* Nullable wrappers on Array/Map columns — an illegal type combination.
|
|
34
|
-
*/
|
|
35
|
-
export function injectTimeFilter(query, timeColumn, from, to) {
|
|
36
|
-
const trimmed = query.trimEnd();
|
|
37
|
-
const upper = trimmed.toUpperCase();
|
|
38
|
-
const hits = [];
|
|
39
|
-
let depth = 0;
|
|
40
|
-
for (let i = 0; i < trimmed.length; i++) {
|
|
41
|
-
const ch = trimmed[i];
|
|
42
|
-
if (ch === '(') {
|
|
43
|
-
depth++;
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
if (ch === ')') {
|
|
47
|
-
depth--;
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
if (ch === "'") {
|
|
51
|
-
i++;
|
|
52
|
-
while (i < trimmed.length && trimmed[i] !== "'") {
|
|
53
|
-
if (trimmed[i] === '\\')
|
|
54
|
-
i++;
|
|
55
|
-
i++;
|
|
56
|
-
}
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
if (depth !== 0)
|
|
60
|
-
continue;
|
|
61
|
-
// Must be preceded by whitespace or be at start
|
|
62
|
-
if (i > 0 && /\S/.test(trimmed[i - 1] ?? ''))
|
|
63
|
-
continue;
|
|
64
|
-
const rest = upper.slice(i);
|
|
65
|
-
for (const kw of ['WHERE', 'GROUP BY', 'HAVING', 'ORDER BY', 'QUALIFY', 'LIMIT', 'SETTINGS']) {
|
|
66
|
-
if (rest.startsWith(kw) && (i + kw.length >= trimmed.length || /\s/.test(trimmed[i + kw.length] ?? ''))) {
|
|
67
|
-
hits.push({ keyword: kw, position: i });
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
const whereHit = hits.find(h => h.keyword === 'WHERE');
|
|
73
|
-
const trailingKeywords = ['GROUP BY', 'HAVING', 'ORDER BY', 'QUALIFY', 'LIMIT', 'SETTINGS'];
|
|
74
|
-
const firstTrailing = hits
|
|
75
|
-
.filter(h => trailingKeywords.includes(h.keyword))
|
|
76
|
-
.filter(h => !whereHit || h.position > whereHit.position)[0];
|
|
77
|
-
const timeCondition = `${timeColumn} >= parseDateTimeBestEffort('${from}')\n AND ${timeColumn} < parseDateTimeBestEffort('${to}')`;
|
|
78
|
-
const insertAt = firstTrailing ? firstTrailing.position : trimmed.length;
|
|
79
|
-
const before = trimmed.slice(0, insertAt).trimEnd();
|
|
80
|
-
const after = trimmed.slice(insertAt);
|
|
81
|
-
if (whereHit) {
|
|
82
|
-
return `${before}\n AND ${timeCondition}${after ? `\n${after}` : ''}`;
|
|
83
|
-
}
|
|
84
|
-
return `${before}\nWHERE ${timeCondition}${after ? `\n${after}` : ''}`;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Rewrite a SQL query's SELECT projection so its output columns are in the
|
|
88
|
-
* same positional order as `targetColumns`.
|
|
89
|
-
*
|
|
90
|
-
* Parses the existing SELECT clause to build an alias→expression map,
|
|
91
|
-
* then emits columns in `targetColumns` order. Columns that came from
|
|
92
|
-
* a `*` expansion are emitted as bare names; aliased expressions (e.g.
|
|
93
|
-
* `_skills as skills`) are preserved with their original expression.
|
|
94
|
-
*/
|
|
95
|
-
export function rewriteSelectColumns(query, targetColumns) {
|
|
96
|
-
const trimmed = query.trimEnd();
|
|
97
|
-
const upper = trimmed.toUpperCase();
|
|
98
|
-
// Scan for top-level SELECT and FROM positions (outside parens and strings)
|
|
99
|
-
let selectPos = -1;
|
|
100
|
-
let fromPos = -1;
|
|
101
|
-
let depth = 0;
|
|
102
|
-
for (let i = 0; i < trimmed.length; i++) {
|
|
103
|
-
const ch = trimmed[i];
|
|
104
|
-
if (ch === '(') {
|
|
105
|
-
depth++;
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
if (ch === ')') {
|
|
109
|
-
depth--;
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
if (ch === "'") {
|
|
113
|
-
i++;
|
|
114
|
-
while (i < trimmed.length && trimmed[i] !== "'") {
|
|
115
|
-
if (trimmed[i] === '\\')
|
|
116
|
-
i++;
|
|
117
|
-
i++;
|
|
118
|
-
}
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
if (depth !== 0)
|
|
122
|
-
continue;
|
|
123
|
-
if (i > 0 && /\S/.test(trimmed[i - 1] ?? ''))
|
|
124
|
-
continue;
|
|
125
|
-
const rest = upper.slice(i);
|
|
126
|
-
if (selectPos === -1 && rest.startsWith('SELECT') && (i + 6 >= trimmed.length || /\s/.test(trimmed[i + 6] ?? ''))) {
|
|
127
|
-
selectPos = i;
|
|
128
|
-
}
|
|
129
|
-
else if (selectPos !== -1 && fromPos === -1 && rest.startsWith('FROM') && (i + 4 >= trimmed.length || /\s/.test(trimmed[i + 4] ?? ''))) {
|
|
130
|
-
fromPos = i;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
if (selectPos === -1 || fromPos === -1)
|
|
134
|
-
return query;
|
|
135
|
-
const projStart = selectPos + 6;
|
|
136
|
-
const projText = trimmed.slice(projStart, fromPos).trim();
|
|
137
|
-
// Split projection by top-level commas
|
|
138
|
-
const items = [];
|
|
139
|
-
let itemStart = 0;
|
|
140
|
-
depth = 0;
|
|
141
|
-
for (let i = 0; i < projText.length; i++) {
|
|
142
|
-
const ch = projText[i];
|
|
143
|
-
if (ch === '(') {
|
|
144
|
-
depth++;
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
if (ch === ')') {
|
|
148
|
-
depth--;
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
if (ch === "'") {
|
|
152
|
-
i++;
|
|
153
|
-
while (i < projText.length && projText[i] !== "'") {
|
|
154
|
-
if (projText[i] === '\\')
|
|
155
|
-
i++;
|
|
156
|
-
i++;
|
|
157
|
-
}
|
|
158
|
-
continue;
|
|
159
|
-
}
|
|
160
|
-
if (depth === 0 && ch === ',') {
|
|
161
|
-
items.push(projText.slice(itemStart, i).trim());
|
|
162
|
-
itemStart = i + 1;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
items.push(projText.slice(itemStart).trim());
|
|
166
|
-
// Build alias → expression map from non-star items
|
|
167
|
-
const aliasMap = new Map();
|
|
168
|
-
for (const item of items) {
|
|
169
|
-
if (item === '*')
|
|
170
|
-
continue;
|
|
171
|
-
const itemUpper = item.toUpperCase();
|
|
172
|
-
let asPos = -1;
|
|
173
|
-
let d = 0;
|
|
174
|
-
for (let i = 0; i < item.length; i++) {
|
|
175
|
-
const ch = item[i];
|
|
176
|
-
if (ch === '(') {
|
|
177
|
-
d++;
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
if (ch === ')') {
|
|
181
|
-
d--;
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
if (ch === "'") {
|
|
185
|
-
i++;
|
|
186
|
-
while (i < item.length && item[i] !== "'") {
|
|
187
|
-
if (item[i] === '\\')
|
|
188
|
-
i++;
|
|
189
|
-
i++;
|
|
190
|
-
}
|
|
191
|
-
continue;
|
|
192
|
-
}
|
|
193
|
-
if (d !== 0)
|
|
194
|
-
continue;
|
|
195
|
-
if (i > 0 && /\S/.test(item[i - 1] ?? ''))
|
|
196
|
-
continue;
|
|
197
|
-
const rest = itemUpper.slice(i);
|
|
198
|
-
if (rest.startsWith('AS') && (i + 2 >= item.length || /\s/.test(item[i + 2] ?? ''))) {
|
|
199
|
-
asPos = i;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
if (asPos !== -1) {
|
|
203
|
-
const alias = item.slice(asPos + 2).trim();
|
|
204
|
-
aliasMap.set(alias, item);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
// Emit columns in target order
|
|
208
|
-
const rewrittenCols = targetColumns.map(col => aliasMap.get(col) ?? col);
|
|
209
|
-
const before = trimmed.slice(0, projStart);
|
|
210
|
-
const after = trimmed.slice(fromPos);
|
|
211
|
-
return `${before} ${rewrittenCols.join(', ')}\n${after}`;
|
|
212
|
-
}
|
|
213
|
-
function buildChunkSqlTemplate(chunk) {
|
|
214
|
-
const header = `/* chkit backfill plan=${chunk.planId} chunk=${chunk.chunkId} token=${chunk.token} */`;
|
|
215
|
-
const settings = buildSettingsClause(chunk.token);
|
|
216
|
-
if (chunk.mvAsQuery) {
|
|
217
|
-
const filtered = injectTimeFilter(chunk.mvAsQuery, chunk.timeColumn, chunk.from, chunk.to);
|
|
218
|
-
if (chunk.targetColumns?.length) {
|
|
219
|
-
const reordered = rewriteSelectColumns(filtered, chunk.targetColumns);
|
|
220
|
-
return [header, `INSERT INTO ${chunk.target}`, reordered, settings].join('\n');
|
|
221
|
-
}
|
|
222
|
-
return [header, `INSERT INTO ${chunk.target}`, filtered, settings].join('\n');
|
|
223
|
-
}
|
|
224
|
-
return [
|
|
225
|
-
header,
|
|
226
|
-
`INSERT INTO ${chunk.target}`,
|
|
227
|
-
`SELECT *`,
|
|
228
|
-
`FROM ${chunk.target}`,
|
|
229
|
-
`WHERE ${chunk.timeColumn} >= parseDateTimeBestEffort('${chunk.from}')`,
|
|
230
|
-
` AND ${chunk.timeColumn} < parseDateTimeBestEffort('${chunk.to}')`,
|
|
231
|
-
settings,
|
|
232
|
-
].join('\n');
|
|
233
|
-
}
|
|
234
|
-
function buildChunks(input) {
|
|
235
|
-
const fromMillis = new Date(input.from).getTime();
|
|
236
|
-
const toMillis = new Date(input.to).getTime();
|
|
237
|
-
const chunkMillis = input.chunkHours * 60 * 60 * 1000;
|
|
238
|
-
const chunks = [];
|
|
239
|
-
let current = fromMillis;
|
|
240
|
-
while (current < toMillis) {
|
|
241
|
-
const next = Math.min(current + chunkMillis, toMillis);
|
|
242
|
-
const chunkFrom = new Date(current).toISOString();
|
|
243
|
-
const chunkTo = new Date(next).toISOString();
|
|
244
|
-
const idSeed = `${input.planId}:${chunkFrom}:${chunkTo}`;
|
|
245
|
-
const chunkId = hashId(`chunk:${idSeed}`).slice(0, 16);
|
|
246
|
-
const token = input.requireIdempotencyToken ? hashId(`token:${idSeed}`) : '';
|
|
247
|
-
chunks.push({
|
|
248
|
-
id: chunkId,
|
|
249
|
-
from: chunkFrom,
|
|
250
|
-
to: chunkTo,
|
|
251
|
-
status: 'pending',
|
|
252
|
-
attempts: 0,
|
|
253
|
-
idempotencyToken: token,
|
|
254
|
-
sqlTemplate: buildChunkSqlTemplate({
|
|
255
|
-
planId: input.planId,
|
|
256
|
-
chunkId,
|
|
257
|
-
token,
|
|
258
|
-
target: input.target,
|
|
259
|
-
from: chunkFrom,
|
|
260
|
-
to: chunkTo,
|
|
261
|
-
timeColumn: input.timeColumn,
|
|
262
|
-
mvAsQuery: input.mvAsQuery,
|
|
263
|
-
targetColumns: input.targetColumns,
|
|
264
|
-
}),
|
|
265
|
-
});
|
|
266
|
-
current = next;
|
|
267
|
-
}
|
|
268
|
-
return chunks;
|
|
269
|
-
}
|
|
7
|
+
import { backfillPaths, computeBackfillStateDir, computeEnvironmentFingerprint, writeJson, } from './state.js';
|
|
270
8
|
export async function buildBackfillPlan(input) {
|
|
271
|
-
const
|
|
272
|
-
|
|
273
|
-
|
|
9
|
+
const { opts } = input;
|
|
10
|
+
const [database, table] = opts.target.split('.');
|
|
11
|
+
if (!database || !table) {
|
|
12
|
+
throw new BackfillConfigError('Invalid target format. Expected <database.table>.');
|
|
274
13
|
}
|
|
275
|
-
ensureHoursWithinLimits({
|
|
276
|
-
from: input.from,
|
|
277
|
-
to: input.to,
|
|
278
|
-
limits: input.options.limits,
|
|
279
|
-
forceLargeWindow: input.forceLargeWindow ?? false,
|
|
280
|
-
});
|
|
281
14
|
const env = computeEnvironmentFingerprint(input.clickhouse);
|
|
282
|
-
|
|
283
|
-
const
|
|
15
|
+
// 1. Analyze table and build planned chunks
|
|
16
|
+
const { planId, partitions, sortKey, chunks: plannedChunks } = await analyzeAndChunk({
|
|
17
|
+
database,
|
|
18
|
+
table,
|
|
19
|
+
from: opts.from,
|
|
20
|
+
to: opts.to,
|
|
21
|
+
maxChunkBytes: opts.maxChunkBytes,
|
|
22
|
+
requireIdempotencyToken: opts.requireIdempotencyToken,
|
|
23
|
+
query: input.clickhouseQuery,
|
|
24
|
+
});
|
|
25
|
+
if (partitions.length === 0) {
|
|
26
|
+
throw new BackfillConfigError(`No partitions found for ${opts.target}${opts.from || opts.to ? ' within the specified time range' : ''}. The table may be empty.`);
|
|
27
|
+
}
|
|
28
|
+
const firstPartition = partitions[0];
|
|
29
|
+
const derivedFrom = opts.from ?? partitions.reduce((min, p) => (p.minTime < min ? p.minTime : min), firstPartition.minTime);
|
|
30
|
+
const derivedTo = opts.to ?? partitions.reduce((max, p) => (p.maxTime > max ? p.maxTime : max), firstPartition.maxTime);
|
|
31
|
+
const stateDir = computeBackfillStateDir(input.config, input.configPath, opts.stateDir);
|
|
284
32
|
const paths = backfillPaths(stateDir, planId);
|
|
285
|
-
|
|
33
|
+
// 2. Detect MV for replay strategy
|
|
286
34
|
let mvAsQuery;
|
|
287
35
|
let targetColumns;
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
const tableDef = definitions.find((d) => d.kind === 'table' && d.database === database && d.name === table);
|
|
299
|
-
if (tableDef && tableDef.kind === 'table') {
|
|
300
|
-
targetColumns = tableDef.columns.map((c) => c.name);
|
|
301
|
-
}
|
|
36
|
+
try {
|
|
37
|
+
const definitions = await loadSchemaDefinitions(input.config.schema, {
|
|
38
|
+
cwd: dirname(input.configPath),
|
|
39
|
+
});
|
|
40
|
+
const mv = findMvForTarget(definitions, database, table);
|
|
41
|
+
if (mv) {
|
|
42
|
+
mvAsQuery = mv.as;
|
|
43
|
+
const tableDef = definitions.find((d) => d.kind === 'table' && d.database === database && d.name === table);
|
|
44
|
+
if (tableDef && tableDef.kind === 'table') {
|
|
45
|
+
targetColumns = tableDef.columns.map((c) => c.name);
|
|
302
46
|
}
|
|
303
47
|
}
|
|
304
|
-
catch {
|
|
305
|
-
// Schema load failed — fall back to plain table strategy
|
|
306
|
-
}
|
|
307
48
|
}
|
|
49
|
+
catch {
|
|
50
|
+
// Schema load failed — fall back to direct copy
|
|
51
|
+
}
|
|
52
|
+
// 3. Stamp SQL on each planned chunk to produce BackfillChunk[]
|
|
53
|
+
const chunks = plannedChunks.map(planned => {
|
|
54
|
+
const sqlTemplate = buildChunkSql({
|
|
55
|
+
planId,
|
|
56
|
+
chunk: planned,
|
|
57
|
+
target: opts.target,
|
|
58
|
+
sortKey,
|
|
59
|
+
mvAsQuery,
|
|
60
|
+
targetColumns,
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
id: planned.id,
|
|
64
|
+
from: planned.from,
|
|
65
|
+
to: planned.to,
|
|
66
|
+
status: 'pending',
|
|
67
|
+
attempts: 0,
|
|
68
|
+
idempotencyToken: planned.idempotencyToken,
|
|
69
|
+
sqlTemplate,
|
|
70
|
+
partitionId: planned.partitionId,
|
|
71
|
+
estimatedBytes: planned.estimatedBytes,
|
|
72
|
+
...(planned.sortKeyFrom !== undefined ? { sortKeyFrom: planned.sortKeyFrom } : {}),
|
|
73
|
+
...(planned.sortKeyTo !== undefined ? { sortKeyTo: planned.sortKeyTo } : {}),
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
const strategy = mvAsQuery ? 'mv_replay' : 'partition';
|
|
308
77
|
const plan = {
|
|
309
78
|
planId,
|
|
310
|
-
target:
|
|
79
|
+
target: opts.target,
|
|
311
80
|
createdAt: '1970-01-01T00:00:00.000Z',
|
|
312
81
|
status: 'planned',
|
|
313
|
-
strategy,
|
|
82
|
+
strategy: strategy,
|
|
314
83
|
...(env ? { environment: env } : {}),
|
|
315
|
-
from:
|
|
316
|
-
to:
|
|
317
|
-
chunks
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
from: input.from,
|
|
321
|
-
to: input.to,
|
|
322
|
-
chunkHours,
|
|
323
|
-
requireIdempotencyToken: input.options.defaults.requireIdempotencyToken,
|
|
324
|
-
timeColumn: input.timeColumn,
|
|
325
|
-
mvAsQuery,
|
|
326
|
-
targetColumns,
|
|
327
|
-
}),
|
|
84
|
+
from: derivedFrom,
|
|
85
|
+
to: derivedTo,
|
|
86
|
+
chunks,
|
|
87
|
+
partitions,
|
|
88
|
+
sortKey,
|
|
328
89
|
options: {
|
|
329
|
-
|
|
330
|
-
maxParallelChunks:
|
|
331
|
-
maxRetriesPerChunk:
|
|
332
|
-
requireIdempotencyToken:
|
|
333
|
-
|
|
90
|
+
maxChunkBytes: opts.maxChunkBytes,
|
|
91
|
+
maxParallelChunks: opts.maxParallelChunks,
|
|
92
|
+
maxRetriesPerChunk: opts.maxRetriesPerChunk,
|
|
93
|
+
requireIdempotencyToken: opts.requireIdempotencyToken,
|
|
94
|
+
sortKeyColumn: sortKey?.column,
|
|
95
|
+
},
|
|
96
|
+
policy: {
|
|
97
|
+
requireDryRunBeforeRun: opts.requireDryRunBeforeRun,
|
|
98
|
+
requireExplicitWindow: opts.requireExplicitWindow,
|
|
99
|
+
blockOverlappingRuns: opts.blockOverlappingRuns,
|
|
100
|
+
failCheckOnRequiredPendingBackfill: opts.failCheckOnRequiredPendingBackfill,
|
|
101
|
+
},
|
|
102
|
+
limits: {
|
|
103
|
+
maxWindowHours: opts.maxWindowHours,
|
|
104
|
+
minChunkMinutes: opts.minChunkMinutes,
|
|
334
105
|
},
|
|
335
|
-
policy: input.options.policy,
|
|
336
|
-
limits: input.options.limits,
|
|
337
106
|
};
|
|
338
|
-
if (input.force) {
|
|
339
|
-
for (const filePath of [paths.planPath, paths.runPath, paths.eventPath]) {
|
|
340
|
-
await unlink(filePath).catch((err) => {
|
|
341
|
-
if (err.code !== 'ENOENT')
|
|
342
|
-
throw err;
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
const existing = await readExistingPlan(paths.planPath);
|
|
347
|
-
if (existing) {
|
|
348
|
-
if (stableSerialize(existing) !== stableSerialize(plan)) {
|
|
349
|
-
throw new BackfillConfigError(`Backfill plan already exists at ${paths.planPath} but differs from current planning output. Remove it if you intentionally changed planning parameters.`);
|
|
350
|
-
}
|
|
351
|
-
return {
|
|
352
|
-
plan: existing,
|
|
353
|
-
planPath: paths.planPath,
|
|
354
|
-
existed: true,
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
107
|
await writeJson(paths.planPath, plan);
|
|
358
108
|
return {
|
|
359
109
|
plan,
|
|
360
110
|
planPath: paths.planPath,
|
|
361
|
-
existed: false,
|
|
362
111
|
};
|
|
363
112
|
}
|
|
364
113
|
//# sourceMappingURL=planner.js.map
|
package/dist/planner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
1
|
+
import { type PluginConfig } from './options.js';
|
|
2
|
+
import type { BackfillPlugin, BackfillPluginRegistration } from './types.js';
|
|
3
|
+
export declare function createBackfillPlugin(options?: PluginConfig): BackfillPlugin;
|
|
4
|
+
export declare function backfill(options?: PluginConfig): BackfillPluginRegistration;
|
|
4
5
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAWL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAA;AAcrB,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAE3B,MAAM,YAAY,CAAA;AAuInB,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,YAAiB,GAAG,cAAc,CA+R/E;AAED,wBAAgB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,0BAA0B,CAO/E"}
|