@malloydata/db-snowflake 0.0.127-dev240308180053 → 0.0.127
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 +1 -1
- package/dist/snowflake_connection.js +11 -39
- package/dist/snowflake_connection.js.map +1 -1
- package/dist/snowflake_executor.js +2 -6
- package/dist/snowflake_executor.js.map +1 -1
- package/package.json +2 -2
- package/src/snowflake_connection.ts +11 -41
- package/src/snowflake_executor.ts +5 -6
|
@@ -28,7 +28,7 @@ export declare class SnowflakeConnection implements Connection, PersistSQLResult
|
|
|
28
28
|
canStream(): this is StreamingConnection;
|
|
29
29
|
estimateQueryCost(_sqlCommand: string): Promise<QueryRunStats>;
|
|
30
30
|
close(): Promise<void>;
|
|
31
|
-
private
|
|
31
|
+
private getTempViewName;
|
|
32
32
|
runSQL(sql: string, options?: RunSQLOptions): Promise<MalloyQueryData>;
|
|
33
33
|
runSQLStream(sqlCommand: string, options?: RunSQLOptions): AsyncIterableIterator<QueryDataRow>;
|
|
34
34
|
test(): Promise<void>;
|
|
@@ -87,13 +87,9 @@ class SnowflakeConnection {
|
|
|
87
87
|
async close() {
|
|
88
88
|
await this.executor.done();
|
|
89
89
|
}
|
|
90
|
-
|
|
90
|
+
getTempViewName(sqlCommand) {
|
|
91
91
|
const hash = crypto.createHash('md5').update(sqlCommand).digest('hex');
|
|
92
|
-
|
|
93
|
-
if (this.scratchSpace) {
|
|
94
|
-
tableName = `${this.scratchSpace.database}.${this.scratchSpace.schema}.${tableName}`;
|
|
95
|
-
}
|
|
96
|
-
return tableName;
|
|
92
|
+
return `tt${hash}`;
|
|
97
93
|
}
|
|
98
94
|
async runSQL(sql, options) {
|
|
99
95
|
var _a, _b;
|
|
@@ -119,10 +115,12 @@ class SnowflakeConnection {
|
|
|
119
115
|
async schemaFromQuery(infoQuery, structDef) {
|
|
120
116
|
const rows = await this.executor.batch(infoQuery);
|
|
121
117
|
for (const row of rows) {
|
|
122
|
-
|
|
118
|
+
// data types look like `VARCHAR(1234)`
|
|
119
|
+
let snowflakeDataType = row['type'];
|
|
120
|
+
snowflakeDataType = snowflakeDataType.toLocaleLowerCase().split('(')[0];
|
|
123
121
|
const s = structDef;
|
|
124
122
|
const malloyType = this.dialect.sqlTypeToMalloyType(snowflakeDataType);
|
|
125
|
-
const name = row['
|
|
123
|
+
const name = row['name'];
|
|
126
124
|
if (malloyType) {
|
|
127
125
|
s.fields.push({ ...malloyType, name });
|
|
128
126
|
}
|
|
@@ -136,13 +134,6 @@ class SnowflakeConnection {
|
|
|
136
134
|
}
|
|
137
135
|
}
|
|
138
136
|
async getTableSchema(tableKey, tablePath) {
|
|
139
|
-
// looks like snowflake:schemaName.tableName
|
|
140
|
-
tableKey = tableKey.toLowerCase();
|
|
141
|
-
let [schema, tableName] = ['', tablePath];
|
|
142
|
-
const schema_and_table = tablePath.split('.');
|
|
143
|
-
if (schema_and_table.length === 2) {
|
|
144
|
-
[schema, tableName] = schema_and_table;
|
|
145
|
-
}
|
|
146
137
|
const structDef = {
|
|
147
138
|
type: 'struct',
|
|
148
139
|
dialect: 'snowflake',
|
|
@@ -164,16 +155,7 @@ class SnowflakeConnection {
|
|
|
164
155
|
// WHERE lower(TYPEOF(value)) <> 'array'
|
|
165
156
|
// GROUP BY 1,2
|
|
166
157
|
// ORDER BY PATH
|
|
167
|
-
const infoQuery = `
|
|
168
|
-
SELECT
|
|
169
|
-
column_name, -- LOWER(COLUMN_NAME) AS column_name,
|
|
170
|
-
LOWER(DATA_TYPE) as data_type
|
|
171
|
-
FROM
|
|
172
|
-
INFORMATION_SCHEMA.COLUMNS
|
|
173
|
-
WHERE
|
|
174
|
-
table_schema = UPPER('${schema}')
|
|
175
|
-
AND table_name = UPPER('${tableName}');
|
|
176
|
-
`;
|
|
158
|
+
const infoQuery = `DESCRIBE TABLE ${tablePath}`;
|
|
177
159
|
await this.schemaFromQuery(infoQuery, structDef);
|
|
178
160
|
return structDef;
|
|
179
161
|
}
|
|
@@ -223,21 +205,11 @@ class SnowflakeConnection {
|
|
|
223
205
|
fields: [],
|
|
224
206
|
};
|
|
225
207
|
// create temp table with same schema as the query
|
|
226
|
-
const tempTableName = this.
|
|
208
|
+
const tempTableName = this.getTempViewName(sqlRef.selectStr);
|
|
227
209
|
this.runSQL(`
|
|
228
|
-
CREATE OR REPLACE TEMP
|
|
229
|
-
${sqlRef.selectStr}
|
|
230
|
-
) as x WHERE false;
|
|
210
|
+
CREATE OR REPLACE TEMP VIEW ${tempTableName} as ${sqlRef.selectStr};
|
|
231
211
|
`);
|
|
232
|
-
const infoQuery = `
|
|
233
|
-
SELECT
|
|
234
|
-
column_name, -- LOWER(column_name) as column_name,
|
|
235
|
-
LOWER(data_type) as data_type
|
|
236
|
-
FROM
|
|
237
|
-
INFORMATION_SCHEMA.COLUMNS
|
|
238
|
-
WHERE
|
|
239
|
-
table_name = UPPER('${tempTableName}');
|
|
240
|
-
`;
|
|
212
|
+
const infoQuery = `DESCRIBE TABLE ${tempTableName}`;
|
|
241
213
|
await this.schemaFromQuery(infoQuery, structDef);
|
|
242
214
|
return structDef;
|
|
243
215
|
}
|
|
@@ -261,7 +233,7 @@ class SnowflakeConnection {
|
|
|
261
233
|
return inCache;
|
|
262
234
|
}
|
|
263
235
|
async manifestTemporaryTable(sqlCommand) {
|
|
264
|
-
const tableName = this.
|
|
236
|
+
const tableName = this.getTempViewName(sqlCommand);
|
|
265
237
|
const cmd = `CREATE OR REPLACE TEMP TABLE ${tableName} AS (${sqlCommand});`;
|
|
266
238
|
await this.runSQL(cmd);
|
|
267
239
|
return tableName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake_connection.js","sourceRoot":"","sources":["../src/snowflake_connection.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,+CAAiC;AACjC,+CAa4B;AAC5B,6DAAuD;AAwBvD,MAAa,mBAAmB;IA4B9B,YACkB,IAAY,EAC5B,OAAoC;;QADpB,SAAI,GAAJ,IAAI,CAAQ;QAtBb,YAAO,GAAG,IAAI,yBAAgB,EAAE,CAAC;QAE1C,gBAAW,GAAG,IAAI,GAAG,EAI1B,CAAC;QACI,mBAAc,GAAG,IAAI,GAAG,EAQ7B,CAAC;QAUF,IAAI,WAAW,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAC;QACvC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,mEAAmE;YACnE,WAAW,GAAG,sCAAiB,CAAC,4BAA4B,EAAE,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,sCAAiB,CAAC,WAAW,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,mCAAI,EAAE,CAAC;IAClD,CAAC;IAED,IAAI,WAAW;QACb,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,qCAAqC;IACrC,IAAW,eAAe;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEO,
|
|
1
|
+
{"version":3,"file":"snowflake_connection.js","sourceRoot":"","sources":["../src/snowflake_connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -143,16 +143,12 @@ class SnowflakeExecutor {
|
|
|
143
143
|
}
|
|
144
144
|
async _setSessionParams(conn) {
|
|
145
145
|
// set some default session parameters
|
|
146
|
-
// this is quite imporant for snowflake because malloy tends to add quotes to all database identifiers
|
|
147
|
-
// and snowflake is case sensitive by with quotes but matches against all caps identifiers without quotes
|
|
148
|
-
// await this._execute(
|
|
149
|
-
// 'ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = true;',
|
|
150
|
-
// conn
|
|
151
|
-
// );
|
|
152
146
|
// set utc as the default timezone which is the malloy convention
|
|
153
147
|
await this._execute("ALTER SESSION SET TIMEZONE = 'UTC';", conn);
|
|
154
148
|
// ensure week starts on Sunday which is the malloy convention
|
|
155
149
|
await this._execute('ALTER SESSION SET WEEK_START = 7;', conn);
|
|
150
|
+
// so javascript can parse the dates
|
|
151
|
+
await this._execute("ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT='YYYY-MM-DDTHH24:MI:SS.FF3TZH:TZM';", conn);
|
|
156
152
|
}
|
|
157
153
|
async batch(sqlText) {
|
|
158
154
|
return await this.pool_.use(async (conn) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake_executor.js","sourceRoot":"","sources":["../src/snowflake_executor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"snowflake_executor.js","sourceRoot":"","sources":["../src/snowflake_executor.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.127
|
|
3
|
+
"version": "0.0.127",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"prepublishOnly": "npm run build"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@malloydata/malloy": "^0.0.127
|
|
24
|
+
"@malloydata/malloy": "^0.0.127",
|
|
25
25
|
"@types/snowflake-sdk": "^1.6.16",
|
|
26
26
|
"generic-pool": "^3.9.0",
|
|
27
27
|
"snowflake-sdk": "^1.9.0",
|
|
@@ -131,13 +131,9 @@ export class SnowflakeConnection
|
|
|
131
131
|
await this.executor.done();
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
private
|
|
134
|
+
private getTempViewName(sqlCommand: string): string {
|
|
135
135
|
const hash = crypto.createHash('md5').update(sqlCommand).digest('hex');
|
|
136
|
-
|
|
137
|
-
if (this.scratchSpace) {
|
|
138
|
-
tableName = `${this.scratchSpace.database}.${this.scratchSpace.schema}.${tableName}`;
|
|
139
|
-
}
|
|
140
|
-
return tableName;
|
|
136
|
+
return `tt${hash}`;
|
|
141
137
|
}
|
|
142
138
|
|
|
143
139
|
public async runSQL(
|
|
@@ -179,10 +175,12 @@ export class SnowflakeConnection
|
|
|
179
175
|
): Promise<void> {
|
|
180
176
|
const rows = await this.executor.batch(infoQuery);
|
|
181
177
|
for (const row of rows) {
|
|
182
|
-
|
|
178
|
+
// data types look like `VARCHAR(1234)`
|
|
179
|
+
let snowflakeDataType = row['type'] as string;
|
|
180
|
+
snowflakeDataType = snowflakeDataType.toLocaleLowerCase().split('(')[0];
|
|
183
181
|
const s = structDef;
|
|
184
182
|
const malloyType = this.dialect.sqlTypeToMalloyType(snowflakeDataType);
|
|
185
|
-
const name = row['
|
|
183
|
+
const name = row['name'] as string;
|
|
186
184
|
if (malloyType) {
|
|
187
185
|
s.fields.push({...malloyType, name});
|
|
188
186
|
} else {
|
|
@@ -199,15 +197,6 @@ export class SnowflakeConnection
|
|
|
199
197
|
tableKey: string,
|
|
200
198
|
tablePath: string
|
|
201
199
|
): Promise<StructDef> {
|
|
202
|
-
// looks like snowflake:schemaName.tableName
|
|
203
|
-
tableKey = tableKey.toLowerCase();
|
|
204
|
-
|
|
205
|
-
let [schema, tableName] = ['', tablePath];
|
|
206
|
-
const schema_and_table = tablePath.split('.');
|
|
207
|
-
if (schema_and_table.length === 2) {
|
|
208
|
-
[schema, tableName] = schema_and_table;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
200
|
const structDef: StructDef = {
|
|
212
201
|
type: 'struct',
|
|
213
202
|
dialect: 'snowflake',
|
|
@@ -231,16 +220,7 @@ export class SnowflakeConnection
|
|
|
231
220
|
// GROUP BY 1,2
|
|
232
221
|
// ORDER BY PATH
|
|
233
222
|
|
|
234
|
-
const infoQuery = `
|
|
235
|
-
SELECT
|
|
236
|
-
column_name, -- LOWER(COLUMN_NAME) AS column_name,
|
|
237
|
-
LOWER(DATA_TYPE) as data_type
|
|
238
|
-
FROM
|
|
239
|
-
INFORMATION_SCHEMA.COLUMNS
|
|
240
|
-
WHERE
|
|
241
|
-
table_schema = UPPER('${schema}')
|
|
242
|
-
AND table_name = UPPER('${tableName}');
|
|
243
|
-
`;
|
|
223
|
+
const infoQuery = `DESCRIBE TABLE ${tablePath}`;
|
|
244
224
|
|
|
245
225
|
await this.schemaFromQuery(infoQuery, structDef);
|
|
246
226
|
return structDef;
|
|
@@ -301,24 +281,14 @@ export class SnowflakeConnection
|
|
|
301
281
|
};
|
|
302
282
|
|
|
303
283
|
// create temp table with same schema as the query
|
|
304
|
-
const tempTableName = this.
|
|
284
|
+
const tempTableName = this.getTempViewName(sqlRef.selectStr);
|
|
305
285
|
this.runSQL(
|
|
306
286
|
`
|
|
307
|
-
CREATE OR REPLACE TEMP
|
|
308
|
-
${sqlRef.selectStr}
|
|
309
|
-
) as x WHERE false;
|
|
287
|
+
CREATE OR REPLACE TEMP VIEW ${tempTableName} as ${sqlRef.selectStr};
|
|
310
288
|
`
|
|
311
289
|
);
|
|
312
290
|
|
|
313
|
-
const infoQuery = `
|
|
314
|
-
SELECT
|
|
315
|
-
column_name, -- LOWER(column_name) as column_name,
|
|
316
|
-
LOWER(data_type) as data_type
|
|
317
|
-
FROM
|
|
318
|
-
INFORMATION_SCHEMA.COLUMNS
|
|
319
|
-
WHERE
|
|
320
|
-
table_name = UPPER('${tempTableName}');
|
|
321
|
-
`;
|
|
291
|
+
const infoQuery = `DESCRIBE TABLE ${tempTableName}`;
|
|
322
292
|
await this.schemaFromQuery(infoQuery, structDef);
|
|
323
293
|
return structDef;
|
|
324
294
|
}
|
|
@@ -351,7 +321,7 @@ export class SnowflakeConnection
|
|
|
351
321
|
}
|
|
352
322
|
|
|
353
323
|
public async manifestTemporaryTable(sqlCommand: string): Promise<string> {
|
|
354
|
-
const tableName = this.
|
|
324
|
+
const tableName = this.getTempViewName(sqlCommand);
|
|
355
325
|
const cmd = `CREATE OR REPLACE TEMP TABLE ${tableName} AS (${sqlCommand});`;
|
|
356
326
|
await this.runSQL(cmd);
|
|
357
327
|
return tableName;
|
|
@@ -170,16 +170,15 @@ export class SnowflakeExecutor {
|
|
|
170
170
|
|
|
171
171
|
private async _setSessionParams(conn: Connection) {
|
|
172
172
|
// set some default session parameters
|
|
173
|
-
// this is quite imporant for snowflake because malloy tends to add quotes to all database identifiers
|
|
174
|
-
// and snowflake is case sensitive by with quotes but matches against all caps identifiers without quotes
|
|
175
|
-
// await this._execute(
|
|
176
|
-
// 'ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = true;',
|
|
177
|
-
// conn
|
|
178
|
-
// );
|
|
179
173
|
// set utc as the default timezone which is the malloy convention
|
|
180
174
|
await this._execute("ALTER SESSION SET TIMEZONE = 'UTC';", conn);
|
|
181
175
|
// ensure week starts on Sunday which is the malloy convention
|
|
182
176
|
await this._execute('ALTER SESSION SET WEEK_START = 7;', conn);
|
|
177
|
+
// so javascript can parse the dates
|
|
178
|
+
await this._execute(
|
|
179
|
+
"ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT='YYYY-MM-DDTHH24:MI:SS.FF3TZH:TZM';",
|
|
180
|
+
conn
|
|
181
|
+
);
|
|
183
182
|
}
|
|
184
183
|
|
|
185
184
|
public async batch(sqlText: string): Promise<QueryData> {
|