snowflake-cloud-data-platform - 雪花唯一列允许重复条目
问题描述
我有一个像这样的简单表:
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 |
+-------------------------------+-------------------------+
解决方案
我认为标题具有误导性。如果您使用的是 Snowflake(根据屏幕截图和您选择的标签),请注意 Snowflake 不强制执行主键:
Snowflake 支持定义和维护约束,但不强制执行它们,除了始终强制执行的 NOT NULL 约束。
https://docs.snowflake.com/en/sql-reference/constraints-overview.html#supported-constraint-types
推荐阅读
- android - 在“io.card:android-sdk:5.5.1”的 DataEntryActivity 类中未获取到期日期
- linux - 使用 zgrep 时出现“没有这样的文件或目录”错误
- jmeter - 在 jmeter 中禁用打开最近选项
- javascript - 我可以在 .save 中更改集合名称吗?
- c# - 需要在两个不同的类中添加相同的属性
- angular - 以角度 6 打印嵌套的 ng-template
- javascript - 如何在不使用 for 循环的对象数组中搜索 ID?
- angularjs - 如何在 AngularJS 中使用嵌套循环
- excel - 使用 Union 将多个范围复制到 Word 文档,范围之间没有空白单元格
- blueprism - BluePrism.BPCoreLib.InvalidValueException:未定义服务器配置“默认”