@platforma-open/milaboratories.software-ptabler.schema 1.3.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/aggregate.d.ts +59 -0
- package/dist/basic_steps.d.ts +135 -0
- package/dist/common.d.ts +10 -0
- package/dist/concatenate.d.ts +22 -0
- package/dist/expressions.d.ts +320 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/io.d.ts +68 -0
- package/dist/join.d.ts +84 -0
- package/dist/sort.d.ts +48 -0
- package/package.json +33 -0
- package/src/aggregate.ts +77 -0
- package/src/basic_steps.ts +153 -0
- package/src/common.ts +30 -0
- package/src/concatenate.ts +25 -0
- package/src/expressions.ts +416 -0
- package/src/index.ts +20 -0
- package/src/io.ts +72 -0
- package/src/join.ts +103 -0
- package/src/sort.ts +55 -0
package/dist/join.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines the structure for mapping a column, with an optional rename.
|
|
3
|
+
*/
|
|
4
|
+
export interface ColumnMapping {
|
|
5
|
+
/** The original name of the column. */
|
|
6
|
+
column: string;
|
|
7
|
+
/** The new name for the column. If absent, the original name is used. */
|
|
8
|
+
rename?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Defines the type for join operations (excluding cross join) in a workflow.
|
|
12
|
+
* This step joins two tables from the tablespace based on specified columns and join strategy.
|
|
13
|
+
*/
|
|
14
|
+
export interface JoinStep {
|
|
15
|
+
/** The type of the step, which is always "join" for this operation. */
|
|
16
|
+
type: 'join';
|
|
17
|
+
/** The name of the left table in the tablespace to be joined. */
|
|
18
|
+
leftTable: string;
|
|
19
|
+
/** The name of the right table in the tablespace to be joined. */
|
|
20
|
+
rightTable: string;
|
|
21
|
+
/** The name to be assigned to the resulting joined table in the tablespace. */
|
|
22
|
+
outputTable: string;
|
|
23
|
+
/** A list of column names from the left table to be used for the equi-join, original not mapped names. */
|
|
24
|
+
leftOn: string[];
|
|
25
|
+
/** A list of column names from the right table to be used for the equi-join, original not mapped names. */
|
|
26
|
+
rightOn: string[];
|
|
27
|
+
/** The type of join to perform. */
|
|
28
|
+
how: JoinStrategy;
|
|
29
|
+
/**
|
|
30
|
+
* Determines how to handle key columns with the same name from both the left and right tables after the join.
|
|
31
|
+
* When set to \`true\` (the default), Polars will attempt to merge these identically named key columns into a single column in the output table.
|
|
32
|
+
* For 'inner', 'left', and 'right' joins, this is the standard behavior.
|
|
33
|
+
* For 'full' joins, setting this to \`true\` ensures the key columns are coalesced.
|
|
34
|
+
* When set to \`false\`, identically named key columns from the left and right tables will be kept separate in the output,
|
|
35
|
+
* with the column from the right table typically being renamed (e.g., by adding a suffix like '_right').
|
|
36
|
+
* This parameter mirrors the behavior of Polars' join coalescing logic.
|
|
37
|
+
* It does not apply to 'cross' joins, as they do not involve key columns in the same way.
|
|
38
|
+
*/
|
|
39
|
+
coalesce?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* An optional list to select and rename columns from the left table.
|
|
42
|
+
* If provided, only these columns (plus any from `leftOn` not explicitly listed) will be included.
|
|
43
|
+
* Use the `rename` property within a mapping to change a column's name.
|
|
44
|
+
*/
|
|
45
|
+
leftColumns?: ColumnMapping[];
|
|
46
|
+
/**
|
|
47
|
+
* An optional list to select and rename columns from the right table.
|
|
48
|
+
* If provided, only these columns (plus any from `rightOn` not explicitly listed) will be included.
|
|
49
|
+
* Use the `rename` property within a mapping to change a column's name.
|
|
50
|
+
*/
|
|
51
|
+
rightColumns?: ColumnMapping[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Defines the type for a cross join operation in a workflow.
|
|
55
|
+
* This step computes the Cartesian product of two tables.
|
|
56
|
+
*/
|
|
57
|
+
export interface CrossJoinStep {
|
|
58
|
+
/** The type of the step, which is always "join" for this operation. */
|
|
59
|
+
type: 'join';
|
|
60
|
+
/** The name of the left table in the tablespace to be joined. */
|
|
61
|
+
leftTable: string;
|
|
62
|
+
/** The name of the right table in the tablespace to be joined. */
|
|
63
|
+
rightTable: string;
|
|
64
|
+
/** The name to be assigned to the resulting joined table in the tablespace. */
|
|
65
|
+
outputTable: string;
|
|
66
|
+
/** The type of join to perform, which is always "cross" for this operation. */
|
|
67
|
+
how: 'cross';
|
|
68
|
+
/**
|
|
69
|
+
* An optional list to select and rename columns from the left table.
|
|
70
|
+
* If provided, only these columns will be included.
|
|
71
|
+
* Use the `rename` property within a mapping to change a column's name.
|
|
72
|
+
*/
|
|
73
|
+
leftColumns?: ColumnMapping[];
|
|
74
|
+
/**
|
|
75
|
+
* An optional list to select and rename columns from the right table.
|
|
76
|
+
* If provided, only these columns will be included.
|
|
77
|
+
* Use the `rename` property within a mapping to change a column's name.
|
|
78
|
+
*/
|
|
79
|
+
rightColumns?: ColumnMapping[];
|
|
80
|
+
}
|
|
81
|
+
/** Defines the possible join strategies for a standard join operation (excluding cross join). */
|
|
82
|
+
export type JoinStrategy = 'inner' | 'left' | 'right' | 'full';
|
|
83
|
+
/** Defines any possible join step. */
|
|
84
|
+
export type AnyJoinStep = JoinStep | CrossJoinStep;
|
package/dist/sort.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines a single sort instruction, specifying the column, sort order,
|
|
3
|
+
* and null handling strategy.
|
|
4
|
+
*/
|
|
5
|
+
export interface SortDirective {
|
|
6
|
+
/** The name of the column to sort by. */
|
|
7
|
+
column: string;
|
|
8
|
+
/**
|
|
9
|
+
* Whether to sort in descending order for this column.
|
|
10
|
+
* Defaults to false (ascending).
|
|
11
|
+
*/
|
|
12
|
+
descending?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Determines how null values are handled in the sort for this column.
|
|
15
|
+
* If true, nulls are placed last.
|
|
16
|
+
* If false, nulls are placed first.
|
|
17
|
+
* If undefined, the default Polars behavior is used (nulls are considered smallest,
|
|
18
|
+
* so they appear first in ascending sorts and last in descending sorts, unless platform defaults differ).
|
|
19
|
+
* This maps to Polars' `nulls_last` parameter.
|
|
20
|
+
*/
|
|
21
|
+
nullsLast?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Defines a step that sorts a table based on one or more column directives.
|
|
25
|
+
* The operation reads from an input table and writes the sorted result to an output table.
|
|
26
|
+
*/
|
|
27
|
+
export interface SortStep {
|
|
28
|
+
/** The type identifier for this step. Must be 'sort'. */
|
|
29
|
+
type: 'sort';
|
|
30
|
+
/** The name of the input table from the tablespace to be sorted. */
|
|
31
|
+
inputTable: string;
|
|
32
|
+
/** The name to be assigned to the newly created sorted table in the tablespace. */
|
|
33
|
+
outputTable: string;
|
|
34
|
+
/**
|
|
35
|
+
* An array of sort directives defining the columns and their respective sort orders.
|
|
36
|
+
* The table is sorted by the first directive in the array, then by the second
|
|
37
|
+
* for any ties, and so on.
|
|
38
|
+
*/
|
|
39
|
+
by: SortDirective[];
|
|
40
|
+
/**
|
|
41
|
+
* Optional. If true, maintains the stability of the sort. This means that if
|
|
42
|
+
* two rows are equivalent according to the sorting criteria, their relative order
|
|
43
|
+
* from the input table is preserved in the output.
|
|
44
|
+
* Corresponds to `maintain_order=True` in Polars `DataFrame.sort()`.
|
|
45
|
+
* Defaults to false.
|
|
46
|
+
*/
|
|
47
|
+
stable?: boolean;
|
|
48
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@platforma-open/milaboratories.software-ptabler.schema",
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Type definitions for PTabler",
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"./dist/**/*",
|
|
17
|
+
"./src/**/*"
|
|
18
|
+
],
|
|
19
|
+
"dependencies": {},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@platforma-sdk/eslint-config": "^1.0.3",
|
|
22
|
+
"vite-plugin-dts": "^4.5.4",
|
|
23
|
+
"eslint": "^9.27.0",
|
|
24
|
+
"typescript": "~5.5.4",
|
|
25
|
+
"vite": "^6.3.5"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"type-check": "tsc --noEmit --composite false",
|
|
29
|
+
"build": "vite build",
|
|
30
|
+
"lint": "eslint .",
|
|
31
|
+
"do-pack": "rm -f *.tgz && pnpm pack && mv *.tgz package.tgz"
|
|
32
|
+
}
|
|
33
|
+
}
|
package/src/aggregate.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Expression, AggregationType } from './expressions';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Defines standard aggregation functions that operate on a single expression.
|
|
5
|
+
*/
|
|
6
|
+
export type StandardAggregationType =
|
|
7
|
+
| 'sum'
|
|
8
|
+
| 'mean'
|
|
9
|
+
| 'median'
|
|
10
|
+
| 'min'
|
|
11
|
+
| 'max'
|
|
12
|
+
| 'std'
|
|
13
|
+
| 'var'
|
|
14
|
+
| 'count'
|
|
15
|
+
| 'first'
|
|
16
|
+
| 'last'
|
|
17
|
+
| 'n_unique';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Defines aggregation functions that select a value from one expression based on the min/max of another expression.
|
|
21
|
+
*/
|
|
22
|
+
export type ByClauseAggregationType =
|
|
23
|
+
| 'max_by'
|
|
24
|
+
| 'min_by';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Represents a standard aggregation operation like sum, mean, count, etc.
|
|
28
|
+
*/
|
|
29
|
+
export interface StandardAggregationOperation {
|
|
30
|
+
/** The name for the resulting column after aggregation. */
|
|
31
|
+
name: string;
|
|
32
|
+
/** The type of standard aggregation to perform. */
|
|
33
|
+
aggregation: AggregationType;
|
|
34
|
+
/**
|
|
35
|
+
* The primary expression to aggregate.
|
|
36
|
+
* For aggregations like 'sum', 'mean', 'min', 'max', this is the expression (e.g., a column) whose values are aggregated.
|
|
37
|
+
* For 'count', this expression might not be directly used by Polars if counting all rows, but can be used to count non-null values in a specific column.
|
|
38
|
+
* For 'first', 'last', 'n_unique', this is the expression on which the operation is performed.
|
|
39
|
+
*/
|
|
40
|
+
expression: Expression;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Represents an aggregation operation that selects a value from one expression
|
|
45
|
+
* based on the minimum or maximum value of another expression (the 'by_expression').
|
|
46
|
+
*/
|
|
47
|
+
export interface ByClauseAggregationOperation {
|
|
48
|
+
/** The name for the resulting column after aggregation. */
|
|
49
|
+
name: string;
|
|
50
|
+
/** The type of 'by-clause' aggregation to perform (e.g., 'max_by', 'min_by'). */
|
|
51
|
+
aggregation: ByClauseAggregationType;
|
|
52
|
+
/** The expression whose value is selected. */
|
|
53
|
+
expression: Expression;
|
|
54
|
+
/**
|
|
55
|
+
* The expression or list of expressions to order by to determine which value of `expression` is selected.
|
|
56
|
+
* If an array of expressions is provided, ordering is done sequentially by each expression.
|
|
57
|
+
*/
|
|
58
|
+
by: Expression[];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Represents the configuration for an 'aggregate' step in the workflow.
|
|
63
|
+
* This step performs aggregation operations on a table, optionally grouping by certain columns,
|
|
64
|
+
* and outputs a new table with the aggregated results.
|
|
65
|
+
*/
|
|
66
|
+
export interface AggregateStep {
|
|
67
|
+
/** Specifies the type of the step, which is 'aggregate'. */
|
|
68
|
+
type: 'aggregate';
|
|
69
|
+
/** The name of the input table from the tablespace on which to perform aggregation. */
|
|
70
|
+
inputTable: string;
|
|
71
|
+
/** The name to be assigned to the newly created aggregated table in the tablespace. */
|
|
72
|
+
outputTable: string;
|
|
73
|
+
/** An optional list of column names to group by before performing aggregations. */
|
|
74
|
+
groupBy: string[];
|
|
75
|
+
/** An array of aggregation operations to apply to the input table. */
|
|
76
|
+
aggregations: (StandardAggregationOperation | ByClauseAggregationOperation)[];
|
|
77
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { Expression } from './expressions';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Defines a step that adds one or more new columns to an existing table in the tablespace.
|
|
5
|
+
* This operation modifies the specified table in place.
|
|
6
|
+
*/
|
|
7
|
+
export interface AddColumnsStep {
|
|
8
|
+
/**
|
|
9
|
+
* The type identifier for this step.
|
|
10
|
+
* Must be 'add_columns'.
|
|
11
|
+
*/
|
|
12
|
+
type: 'add_columns';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The name of the target DataFrame in the tablespace to which columns will be added.
|
|
16
|
+
*/
|
|
17
|
+
table: string;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* An array defining the new columns to be added.
|
|
21
|
+
* Each object in the array specifies the name of a new column and the expression to compute its values.
|
|
22
|
+
*/
|
|
23
|
+
columns: {
|
|
24
|
+
/**
|
|
25
|
+
* The name of the new column.
|
|
26
|
+
*/
|
|
27
|
+
name: string;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* An Expression object defining how to compute the column's values.
|
|
31
|
+
* The expression will be evaluated for each row to generate the values for the new column.
|
|
32
|
+
*/
|
|
33
|
+
expression: Expression;
|
|
34
|
+
}[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Defines a step that filters rows in a table based on a specified condition
|
|
39
|
+
* and outputs the result to a new table in the tablespace.
|
|
40
|
+
*/
|
|
41
|
+
export interface FilterStep {
|
|
42
|
+
/**
|
|
43
|
+
* The type identifier for this step.
|
|
44
|
+
* Must be 'filter'.
|
|
45
|
+
*/
|
|
46
|
+
type: 'filter';
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The name of the input table in the tablespace from which rows will be filtered.
|
|
50
|
+
*/
|
|
51
|
+
inputTable: string;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The name for the resulting filtered table that will be added to the tablespace.
|
|
55
|
+
* This new table will contain only the rows that satisfy the condition.
|
|
56
|
+
*/
|
|
57
|
+
outputTable: string;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A boolean Expression object used as the filter condition.
|
|
61
|
+
* Rows for which this expression evaluates to true are kept in the outputTable.
|
|
62
|
+
* Rows for which it evaluates to false or null are excluded.
|
|
63
|
+
*/
|
|
64
|
+
condition: Expression;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Defines a step that selects a specific set of columns from an input table,
|
|
69
|
+
* potentially applying transformations or creating new columns, and outputs
|
|
70
|
+
* the result to a new table in the tablespace. This operation is similar
|
|
71
|
+
* to Polars' `select` method.
|
|
72
|
+
*/
|
|
73
|
+
export interface SelectStep {
|
|
74
|
+
/**
|
|
75
|
+
* The type identifier for this step.
|
|
76
|
+
* Must be 'select'.
|
|
77
|
+
*/
|
|
78
|
+
type: 'select';
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The name of the input table in the tablespace from which columns will be selected.
|
|
82
|
+
*/
|
|
83
|
+
inputTable: string;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The name for the resulting table that will be added to the tablespace.
|
|
87
|
+
* This new table will contain only the columns defined in the 'columns' array.
|
|
88
|
+
*/
|
|
89
|
+
outputTable: string;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* An array defining the columns for the output table.
|
|
93
|
+
* Each object in the array specifies the name of a column in the output table
|
|
94
|
+
* and the expression to compute its values.
|
|
95
|
+
*/
|
|
96
|
+
columns: {
|
|
97
|
+
/**
|
|
98
|
+
* The name of the column in the output table.
|
|
99
|
+
*/
|
|
100
|
+
name: string;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* An Expression object defining how to compute the column's values.
|
|
104
|
+
* This expression will be evaluated to generate the values for this column
|
|
105
|
+
* in the output table.
|
|
106
|
+
*/
|
|
107
|
+
expression: Expression;
|
|
108
|
+
}[];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Defines a step that adds new columns to an input table (or replaces existing ones
|
|
113
|
+
* if names collide) and outputs the result to a new table in the tablespace.
|
|
114
|
+
* This operation is similar to Polars' `with_columns` method.
|
|
115
|
+
*/
|
|
116
|
+
export interface WithColumnsStep {
|
|
117
|
+
/**
|
|
118
|
+
* The type identifier for this step.
|
|
119
|
+
* Must be 'with_columns'.
|
|
120
|
+
*/
|
|
121
|
+
type: 'with_columns';
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The name of the input table in the tablespace to which columns will be added.
|
|
125
|
+
*/
|
|
126
|
+
inputTable: string;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The name for the resulting table that will be added to the tablespace.
|
|
130
|
+
* This new table will contain all original columns from the inputTable,
|
|
131
|
+
* plus the new columns defined here (or with existing columns replaced by
|
|
132
|
+
* new ones if names match).
|
|
133
|
+
*/
|
|
134
|
+
outputTable: string;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* An array defining the new or replacement columns.
|
|
138
|
+
* Each object in the array specifies the name of a column and the
|
|
139
|
+
* expression to compute its values.
|
|
140
|
+
*/
|
|
141
|
+
columns: {
|
|
142
|
+
/**
|
|
143
|
+
* The name of the new or replacement column.
|
|
144
|
+
*/
|
|
145
|
+
name: string;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* An Expression object defining how to compute the column's values.
|
|
149
|
+
* The expression will be evaluated for each row to generate the values for the column.
|
|
150
|
+
*/
|
|
151
|
+
expression: Expression;
|
|
152
|
+
}[];
|
|
153
|
+
}
|
package/src/common.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines the supported Polars primitive data types for schema definition.
|
|
3
|
+
*
|
|
4
|
+
* The following are aliases for convenience:
|
|
5
|
+
* - 'Int': maps to 'Int32'
|
|
6
|
+
* - 'Long': maps to 'Int64'
|
|
7
|
+
* - 'Float': maps to 'Float32'
|
|
8
|
+
* - 'Double': maps to 'Float64'
|
|
9
|
+
*/
|
|
10
|
+
export type DataType =
|
|
11
|
+
| 'Int8'
|
|
12
|
+
| 'Int16'
|
|
13
|
+
| 'Int32'
|
|
14
|
+
| 'Int64'
|
|
15
|
+
| 'UInt8'
|
|
16
|
+
| 'UInt16'
|
|
17
|
+
| 'UInt32'
|
|
18
|
+
| 'UInt64'
|
|
19
|
+
| 'Float32'
|
|
20
|
+
| 'Float64'
|
|
21
|
+
| 'Boolean'
|
|
22
|
+
| 'String'
|
|
23
|
+
| 'Date'
|
|
24
|
+
| 'Datetime'
|
|
25
|
+
| 'Time'
|
|
26
|
+
// Aliases
|
|
27
|
+
| 'Int'
|
|
28
|
+
| 'Long'
|
|
29
|
+
| 'Float'
|
|
30
|
+
| 'Double';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines a step that vertically concatenates multiple tables from the tablespace
|
|
3
|
+
* into a single output table. Columns are matched by name.
|
|
4
|
+
*/
|
|
5
|
+
export interface ConcatenateStep {
|
|
6
|
+
/** The type identifier for this step. Must be 'concatenate'. */
|
|
7
|
+
type: 'concatenate';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* An array of input table names from the tablespace.
|
|
11
|
+
* The tables are concatenated vertically in the order they appear in this array.
|
|
12
|
+
*/
|
|
13
|
+
inputTables: string[];
|
|
14
|
+
|
|
15
|
+
/** The name to be assigned to the newly created concatenated table in the tablespace. */
|
|
16
|
+
outputTable: string;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Optional. A list of column names to select from all input tables.
|
|
20
|
+
* If omitted, all columns from all input tables are included, and columns are matched by name.
|
|
21
|
+
* If provided, only these specified columns will be included in the output table.
|
|
22
|
+
* All input tables must contain all specified columns for the operation to succeed.
|
|
23
|
+
*/
|
|
24
|
+
columns?: string[];
|
|
25
|
+
}
|