如果类型为日期时间,我们如何将 NULL 添加为雪花上接受空值的字段的值
How can we add NULL as a value for a field on snowflake that accepts null value if its type is datetime
我正在尝试将阶段中的一些数据加载到具有以下 DDL 的 table 中:
CREATE TABLE IF NOT EXISTS SAT_COUNTRY_PROGRAMME (
COUNTRY_PROGRAMME_SAT_HASH_KEY VARCHAR(32) NOT NULL,
LOAD_DT DATETIME NOT NULL,
LOAD_END_DT DATETIME NULL DEFAULT NULL,
RECORD_SRC VARCHAR(64) NOT NULL,
COUNTRY_NAME VARCHAR(64) NOT NULL,
COUNTRY_PROGRAMME_HASH_KEY VARCHAR(32) NOT NULL,
PRIMARY KEY (COUNTRY_PROGRAMME_SAT_HASH_KEY),
CONSTRAINT fk_SAT_COUNTRY_PROGRAMME_HUB_COUNTRY_PROGRAMME1
FOREIGN KEY (COUNTRY_PROGRAMME_HASH_KEY)
REFERENCES HUB_COUNTRY_PROGRAMME (COUNTRY_PROGRAMME_HASH_KEY)
ON DELETE CASCADE
ON UPDATE CASCADE)
;
如您所见,LOAD_END_DT
可能是 NULL
。
插入命令如下:
INSERT INTO SAT_COUNTRY_PROGRAMME
(SELECT md5(md5(t.)), current_timestamp(), NULL, 'PORTFOLIO', (replace(replace(t., t.), ' - ')), md5(t.)
FROM @INGEST_STAGE_TEMP/country_programmes.csv (file_format=>'GENERIC_CSV_FORMAT') t);
错误是:
NULL result in a non-nullable column
文件格式如下:
ALTER FILE FORMAT "DEV_DB_IYCF"."DATA_VAULT_INGEST".GENERIC_CSV_FORMAT
SET COMPRESSION = 'AUTO' FIELD_DELIMITER = ',' RECORD_DELIMITER = '\n'
SKIP_HEADER = 1 FIELD_OPTIONALLY_ENCLOSED_BY = 'NONE' TRIM_SPACE = TRUE
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE ESCAPE = 'NONE'
ESCAPE_UNENCLOSED_FIELD = '4' DATE_FORMAT = 'AUTO' TIMESTAMP_FORMAT = 'AUTO' NULL_IF = ('NULL');
我尝试使用 'NULL'
和 ''
但得到了同样的错误。
如错误消息所述,您正试图将 NULL 值插入到不可为 null 的列。因此,您需要检查前 4 列中的任何一列是否包含 NULL 值:
SELECT , , , from @INGEST_STAGE_TEMP/country_programmes.csv
(file_format=>'GENERIC_CSV_FORMAT')
where is null or is null or is null or is null ;
NULLIF 用于将 'NULL' 等特定字符串转换为 NULL 值。它不能帮助您避免“不可为空的列中出现 NULL 结果”。
我正在尝试将阶段中的一些数据加载到具有以下 DDL 的 table 中:
CREATE TABLE IF NOT EXISTS SAT_COUNTRY_PROGRAMME (
COUNTRY_PROGRAMME_SAT_HASH_KEY VARCHAR(32) NOT NULL,
LOAD_DT DATETIME NOT NULL,
LOAD_END_DT DATETIME NULL DEFAULT NULL,
RECORD_SRC VARCHAR(64) NOT NULL,
COUNTRY_NAME VARCHAR(64) NOT NULL,
COUNTRY_PROGRAMME_HASH_KEY VARCHAR(32) NOT NULL,
PRIMARY KEY (COUNTRY_PROGRAMME_SAT_HASH_KEY),
CONSTRAINT fk_SAT_COUNTRY_PROGRAMME_HUB_COUNTRY_PROGRAMME1
FOREIGN KEY (COUNTRY_PROGRAMME_HASH_KEY)
REFERENCES HUB_COUNTRY_PROGRAMME (COUNTRY_PROGRAMME_HASH_KEY)
ON DELETE CASCADE
ON UPDATE CASCADE)
;
如您所见,LOAD_END_DT
可能是 NULL
。
插入命令如下:
INSERT INTO SAT_COUNTRY_PROGRAMME
(SELECT md5(md5(t.)), current_timestamp(), NULL, 'PORTFOLIO', (replace(replace(t., t.), ' - ')), md5(t.)
FROM @INGEST_STAGE_TEMP/country_programmes.csv (file_format=>'GENERIC_CSV_FORMAT') t);
错误是:
NULL result in a non-nullable column
文件格式如下:
ALTER FILE FORMAT "DEV_DB_IYCF"."DATA_VAULT_INGEST".GENERIC_CSV_FORMAT
SET COMPRESSION = 'AUTO' FIELD_DELIMITER = ',' RECORD_DELIMITER = '\n'
SKIP_HEADER = 1 FIELD_OPTIONALLY_ENCLOSED_BY = 'NONE' TRIM_SPACE = TRUE
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE ESCAPE = 'NONE'
ESCAPE_UNENCLOSED_FIELD = '4' DATE_FORMAT = 'AUTO' TIMESTAMP_FORMAT = 'AUTO' NULL_IF = ('NULL');
我尝试使用 'NULL'
和 ''
但得到了同样的错误。
如错误消息所述,您正试图将 NULL 值插入到不可为 null 的列。因此,您需要检查前 4 列中的任何一列是否包含 NULL 值:
SELECT , , , from @INGEST_STAGE_TEMP/country_programmes.csv
(file_format=>'GENERIC_CSV_FORMAT')
where is null or is null or is null or is null ;
NULLIF 用于将 'NULL' 等特定字符串转换为 NULL 值。它不能帮助您避免“不可为空的列中出现 NULL 结果”。