Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSV中引用的雪花空值会中断PostgreSQL卸载_Postgresql_Csv_Snowflake Cloud Data Platform_Postgresql 10 - Fatal编程技术网

CSV中引用的雪花空值会中断PostgreSQL卸载

CSV中引用的雪花空值会中断PostgreSQL卸载,postgresql,csv,snowflake-cloud-data-platform,postgresql-10,Postgresql,Csv,Snowflake Cloud Data Platform,Postgresql 10,我试图将数据从Snowflake转换为Postgresql,为此,我首先将其以CSV格式加载到s3中。在表格中,文本中可能会出现comas,因此我可以使用字段\u(可选)用雪花卸载选项括起来\u来引用有问题单元格的内容。但是,当这种情况发生时+空值,我无法为PostgreSQL创建有效的CSV 我创建了一个简单的表格,让您了解这个问题。这是: CREATE OR REPLACE TABLE PUBLIC.TEST( TEXT_FIELD VARCHAR(), NUMERIC_FI

我试图将数据从Snowflake转换为Postgresql,为此,我首先将其以CSV格式加载到s3中。在表格中,文本中可能会出现comas,因此我可以使用
字段\u(可选)用
雪花卸载选项括起来\u来引用有问题单元格的内容。但是,当这种情况发生时+空值,我无法为PostgreSQL创建有效的CSV
我创建了一个简单的表格,让您了解这个问题。这是:

CREATE OR REPLACE TABLE PUBLIC.TEST(
    TEXT_FIELD VARCHAR(),
    NUMERIC_FIELD INT
);
INSERT INTO PUBLIC.TEST VALUES
    ('A', 1),
    (NULL, 2),
    ('B', NULL),
    (NULL, NULL),
    ('Hello, world', NULL)
;
COPY INTO @STAGE/test
FROM PUBLIC.TEST
FILE_FORMAT = (
    COMPRESSION = NONE,
    TYPE = CSV,
    FIELD_OPTIONALLY_ENCLOSED_BY = '"'
    NULL_IF = ''
)
OVERWRITE = TRUE;
雪花将从中创建以下CSV

"A",1
"",2
"B",""
"",""
"Hello, world",""
但在那之后,我不可能将此CSV复制到PostgreSQL表中。
甚至从PostgreSQL文档中可以看出,我们有一个next to NULL选项:

Specifies the string that represents a null value. The default is \N (backslash-N) in text format, and an unquoted empty string in CSV format.
未在PostgreSQL复制到中设置复制选项将导致卸载失败。事实上,它不会工作,因为我们还必须使用quote指定所使用的quote。这里是
QUOTE'

因此,在POSTGRESQL卸载过程中,使用:
格式化csv,标题为false,引用“”
将给出:

DataError: invalid input syntax for integer: "" CONTEXT:  COPY test, line 3, column numeric_field: ""
NotSupportedError: CSV quote character must not appear in the NULL specification
FORMAT csv,HEADER false,NULL'”,QUOTE'”
将给出:

DataError: invalid input syntax for integer: "" CONTEXT:  COPY test, line 3, column numeric_field: ""
NotSupportedError: CSV quote character must not appear in the NULL specification
仅供参考,为了在s3中测试卸载,我将在PostgreSQL中使用以下命令:

CREATE IF NOT EXISTS TABLE PUBLIC.TEST(
  TEXT_FIELD VARCHAR(),
  NUMERIC_FIELD INT
);
CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE;
SELECT aws_s3.table_import_from_s3(
'PUBLIC.TEST',
'',
'(FORMAT csv, HEADER false, NULL ''""'', QUOTE ''"'')',
'bucket',
'test_0_0_0.csv',
'aws_region'
)

非常感谢你提出我能做些什么来实现它的想法。我很想找到一个不需要修改snowflake和postgres之间的csv的解决方案。我认为这是一个更多关于snowflake方面的问题,因为引用null值没有真正意义。但是PostgreSQL也没有帮助。

当你设置
null\u IF
值转换为“”,实际上是告诉Snowflake将空值转换为空值,然后将其引用。从Snowflake中复制时,复制选项在某种意义上是“向后”的,如果
更像
IFNULL
,则
NULL\u

这是我在雪花方面使用的代码,它将在CSV文件中产生一个不带引号的空字符串:

FILE_FORMAT = (
    COMPRESSION = NONE,
    TYPE = CSV,
    FIELD_OPTIONALLY_ENCLOSED_BY = '"'
    NULL_IF = ()
)

非常感谢,这正是我想要的:)