1

I am trying to load a CSV file from S3. which has a null value in the integer type data field in the snowflake table. So I try to use IFFNULL function but gets the error.

 Numeric value 'null' is not recognized.

For example when I try

select IFNULL(null,0)

I get the answer as 0.

but the same thing when I try while reading the CSV file won't work

select $1,$2,ifnull($2,0)
from 
@stage/path
(file_format => csv)

I get the null not recognized Error. and it fails when $2 is null.

My csv format is as below.

create FILE FORMAT CSV 
COMPRESSION = 'AUTO' FIELD_DELIMITER = ',' 
RECORD_DELIMITER = '\n' SKIP_HEADER = 0 
FIELD_OPTIONALLY_ENCLOSED_BY = '\042' 
TRIM_SPACE = FALSE 
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE ESCAPE = '\134' 
ESCAPE_UNENCLOSED_FIELD = '\134' DATE_FORMAT = 'AUTO' 
TIMESTAMP_FORMAT = 'AUTO' NULL_IF = ('\\N');

Basically, I am just trying to convert null to 0, when reading from the stage.

0

2 Answers 2

2

The null string literal could be handled by setting NULL_IF:

CREATE FILE FORMAT CSV 
...
NULL_IF = ('null', '\\N');
Sign up to request clarification or add additional context in comments.

Comments

2

I used the second option listed in the Snowflake documentation specifying FIELD_OPTIONALLY_ENCLOSED_BY=NONE and EMPTY_FIELD_AS_NULL = FALSE in which case I'd need to provide a value to be used for NULLs (NULL_IF=('NULL')

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

"Leave string fields unenclosed by setting the FIELD_OPTIONALLY_ENCLOSED_BY option to NONE (default), and set the EMPTY_FIELD_AS_NULL value to FALSE to unload empty strings as empty fields.

If you choose this option, make sure to specify a replacement string for NULL data using the NULL_IF option, to distinguish NULL values from empty strings in the output file. If you later choose to load data from the output files, you will specify the same NULL_IF value to identify the NULL values in the data files."

So my query looked something like the following:

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;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.