@tinybirdco/sdk 0.0.1
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/README.md +518 -0
- package/bin/tinybird.js +7 -0
- package/dist/api/branches.d.ts +98 -0
- package/dist/api/branches.d.ts.map +1 -0
- package/dist/api/branches.js +203 -0
- package/dist/api/branches.js.map +1 -0
- package/dist/api/branches.test.d.ts +2 -0
- package/dist/api/branches.test.d.ts.map +1 -0
- package/dist/api/branches.test.js +286 -0
- package/dist/api/branches.test.js.map +1 -0
- package/dist/api/build.d.ts +130 -0
- package/dist/api/build.d.ts.map +1 -0
- package/dist/api/build.js +143 -0
- package/dist/api/build.js.map +1 -0
- package/dist/api/build.test.d.ts +2 -0
- package/dist/api/build.test.d.ts.map +1 -0
- package/dist/api/build.test.js +138 -0
- package/dist/api/build.test.js.map +1 -0
- package/dist/api/deploy.d.ts +39 -0
- package/dist/api/deploy.d.ts.map +1 -0
- package/dist/api/deploy.js +135 -0
- package/dist/api/deploy.js.map +1 -0
- package/dist/api/deploy.test.d.ts +2 -0
- package/dist/api/deploy.test.d.ts.map +1 -0
- package/dist/api/deploy.test.js +118 -0
- package/dist/api/deploy.test.js.map +1 -0
- package/dist/api/workspaces.d.ts +46 -0
- package/dist/api/workspaces.d.ts.map +1 -0
- package/dist/api/workspaces.js +39 -0
- package/dist/api/workspaces.js.map +1 -0
- package/dist/api/workspaces.test.d.ts +2 -0
- package/dist/api/workspaces.test.d.ts.map +1 -0
- package/dist/api/workspaces.test.js +65 -0
- package/dist/api/workspaces.test.js.map +1 -0
- package/dist/cli/auth.d.ts +86 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +284 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/branch-store.d.ts +53 -0
- package/dist/cli/branch-store.d.ts.map +1 -0
- package/dist/cli/branch-store.js +91 -0
- package/dist/cli/branch-store.js.map +1 -0
- package/dist/cli/branch-store.test.d.ts +2 -0
- package/dist/cli/branch-store.test.d.ts.map +1 -0
- package/dist/cli/branch-store.test.js +115 -0
- package/dist/cli/branch-store.test.js.map +1 -0
- package/dist/cli/commands/branch.d.ts +82 -0
- package/dist/cli/commands/branch.d.ts.map +1 -0
- package/dist/cli/commands/branch.js +215 -0
- package/dist/cli/commands/branch.js.map +1 -0
- package/dist/cli/commands/build.d.ts +43 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +138 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +78 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +226 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/init.d.ts +45 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +277 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/init.test.d.ts +2 -0
- package/dist/cli/commands/init.test.d.ts.map +1 -0
- package/dist/cli/commands/init.test.js +158 -0
- package/dist/cli/commands/init.test.js.map +1 -0
- package/dist/cli/commands/login.d.ts +37 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +64 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/config.d.ts +114 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +258 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/config.test.d.ts +2 -0
- package/dist/cli/config.test.d.ts.map +1 -0
- package/dist/cli/config.test.js +243 -0
- package/dist/cli/config.test.js.map +1 -0
- package/dist/cli/env.d.ts +29 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +66 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/git.d.ts +29 -0
- package/dist/cli/git.d.ts.map +1 -0
- package/dist/cli/git.js +114 -0
- package/dist/cli/git.js.map +1 -0
- package/dist/cli/git.test.d.ts +2 -0
- package/dist/cli/git.test.d.ts.map +1 -0
- package/dist/cli/git.test.js +125 -0
- package/dist/cli/git.test.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +337 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/schema-validation.d.ts +95 -0
- package/dist/cli/utils/schema-validation.d.ts.map +1 -0
- package/dist/cli/utils/schema-validation.js +175 -0
- package/dist/cli/utils/schema-validation.js.map +1 -0
- package/dist/cli/utils/schema-validation.test.d.ts +5 -0
- package/dist/cli/utils/schema-validation.test.d.ts.map +1 -0
- package/dist/cli/utils/schema-validation.test.js +173 -0
- package/dist/cli/utils/schema-validation.test.js.map +1 -0
- package/dist/client/base.d.ts +116 -0
- package/dist/client/base.d.ts.map +1 -0
- package/dist/client/base.js +328 -0
- package/dist/client/base.js.map +1 -0
- package/dist/client/types.d.ts +137 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +43 -0
- package/dist/client/types.js.map +1 -0
- package/dist/generator/client.d.ts +44 -0
- package/dist/generator/client.d.ts.map +1 -0
- package/dist/generator/client.js +144 -0
- package/dist/generator/client.js.map +1 -0
- package/dist/generator/datasource.d.ts +57 -0
- package/dist/generator/datasource.d.ts.map +1 -0
- package/dist/generator/datasource.js +169 -0
- package/dist/generator/datasource.js.map +1 -0
- package/dist/generator/datasource.test.d.ts +2 -0
- package/dist/generator/datasource.test.d.ts.map +1 -0
- package/dist/generator/datasource.test.js +254 -0
- package/dist/generator/datasource.test.js.map +1 -0
- package/dist/generator/index.d.ts +131 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +121 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/index.test.d.ts +2 -0
- package/dist/generator/index.test.d.ts.map +1 -0
- package/dist/generator/index.test.js +175 -0
- package/dist/generator/index.test.js.map +1 -0
- package/dist/generator/loader.d.ts +156 -0
- package/dist/generator/loader.d.ts.map +1 -0
- package/dist/generator/loader.js +295 -0
- package/dist/generator/loader.js.map +1 -0
- package/dist/generator/pipe.d.ts +72 -0
- package/dist/generator/pipe.d.ts.map +1 -0
- package/dist/generator/pipe.js +174 -0
- package/dist/generator/pipe.js.map +1 -0
- package/dist/generator/pipe.test.d.ts +2 -0
- package/dist/generator/pipe.test.d.ts.map +1 -0
- package/dist/generator/pipe.test.js +393 -0
- package/dist/generator/pipe.test.js.map +1 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/infer/index.d.ts +202 -0
- package/dist/infer/index.d.ts.map +1 -0
- package/dist/infer/index.js +5 -0
- package/dist/infer/index.js.map +1 -0
- package/dist/schema/datasource.d.ts +135 -0
- package/dist/schema/datasource.d.ts.map +1 -0
- package/dist/schema/datasource.js +105 -0
- package/dist/schema/datasource.js.map +1 -0
- package/dist/schema/datasource.test.d.ts +2 -0
- package/dist/schema/datasource.test.d.ts.map +1 -0
- package/dist/schema/datasource.test.js +142 -0
- package/dist/schema/datasource.test.js.map +1 -0
- package/dist/schema/engines.d.ts +157 -0
- package/dist/schema/engines.d.ts.map +1 -0
- package/dist/schema/engines.js +155 -0
- package/dist/schema/engines.js.map +1 -0
- package/dist/schema/engines.test.d.ts +2 -0
- package/dist/schema/engines.test.d.ts.map +1 -0
- package/dist/schema/engines.test.js +221 -0
- package/dist/schema/engines.test.js.map +1 -0
- package/dist/schema/params.d.ts +106 -0
- package/dist/schema/params.d.ts.map +1 -0
- package/dist/schema/params.js +138 -0
- package/dist/schema/params.js.map +1 -0
- package/dist/schema/params.test.d.ts +2 -0
- package/dist/schema/params.test.d.ts.map +1 -0
- package/dist/schema/params.test.js +175 -0
- package/dist/schema/params.test.js.map +1 -0
- package/dist/schema/pipe.d.ts +436 -0
- package/dist/schema/pipe.d.ts.map +1 -0
- package/dist/schema/pipe.js +484 -0
- package/dist/schema/pipe.js.map +1 -0
- package/dist/schema/pipe.test.d.ts +2 -0
- package/dist/schema/pipe.test.d.ts.map +1 -0
- package/dist/schema/pipe.test.js +488 -0
- package/dist/schema/pipe.test.js.map +1 -0
- package/dist/schema/project.d.ts +202 -0
- package/dist/schema/project.d.ts.map +1 -0
- package/dist/schema/project.js +188 -0
- package/dist/schema/project.js.map +1 -0
- package/dist/schema/project.test.d.ts +2 -0
- package/dist/schema/project.test.d.ts.map +1 -0
- package/dist/schema/project.test.js +180 -0
- package/dist/schema/project.test.js.map +1 -0
- package/dist/schema/types.d.ts +140 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +174 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/schema/types.test.d.ts +2 -0
- package/dist/schema/types.test.d.ts.map +1 -0
- package/dist/schema/types.test.js +176 -0
- package/dist/schema/types.test.js.map +1 -0
- package/dist/test/handlers.d.ts +58 -0
- package/dist/test/handlers.d.ts.map +1 -0
- package/dist/test/handlers.js +62 -0
- package/dist/test/handlers.js.map +1 -0
- package/dist/test/setup.d.ts +5 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +11 -0
- package/dist/test/setup.js.map +1 -0
- package/package.json +57 -0
- package/src/api/branches.test.ts +377 -0
- package/src/api/branches.ts +334 -0
- package/src/api/build.test.ts +216 -0
- package/src/api/build.ts +266 -0
- package/src/api/deploy.test.ts +193 -0
- package/src/api/deploy.ts +163 -0
- package/src/api/workspaces.test.ts +81 -0
- package/src/api/workspaces.ts +77 -0
- package/src/cli/auth.ts +358 -0
- package/src/cli/branch-store.test.ts +139 -0
- package/src/cli/branch-store.ts +137 -0
- package/src/cli/commands/branch.ts +306 -0
- package/src/cli/commands/build.ts +183 -0
- package/src/cli/commands/dev.ts +334 -0
- package/src/cli/commands/init.test.ts +249 -0
- package/src/cli/commands/init.ts +323 -0
- package/src/cli/commands/login.ts +98 -0
- package/src/cli/config.test.ts +359 -0
- package/src/cli/config.ts +335 -0
- package/src/cli/env.ts +86 -0
- package/src/cli/git.test.ts +147 -0
- package/src/cli/git.ts +125 -0
- package/src/cli/index.ts +382 -0
- package/src/cli/utils/schema-validation.test.ts +222 -0
- package/src/cli/utils/schema-validation.ts +272 -0
- package/src/client/base.ts +414 -0
- package/src/client/types.ts +165 -0
- package/src/generator/client.ts +194 -0
- package/src/generator/datasource.test.ts +297 -0
- package/src/generator/datasource.ts +217 -0
- package/src/generator/index.test.ts +209 -0
- package/src/generator/index.ts +203 -0
- package/src/generator/loader.ts +406 -0
- package/src/generator/pipe.test.ts +441 -0
- package/src/generator/pipe.ts +220 -0
- package/src/index.ts +191 -0
- package/src/infer/index.ts +247 -0
- package/src/schema/datasource.test.ts +187 -0
- package/src/schema/datasource.ts +195 -0
- package/src/schema/engines.test.ts +247 -0
- package/src/schema/engines.ts +271 -0
- package/src/schema/params.test.ts +208 -0
- package/src/schema/params.ts +249 -0
- package/src/schema/pipe.test.ts +588 -0
- package/src/schema/pipe.ts +832 -0
- package/src/schema/project.test.ts +236 -0
- package/src/schema/project.ts +394 -0
- package/src/schema/types.test.ts +212 -0
- package/src/schema/types.ts +366 -0
- package/src/test/handlers.ts +79 -0
- package/src/test/setup.ts +13 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { defineDatasource, isDatasourceDefinition, getColumnType, getColumnJsonPath, getColumnNames, column, } from "./datasource.js";
|
|
3
|
+
import { t } from "./types.js";
|
|
4
|
+
import { engine } from "./engines.js";
|
|
5
|
+
describe("Datasource Schema", () => {
|
|
6
|
+
describe("defineDatasource", () => {
|
|
7
|
+
it("creates a datasource with required fields", () => {
|
|
8
|
+
const ds = defineDatasource("events", {
|
|
9
|
+
schema: {
|
|
10
|
+
id: t.string(),
|
|
11
|
+
timestamp: t.dateTime(),
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
expect(ds._name).toBe("events");
|
|
15
|
+
expect(ds._type).toBe("datasource");
|
|
16
|
+
expect(ds.options.schema).toBeDefined();
|
|
17
|
+
});
|
|
18
|
+
it("creates a datasource with description", () => {
|
|
19
|
+
const ds = defineDatasource("events", {
|
|
20
|
+
description: "Event tracking data",
|
|
21
|
+
schema: {
|
|
22
|
+
id: t.string(),
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
expect(ds.options.description).toBe("Event tracking data");
|
|
26
|
+
});
|
|
27
|
+
it("creates a datasource with engine configuration", () => {
|
|
28
|
+
const ds = defineDatasource("events", {
|
|
29
|
+
schema: {
|
|
30
|
+
id: t.string(),
|
|
31
|
+
timestamp: t.dateTime(),
|
|
32
|
+
},
|
|
33
|
+
engine: engine.mergeTree({
|
|
34
|
+
sortingKey: ["id", "timestamp"],
|
|
35
|
+
partitionKey: "toYYYYMM(timestamp)",
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
expect(ds.options.engine).toBeDefined();
|
|
39
|
+
expect(ds.options.engine?.type).toBe("MergeTree");
|
|
40
|
+
});
|
|
41
|
+
it("throws error for invalid datasource name", () => {
|
|
42
|
+
expect(() => defineDatasource("123invalid", {
|
|
43
|
+
schema: { id: t.string() },
|
|
44
|
+
})).toThrow("Invalid datasource name");
|
|
45
|
+
expect(() => defineDatasource("my-datasource", {
|
|
46
|
+
schema: { id: t.string() },
|
|
47
|
+
})).toThrow("Invalid datasource name");
|
|
48
|
+
expect(() => defineDatasource("", {
|
|
49
|
+
schema: { id: t.string() },
|
|
50
|
+
})).toThrow("Invalid datasource name");
|
|
51
|
+
});
|
|
52
|
+
it("allows valid naming patterns", () => {
|
|
53
|
+
// Underscore prefix
|
|
54
|
+
const ds1 = defineDatasource("_private", {
|
|
55
|
+
schema: { id: t.string() },
|
|
56
|
+
});
|
|
57
|
+
expect(ds1._name).toBe("_private");
|
|
58
|
+
// With numbers
|
|
59
|
+
const ds2 = defineDatasource("events_v2", {
|
|
60
|
+
schema: { id: t.string() },
|
|
61
|
+
});
|
|
62
|
+
expect(ds2._name).toBe("events_v2");
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe("isDatasourceDefinition", () => {
|
|
66
|
+
it("returns true for valid datasource", () => {
|
|
67
|
+
const ds = defineDatasource("events", {
|
|
68
|
+
schema: { id: t.string() },
|
|
69
|
+
});
|
|
70
|
+
expect(isDatasourceDefinition(ds)).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
it("returns false for non-datasource objects", () => {
|
|
73
|
+
expect(isDatasourceDefinition({})).toBe(false);
|
|
74
|
+
expect(isDatasourceDefinition(null)).toBe(false);
|
|
75
|
+
expect(isDatasourceDefinition(undefined)).toBe(false);
|
|
76
|
+
expect(isDatasourceDefinition("string")).toBe(false);
|
|
77
|
+
expect(isDatasourceDefinition(123)).toBe(false);
|
|
78
|
+
expect(isDatasourceDefinition({ _name: "test" })).toBe(false);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe("getColumnType", () => {
|
|
82
|
+
it("returns type from raw validator", () => {
|
|
83
|
+
const validator = t.string();
|
|
84
|
+
const result = getColumnType(validator);
|
|
85
|
+
expect(result).toBe(validator);
|
|
86
|
+
});
|
|
87
|
+
it("returns type from column definition", () => {
|
|
88
|
+
const validator = t.string();
|
|
89
|
+
const col = column(validator, { jsonPath: "$.id" });
|
|
90
|
+
const result = getColumnType(col);
|
|
91
|
+
expect(result).toBe(validator);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe("getColumnJsonPath", () => {
|
|
95
|
+
it("returns undefined for raw validator", () => {
|
|
96
|
+
const validator = t.string();
|
|
97
|
+
const result = getColumnJsonPath(validator);
|
|
98
|
+
expect(result).toBeUndefined();
|
|
99
|
+
});
|
|
100
|
+
it("returns jsonPath from column definition", () => {
|
|
101
|
+
const col = column(t.string(), { jsonPath: "$.user.id" });
|
|
102
|
+
const result = getColumnJsonPath(col);
|
|
103
|
+
expect(result).toBe("$.user.id");
|
|
104
|
+
});
|
|
105
|
+
it("returns undefined when jsonPath is not set", () => {
|
|
106
|
+
const col = column(t.string());
|
|
107
|
+
const result = getColumnJsonPath(col);
|
|
108
|
+
expect(result).toBeUndefined();
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe("getColumnNames", () => {
|
|
112
|
+
it("returns all column names from schema", () => {
|
|
113
|
+
const schema = {
|
|
114
|
+
id: t.string(),
|
|
115
|
+
timestamp: t.dateTime(),
|
|
116
|
+
user_id: t.string(),
|
|
117
|
+
};
|
|
118
|
+
const names = getColumnNames(schema);
|
|
119
|
+
expect(names).toHaveLength(3);
|
|
120
|
+
expect(names).toContain("id");
|
|
121
|
+
expect(names).toContain("timestamp");
|
|
122
|
+
expect(names).toContain("user_id");
|
|
123
|
+
});
|
|
124
|
+
it("returns empty array for empty schema", () => {
|
|
125
|
+
const names = getColumnNames({});
|
|
126
|
+
expect(names).toHaveLength(0);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe("column", () => {
|
|
130
|
+
it("creates a column definition with type only", () => {
|
|
131
|
+
const col = column(t.string());
|
|
132
|
+
expect(col.type).toBeDefined();
|
|
133
|
+
expect(col.jsonPath).toBeUndefined();
|
|
134
|
+
});
|
|
135
|
+
it("creates a column definition with jsonPath", () => {
|
|
136
|
+
const col = column(t.string(), { jsonPath: "$.data.value" });
|
|
137
|
+
expect(col.type).toBeDefined();
|
|
138
|
+
expect(col.jsonPath).toBe("$.data.value");
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=datasource.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datasource.test.js","sourceRoot":"","sources":["../../src/schema/datasource.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine configurations for Tinybird datasources
|
|
3
|
+
* ClickHouse table engines determine how data is stored and queried
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Base configuration shared by all MergeTree engines
|
|
7
|
+
*/
|
|
8
|
+
export interface BaseMergeTreeConfig {
|
|
9
|
+
/** Columns used for sorting data within parts (required for all MergeTree engines) */
|
|
10
|
+
sortingKey: string | readonly string[];
|
|
11
|
+
/** Expression for partitioning data (e.g., 'toYYYYMM(timestamp)') */
|
|
12
|
+
partitionKey?: string;
|
|
13
|
+
/** Primary key columns (defaults to sortingKey if not specified) */
|
|
14
|
+
primaryKey?: string | readonly string[];
|
|
15
|
+
/** TTL expression for automatic data expiration (e.g., 'timestamp + INTERVAL 90 DAY') */
|
|
16
|
+
ttl?: string;
|
|
17
|
+
/** Additional engine settings */
|
|
18
|
+
settings?: Record<string, string | number | boolean>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* MergeTree engine configuration
|
|
22
|
+
* The most universal and functional table engine for high-load tasks
|
|
23
|
+
*/
|
|
24
|
+
export interface MergeTreeConfig extends BaseMergeTreeConfig {
|
|
25
|
+
type: "MergeTree";
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* ReplacingMergeTree engine configuration
|
|
29
|
+
* Removes duplicate rows with the same sorting key during merges
|
|
30
|
+
*/
|
|
31
|
+
export interface ReplacingMergeTreeConfig extends BaseMergeTreeConfig {
|
|
32
|
+
type: "ReplacingMergeTree";
|
|
33
|
+
/** Optional version column - rows with highest version are kept */
|
|
34
|
+
ver?: string;
|
|
35
|
+
/** Optional flag to enable clean mode (ClickHouse 23.2+) */
|
|
36
|
+
isDeleted?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* SummingMergeTree engine configuration
|
|
40
|
+
* Sums numeric columns for rows with the same sorting key during merges
|
|
41
|
+
*/
|
|
42
|
+
export interface SummingMergeTreeConfig extends BaseMergeTreeConfig {
|
|
43
|
+
type: "SummingMergeTree";
|
|
44
|
+
/** Columns to sum (if not specified, all numeric columns are summed) */
|
|
45
|
+
columns?: readonly string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* AggregatingMergeTree engine configuration
|
|
49
|
+
* For incremental data aggregation with AggregateFunction columns
|
|
50
|
+
*/
|
|
51
|
+
export interface AggregatingMergeTreeConfig extends BaseMergeTreeConfig {
|
|
52
|
+
type: "AggregatingMergeTree";
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* CollapsingMergeTree engine configuration
|
|
56
|
+
* For collapsing rows that cancel each other out
|
|
57
|
+
*/
|
|
58
|
+
export interface CollapsingMergeTreeConfig extends BaseMergeTreeConfig {
|
|
59
|
+
type: "CollapsingMergeTree";
|
|
60
|
+
/** Column containing sign (1 for state, -1 for cancel) */
|
|
61
|
+
sign: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* VersionedCollapsingMergeTree engine configuration
|
|
65
|
+
* For collapsing with versioning when events may arrive out of order
|
|
66
|
+
*/
|
|
67
|
+
export interface VersionedCollapsingMergeTreeConfig extends BaseMergeTreeConfig {
|
|
68
|
+
type: "VersionedCollapsingMergeTree";
|
|
69
|
+
/** Column containing sign (1 for state, -1 for cancel) */
|
|
70
|
+
sign: string;
|
|
71
|
+
/** Column containing version number */
|
|
72
|
+
version: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Union type of all engine configurations
|
|
76
|
+
*/
|
|
77
|
+
export type EngineConfig = MergeTreeConfig | ReplacingMergeTreeConfig | SummingMergeTreeConfig | AggregatingMergeTreeConfig | CollapsingMergeTreeConfig | VersionedCollapsingMergeTreeConfig;
|
|
78
|
+
/**
|
|
79
|
+
* Engine configuration builders
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* import { engine } from '@tinybirdco/sdk';
|
|
84
|
+
*
|
|
85
|
+
* // Basic MergeTree
|
|
86
|
+
* engine.mergeTree({
|
|
87
|
+
* sortingKey: ['user_id', 'timestamp'],
|
|
88
|
+
* partitionKey: 'toYYYYMM(timestamp)',
|
|
89
|
+
* });
|
|
90
|
+
*
|
|
91
|
+
* // ReplacingMergeTree for upserts
|
|
92
|
+
* engine.replacingMergeTree({
|
|
93
|
+
* sortingKey: ['id'],
|
|
94
|
+
* ver: 'updated_at',
|
|
95
|
+
* });
|
|
96
|
+
*
|
|
97
|
+
* // SummingMergeTree for counters
|
|
98
|
+
* engine.summingMergeTree({
|
|
99
|
+
* sortingKey: ['date', 'metric_name'],
|
|
100
|
+
* columns: ['value'],
|
|
101
|
+
* });
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare const engine: {
|
|
105
|
+
/**
|
|
106
|
+
* MergeTree - The most universal engine for high-load tasks
|
|
107
|
+
* Best for: General-purpose analytics, logs, events
|
|
108
|
+
*/
|
|
109
|
+
readonly mergeTree: (config: Omit<MergeTreeConfig, "type">) => MergeTreeConfig;
|
|
110
|
+
/**
|
|
111
|
+
* ReplacingMergeTree - Removes duplicates during background merges
|
|
112
|
+
* Best for: Maintaining latest state, upserts, slowly changing dimensions
|
|
113
|
+
*
|
|
114
|
+
* @param config.ver - Optional version column. Rows with highest version are kept.
|
|
115
|
+
*/
|
|
116
|
+
readonly replacingMergeTree: (config: Omit<ReplacingMergeTreeConfig, "type">) => ReplacingMergeTreeConfig;
|
|
117
|
+
/**
|
|
118
|
+
* SummingMergeTree - Sums numeric columns during background merges
|
|
119
|
+
* Best for: Counters, metrics aggregation, pre-aggregated data
|
|
120
|
+
*
|
|
121
|
+
* @param config.columns - Columns to sum. If not specified, all numeric columns are summed.
|
|
122
|
+
*/
|
|
123
|
+
readonly summingMergeTree: (config: Omit<SummingMergeTreeConfig, "type">) => SummingMergeTreeConfig;
|
|
124
|
+
/**
|
|
125
|
+
* AggregatingMergeTree - For incremental aggregation with AggregateFunction columns
|
|
126
|
+
* Best for: Materialized views, incremental aggregation pipelines
|
|
127
|
+
*/
|
|
128
|
+
readonly aggregatingMergeTree: (config: Omit<AggregatingMergeTreeConfig, "type">) => AggregatingMergeTreeConfig;
|
|
129
|
+
/**
|
|
130
|
+
* CollapsingMergeTree - For collapsing state/cancel row pairs
|
|
131
|
+
* Best for: Changelog-style updates, mutable data with deletes
|
|
132
|
+
*
|
|
133
|
+
* @param config.sign - Column containing 1 (state) or -1 (cancel)
|
|
134
|
+
*/
|
|
135
|
+
readonly collapsingMergeTree: (config: Omit<CollapsingMergeTreeConfig, "type">) => CollapsingMergeTreeConfig;
|
|
136
|
+
/**
|
|
137
|
+
* VersionedCollapsingMergeTree - Collapsing with versioning for out-of-order events
|
|
138
|
+
* Best for: Changelog-style updates with potential out-of-order arrival
|
|
139
|
+
*
|
|
140
|
+
* @param config.sign - Column containing 1 (state) or -1 (cancel)
|
|
141
|
+
* @param config.version - Column containing version number for ordering
|
|
142
|
+
*/
|
|
143
|
+
readonly versionedCollapsingMergeTree: (config: Omit<VersionedCollapsingMergeTreeConfig, "type">) => VersionedCollapsingMergeTreeConfig;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Get the sorting key as an array
|
|
147
|
+
*/
|
|
148
|
+
export declare function getSortingKey(config: EngineConfig): readonly string[];
|
|
149
|
+
/**
|
|
150
|
+
* Get the primary key as an array (defaults to sorting key)
|
|
151
|
+
*/
|
|
152
|
+
export declare function getPrimaryKey(config: EngineConfig): readonly string[];
|
|
153
|
+
/**
|
|
154
|
+
* Generate the engine clause for a datasource file
|
|
155
|
+
*/
|
|
156
|
+
export declare function getEngineClause(config: EngineConfig): string;
|
|
157
|
+
//# sourceMappingURL=engines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engines.d.ts","sourceRoot":"","sources":["../../src/schema/engines.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sFAAsF;IACtF,UAAU,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACvC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACxC,yFAAyF;IACzF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,IAAI,EAAE,kBAAkB,CAAC;IACzB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,IAAI,EAAE,sBAAsB,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,kCAAmC,SAAQ,mBAAmB;IAC7E,IAAI,EAAE,8BAA8B,CAAC;IACrC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,wBAAwB,GACxB,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,kCAAkC,CAAC;AASvC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,MAAM;IACjB;;;OAGG;iCACiB,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,KAAG,eAAe;IAKnE;;;;;OAKG;0CAEO,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,KAC7C,wBAAwB;IAK3B;;;;;OAKG;wCAEO,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAC3C,sBAAsB;IAKzB;;;OAGG;4CAEO,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,KAC/C,0BAA0B;IAK7B;;;;;OAKG;2CAEO,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,KAC9C,yBAAyB;IAK5B;;;;;;OAMG;oDAEO,IAAI,CAAC,kCAAkC,EAAE,MAAM,CAAC,KACvD,kCAAkC;CAI7B,CAAC;AAEX;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAKrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAkD5D"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine configurations for Tinybird datasources
|
|
3
|
+
* ClickHouse table engines determine how data is stored and queried
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Helper to normalize sorting key to array format
|
|
7
|
+
*/
|
|
8
|
+
function normalizeSortingKey(key) {
|
|
9
|
+
return typeof key === "string" ? [key] : key;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Engine configuration builders
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { engine } from '@tinybirdco/sdk';
|
|
17
|
+
*
|
|
18
|
+
* // Basic MergeTree
|
|
19
|
+
* engine.mergeTree({
|
|
20
|
+
* sortingKey: ['user_id', 'timestamp'],
|
|
21
|
+
* partitionKey: 'toYYYYMM(timestamp)',
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // ReplacingMergeTree for upserts
|
|
25
|
+
* engine.replacingMergeTree({
|
|
26
|
+
* sortingKey: ['id'],
|
|
27
|
+
* ver: 'updated_at',
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* // SummingMergeTree for counters
|
|
31
|
+
* engine.summingMergeTree({
|
|
32
|
+
* sortingKey: ['date', 'metric_name'],
|
|
33
|
+
* columns: ['value'],
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export const engine = {
|
|
38
|
+
/**
|
|
39
|
+
* MergeTree - The most universal engine for high-load tasks
|
|
40
|
+
* Best for: General-purpose analytics, logs, events
|
|
41
|
+
*/
|
|
42
|
+
mergeTree: (config) => ({
|
|
43
|
+
type: "MergeTree",
|
|
44
|
+
...config,
|
|
45
|
+
}),
|
|
46
|
+
/**
|
|
47
|
+
* ReplacingMergeTree - Removes duplicates during background merges
|
|
48
|
+
* Best for: Maintaining latest state, upserts, slowly changing dimensions
|
|
49
|
+
*
|
|
50
|
+
* @param config.ver - Optional version column. Rows with highest version are kept.
|
|
51
|
+
*/
|
|
52
|
+
replacingMergeTree: (config) => ({
|
|
53
|
+
type: "ReplacingMergeTree",
|
|
54
|
+
...config,
|
|
55
|
+
}),
|
|
56
|
+
/**
|
|
57
|
+
* SummingMergeTree - Sums numeric columns during background merges
|
|
58
|
+
* Best for: Counters, metrics aggregation, pre-aggregated data
|
|
59
|
+
*
|
|
60
|
+
* @param config.columns - Columns to sum. If not specified, all numeric columns are summed.
|
|
61
|
+
*/
|
|
62
|
+
summingMergeTree: (config) => ({
|
|
63
|
+
type: "SummingMergeTree",
|
|
64
|
+
...config,
|
|
65
|
+
}),
|
|
66
|
+
/**
|
|
67
|
+
* AggregatingMergeTree - For incremental aggregation with AggregateFunction columns
|
|
68
|
+
* Best for: Materialized views, incremental aggregation pipelines
|
|
69
|
+
*/
|
|
70
|
+
aggregatingMergeTree: (config) => ({
|
|
71
|
+
type: "AggregatingMergeTree",
|
|
72
|
+
...config,
|
|
73
|
+
}),
|
|
74
|
+
/**
|
|
75
|
+
* CollapsingMergeTree - For collapsing state/cancel row pairs
|
|
76
|
+
* Best for: Changelog-style updates, mutable data with deletes
|
|
77
|
+
*
|
|
78
|
+
* @param config.sign - Column containing 1 (state) or -1 (cancel)
|
|
79
|
+
*/
|
|
80
|
+
collapsingMergeTree: (config) => ({
|
|
81
|
+
type: "CollapsingMergeTree",
|
|
82
|
+
...config,
|
|
83
|
+
}),
|
|
84
|
+
/**
|
|
85
|
+
* VersionedCollapsingMergeTree - Collapsing with versioning for out-of-order events
|
|
86
|
+
* Best for: Changelog-style updates with potential out-of-order arrival
|
|
87
|
+
*
|
|
88
|
+
* @param config.sign - Column containing 1 (state) or -1 (cancel)
|
|
89
|
+
* @param config.version - Column containing version number for ordering
|
|
90
|
+
*/
|
|
91
|
+
versionedCollapsingMergeTree: (config) => ({
|
|
92
|
+
type: "VersionedCollapsingMergeTree",
|
|
93
|
+
...config,
|
|
94
|
+
}),
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Get the sorting key as an array
|
|
98
|
+
*/
|
|
99
|
+
export function getSortingKey(config) {
|
|
100
|
+
return normalizeSortingKey(config.sortingKey);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get the primary key as an array (defaults to sorting key)
|
|
104
|
+
*/
|
|
105
|
+
export function getPrimaryKey(config) {
|
|
106
|
+
if (config.primaryKey) {
|
|
107
|
+
return normalizeSortingKey(config.primaryKey);
|
|
108
|
+
}
|
|
109
|
+
return getSortingKey(config);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Generate the engine clause for a datasource file
|
|
113
|
+
*/
|
|
114
|
+
export function getEngineClause(config) {
|
|
115
|
+
const parts = [`ENGINE "${config.type}"`];
|
|
116
|
+
if (config.partitionKey) {
|
|
117
|
+
parts.push(`ENGINE_PARTITION_KEY "${config.partitionKey}"`);
|
|
118
|
+
}
|
|
119
|
+
const sortingKey = getSortingKey(config);
|
|
120
|
+
parts.push(`ENGINE_SORTING_KEY "${sortingKey.join(", ")}"`);
|
|
121
|
+
if (config.primaryKey) {
|
|
122
|
+
const primaryKey = getPrimaryKey(config);
|
|
123
|
+
parts.push(`ENGINE_PRIMARY_KEY "${primaryKey.join(", ")}"`);
|
|
124
|
+
}
|
|
125
|
+
if (config.ttl) {
|
|
126
|
+
parts.push(`ENGINE_TTL "${config.ttl}"`);
|
|
127
|
+
}
|
|
128
|
+
// Engine-specific options
|
|
129
|
+
if (config.type === "ReplacingMergeTree" && config.ver) {
|
|
130
|
+
parts.push(`ENGINE_VER "${config.ver}"`);
|
|
131
|
+
}
|
|
132
|
+
if (config.type === "CollapsingMergeTree" || config.type === "VersionedCollapsingMergeTree") {
|
|
133
|
+
parts.push(`ENGINE_SIGN "${config.sign}"`);
|
|
134
|
+
}
|
|
135
|
+
if (config.type === "VersionedCollapsingMergeTree") {
|
|
136
|
+
parts.push(`ENGINE_VERSION "${config.version}"`);
|
|
137
|
+
}
|
|
138
|
+
if (config.type === "SummingMergeTree" && config.columns && config.columns.length > 0) {
|
|
139
|
+
parts.push(`ENGINE_SUMMING_COLUMNS "${config.columns.join(", ")}"`);
|
|
140
|
+
}
|
|
141
|
+
if (config.settings && Object.keys(config.settings).length > 0) {
|
|
142
|
+
const settingsStr = Object.entries(config.settings)
|
|
143
|
+
.map(([k, v]) => {
|
|
144
|
+
if (typeof v === "string") {
|
|
145
|
+
const escaped = v.replace(/'/g, "\\'");
|
|
146
|
+
return `${k}='${escaped}'`;
|
|
147
|
+
}
|
|
148
|
+
return `${k}=${v}`;
|
|
149
|
+
})
|
|
150
|
+
.join(", ");
|
|
151
|
+
parts.push(`ENGINE_SETTINGS "${settingsStr}"`);
|
|
152
|
+
}
|
|
153
|
+
return parts.join("\n");
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=engines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engines.js","sourceRoot":"","sources":["../../src/schema/engines.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engines.test.d.ts","sourceRoot":"","sources":["../../src/schema/engines.test.ts"],"names":[],"mappings":""}
|