从雪花中卸载 CSV,其中只有非空值用引号括起来



我正在尝试从 Snowflake 卸载一个 CSV 文件,其中只有非空值被引号括在双引号中。

这是我的桌子

|BizName        |BizOwner      |
|----------+-------------------|
| "NiceOne" LLC | Robert       |
| GoodRX        |              |
| MaxLift       | Brian        |
| P,N and B     | Jane         |
+----------+--------------------

这是我想要的输出 -

"""NiceOne"" LLC","Robert","GoodRX",,"Maxift","Brian","P,N and B","Jane"

以下是我尝试过的 2 种格式示例

我尝试使用以下格式,它将空值括在引号中

create or replace file format formatA
COMPRESSION = GZIP
RECORD_DELIMITER = ','
SKIP_HEADER = 1
FIELD_DELIMITER =  NONE
FILE_EXTENSION = 'csv'
ESCAPE =  NONE
ESCAPE_UNENCLOSED_FIELD = NONE 
FIELD_OPTIONALLY_ENCLOSED_BY = '"'
NULL_IF = ( '','NULL' , 'null' , '""' )
EMPTY_FIELD_AS_NULL = TRUE
copy into @mytablestage from mytable FILE_FORMAT = ( FORMAT_NAME = 'formatA' ) ON_ERROR = CONTINUE

我尝试了以下格式,它没有用引号括起来

create or replace file format formatB
COMPRESSION = GZIP
RECORD_DELIMITER = ','
SKIP_HEADER = 1
FIELD_DELIMITER =  NONE
FILE_EXTENSION = 'csv'
ESCAPE =  NONE
ESCAPE_UNENCLOSED_FIELD = NONE 
NULL_IF = ( '','NULL' , 'null' , '""' )
EMPTY_FIELD_AS_NULL = TRUE
copy into @mytablestage from mytable FILE_FORMAT = ( FORMAT_NAME = 'formatB' ) ON_ERROR = CONTINUE

查看所需的输出,字段分隔符和记录分隔符不能相同,以区分行和字段。选择不同的记录分隔符,FIELD_OPTIONALLY_ENCLOSED_BY = '"' 和 NULL_IF = ( ''', 'NULL' , 'null' , '"' ( 应该会给你所需的输出。

您可以使用 Snowflake 文档中指定的第二个选项:

https://docs.snowflake.com/en/user-guide/data-unload-considerations.html

您可以指定FIELD_OPTIONALLY_ENCLOSED_BY=NONEEMPTY_FIELD_AS_NULL = FALSE在这种情况下,您需要提供用于 NULL 的值 (NULL_IF=('NULL')(。

通过将 FIELD_OPTIONALLY_ENCLOSED_BY 选项设置为 NONE(默认值(来保留字符串字段,并将EMPTY_FIELD_AS_NULL值设置为 FALSE 以将空字符串卸载为空字段。

如果选择此选项,请确保使用 NULL_IF 选项为 NULL 数据指定替换字符串,以区分输出文件中的 NULL 值和空字符串。如果稍后选择从输出文件加载数据,则将指定相同的NULL_IF值来标识数据文件中的 NULL 值。

我做了类似的事情,我的查询如下所示:

COPY INTO @~/unload/table FROM (
SELECT * FROM table
)
FILE_FORMAT = (TYPE = 'CSV' COMPRESSION = 'GZIP' 
FIELD_DELIMITER = 'u0001' 
EMPTY_FIELD_AS_NULL = FALSE 
FIELD_OPTIONALLY_ENCLOSED_BY = NONE    
NULL_IF=('NULL')) 
OVERWRITE = TRUE;

这为我节省了必须另外处理文件以摆脱封闭引号的烦人部分。

最新更新