我有一个像这样的简单表:
CREATE OR REPLACE TABLE ETL_LOG (
NAME VARCHAR(1000) NOT NULL,
SCHEMA_NAME VARCHAR(1000) NOT NULL,
QUERY_TEXT VARCHAR(50000) NOT NULL,
STATE VARCHAR(1000) NOT NULL,
ERROR_CODE VARCHAR(1000) NULL,
ERROR_MESSAGE VARCHAR(500000) NULL,
SCHEDULED_TIME TIMESTAMP_LTZ(3) NOT NULL,
NEXTS_SCHEDULED_TIME TIMESTAMP_LTZ(3) NULL,
COMPLETED_TIME TIMESTAMP_LTZ(3) NOT NULL,
RUN_ID VARCHAR(5000) NOT NULL,
UNIQUE(RUN_ID)
);
当我插入数据时,尽管运行独特,但仍会得到类似的内容。不知道为什么会这样。我只在此处显示了唯一值(RUN_ID)和完成时间。是什么原因造成的?实际数据中不存在空格。
+-------------------------------+-------------------------+
| COMPLETED_TIME | RUN_ID |
+-------------------------------+-------------------------+
| 2020-04-30 01:05:30.034 -0700 | 1588233900020 |
| 2020-04-30 01:05:30.034 -0700 | 1588233900020 |
| 2020-04-30 01:06:17.659 -0700 | 1588233960000 |
| 2020-04-30 01:06:17.659 -0700 | 1588233960000 |
+-------------------------------+-------------------------+
雪花支持定义和维护约束,但不支持强制执行它们,但NOT NULL约束除外强制执行。
https://docs.snowflake.com/en/sql-reference/constraints-overview.html#supported-constraint-types
CREATE OR REPLACE table ETL_LOG_DEDUP as select distinct * from ETL_LOG;
我将其放在一个任务中,该任务将仅从原始任务中检索未重复的行。也许并不理想,但是它将满足我的需要。我创建了第三个任务,它每周只对主表进行一次截断。
仅出于上下文考虑,我们每天有大约3k个任务在运行,而数据管道上还有其他几个监视解决方案。由于Snowflake的本机日志记录功能的局限性,我只是想要一个非常清晰高效的日志。由于它仅包含有限时间的任务历史记录。