Vertica 复制语句 - 具有多个空字符串的空参数
Vertica Copy Statement - Null Parameter with Multiple Null Strings
我正在尝试将竖线分隔的文本文件导入 Vertica 中的 table。 NULL在文本文件中的字符串表示是“[NULL]”。但是,该文件的问题是许多带有 NULL 的字段也有尾随空格。
看起来当然不可能,但是有什么方法可以将正则表达式传递给 null 参数吗?
除了一堆 post COPY 更新之外还有其他想法吗?
在 COPY 语句中使用转换,如在这种情况下:
DROP TABLE IF EXISTS foo;
CREATE TABLE foo (
id INT
, nam VARCHAR(32)
, dob DATE
)
;
COPY foo (
id
, nam_in FILLER VARCHAR
, nam AS CASE WHEN TRIM(nam_in) <> '[NULL]' THEN nam_in END
, dob_in FILLER VARCHAR
, dob AS CASE WHEN TRIM(dob_in) <> '[NULL]' THEN dob_in::DATE END
)
FROM STDIN DELIMITER '|' ;
42|Arthur Dent |[NULL]
43|Ford Prefect |1957-04-01
44|[NULL] |2021-01-01
\.
\pset null (null)
SELECT * FROM foo;
-- out Null display is "(null)".
-- out id | nam | dob
-- out ----+---------------+------------
-- out 42 | Arthur Dent | (null)
-- out 43 | Ford Prefect | 1957-04-01
-- out 44 | (null) | 2021-01-01
您可以使用 STDIN 从脚本内联导入,但您也可以使用文件进行此练习...
我正在尝试将竖线分隔的文本文件导入 Vertica 中的 table。 NULL在文本文件中的字符串表示是“[NULL]”。但是,该文件的问题是许多带有 NULL 的字段也有尾随空格。
看起来当然不可能,但是有什么方法可以将正则表达式传递给 null 参数吗?
除了一堆 post COPY 更新之外还有其他想法吗?
在 COPY 语句中使用转换,如在这种情况下:
DROP TABLE IF EXISTS foo;
CREATE TABLE foo (
id INT
, nam VARCHAR(32)
, dob DATE
)
;
COPY foo (
id
, nam_in FILLER VARCHAR
, nam AS CASE WHEN TRIM(nam_in) <> '[NULL]' THEN nam_in END
, dob_in FILLER VARCHAR
, dob AS CASE WHEN TRIM(dob_in) <> '[NULL]' THEN dob_in::DATE END
)
FROM STDIN DELIMITER '|' ;
42|Arthur Dent |[NULL]
43|Ford Prefect |1957-04-01
44|[NULL] |2021-01-01
\.
\pset null (null)
SELECT * FROM foo;
-- out Null display is "(null)".
-- out id | nam | dob
-- out ----+---------------+------------
-- out 42 | Arthur Dent | (null)
-- out 43 | Ford Prefect | 1957-04-01
-- out 44 | (null) | 2021-01-01
您可以使用 STDIN 从脚本内联导入,但您也可以使用文件进行此练习...