0

当我使用 !spool 命令时,目标文件会附加结果。例子:

$ touch current.spool
$ cat curr_ts.sql
!spool current.spool
select CURRENT_TIMESTAMP;

$ snowsql -f  curr_ts.sql  <--- 1st execution of the script
* SnowSQL * v1.1.86
Type SQL statements or !help
+-------------------------------+
| CURRENT_TIMESTAMP             |
|-------------------------------|
| 2020-04-21 13:35:59.983 -0400 |
+-------------------------------+
1 Row(s) produced. Time Elapsed: 0.096s
Goodbye!

$ cat current.spool
+-------------------------------+
| CURRENT_TIMESTAMP             |
|-------------------------------|
| 2020-04-21 13:35:59.983 -0400 |
+-------------------------------+

$ snowsql -f  curr_ts.sql  <--- 2nd (supposedly independent) execution of the script
* SnowSQL * v1.1.86
Type SQL statements or !help
+-------------------------------+
| CURRENT_TIMESTAMP             |
|-------------------------------|
| 2020-04-21 13:36:17.629 -0400 |
+-------------------------------+
1 Row(s) produced. Time Elapsed: 0.098s
Goodbye!
[1019] bjs13b@igloo:/home/bjs13b/snowsql $ cat current.spool
+-------------------------------+
| CURRENT_TIMESTAMP             |
|-------------------------------|
| 2020-04-21 13:35:59.983 -0400 |
+-------------------------------+
+-------------------------------+
| CURRENT_TIMESTAMP             |   <--- file NOT replaced by 2nd execution!
|-------------------------------|
| 2020-04-21 13:36:17.629 -0400 |
+-------------------------------+

[编辑希望能澄清问题]

如果每次执行都应该创建一个每小时文件,那么每次执行都会将数据添加到每小时文件中......对于每小时数据集来说就是如此。

我知道很多解决方法,但这是关于假脱机的具体问题。我更喜欢改变 spool 命令行为的选项。在其他系统中,我习惯了文件被覆盖,这一直在咬我!

4

1 回答 1

1

dtrace/strace 确认假脱机功能标志始终O_APPEND模式打开文件,从而导致您正在观察的行为。截至本文发布之日,此行为没有记录在案的覆盖。

~> cat test.sql
!spool filename.txt
SELECT 1;

~> dtruss snowsql -f test.sql
…
open("filename.txt\0", 0x1000209, 0x1B6)
                       ^^^^^^^^^
         (Flags include O_CREAT and O_APPEND)
…

~> dtruss snowsql -f test.sql
…
open("filename.txt\0", 0x1000209, 0x1B6)
…

SnowSQL作为 Snowflake DB 的自定义客户端,不遵循特定的标准行为(例如 Snowflake DB 的一些其他连接器所做的 - JDBC、ODBC、SQL Alchemy (Python) 等)。然而,关于将其与 Oracle 的 SQL*Plus 特性进行比较的评论,请求类似特性是有意义的。如果您有 Snowflake 的支持帐户,我建议您提出功能请求。

于 2020-05-07T09:11:43.933 回答