Snowflake Unique column允许重复输入

问题描述 投票:0回答:2

我有一个像这样的简单表:

    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)和完成时间。是什么原因造成的?实际数据中不存在空格。

Screenshot of actual data.

+-------------------------------+-------------------------+
|        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 |
+-------------------------------+-------------------------+
snowflake-cloud-data-platform uniqueidentifier
2个回答
4
投票

雪花支持定义和维护约束,但不支持强制执行它们,但NOT NULL约束除外强制执行。

https://docs.snowflake.com/en/sql-reference/constraints-overview.html#supported-constraint-types

0
投票
CREATE OR REPLACE table ETL_LOG_DEDUP as select distinct * from ETL_LOG;

我将其放在一个任务中,该任务将仅从原始任务中检索未重复的行。也许并不理想,但是它将满足我的需要。我创建了第三个任务,它每周只对主表进行一次截断。

仅出于上下文考虑,我们每天有大约3k个任务在运行,而数据管道上还有其他几个监视解决方案。由于Snowflake的本机日志记录功能的局限性,我只是想要一个非常清晰高效的日志。由于它仅包含有限时间的任务历史记录。
© www.soinside.com 2019 - 2024. All rights reserved.