Снежинка Уникальный столбец, позволяющий дублировать записи - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть простая таблица, подобная этой:

    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 |
+-------------------------------+-------------------------+

Ответы [ 2 ]

4 голосов
/ 30 апреля 2020

Я думаю, что название вводит в заблуждение. Если вы используете Snowflake (согласно скриншоту и выбранному вами тегу), обратите внимание, что Snowflake не применяет первичные ключи:

Snowflake поддерживает определение и поддержание ограничений, но не применяет их, кроме для ограничений NOT NULL, которые всегда применяются.

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

0 голосов
/ 01 мая 2020

Из-за ограничений, указанных выше, я закончил создание этой работы.

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

Я поставил это в задачу, которая будет просто извлекать не дублированные строки из оригинала. Может быть, не идеал, но он будет делать то, что мне нужно. Я создал третью задачу, которая просто усекает основную таблицу раз в неделю.

Просто для контекста у нас есть что-то вроде ~ 3k задач, выполняемых ежедневно, и несколько других решений для мониторинга вдоль конвейера данных. Я просто хотел получить очень четкий и эффективный журнал из-за ограничений встроенной функции ведения журнала в Snowflake. Поскольку он содержит историю задач только в течение ограниченного времени.

...