如何处理 Snowpipe (SNOWFLAKE) 中的特殊字符

How to handle special characters in Snowpipe (SNOWFLAKE)

(在 SO 中发布此问答序列,因为我确定一些新用户可能 运行 进入类似的 "speed bumps"。-G)


如何处理 Snowpipe 中的特殊字符

我正在基于 csv 文件创建雪管。我的 csv 文件在几列中包含特殊字符。请让我知道如何在 snowpipe 中编写 select 语句来处理任何特殊字符。

snowpipe命令嵌入了copy语句,其中可以包含一个select语句(转换),我们可以使用字符串函数去除特殊字符。

/* Data load with transformation */
COPY INTO [<namespace>.]<table_name> [ ( <col_name> [ , <col_name> ... ] ) ]
     FROM ( SELECT [<alias>.]$<file_col_num>[.<element>] [ , [<alias>.]$<file_col_num>[.<element>] ... ]
            FROM { internalStage | externalStage } )
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ FILE_FORMAT = ( { FORMAT_NAME = '[<namespace>.]<file_format_name>' |
                    TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]

以上命令是以下命令的一部分 url "https://docs.snowflake.net/manuals/sql-reference/sql/copy-into-table.html".


注意:我很想知道是否有其他人成功地使用了替代解决方案...-G

要处理特殊字符,您需要对其进行转义。

有两种方法可以转义特殊字符,但不幸的是,每种方法都需要您修改文件

1) 你可以通过复制一个特殊字符来转义它(所以要转义 ' 你把它变成 '')

2) 在定义文件格式时,您可以添加 ESCAPE 参数来定义显式转义字符。例如,您可以使用 ESCAPE='\',然后在每个要转义的特殊字符前添加一个 \ 字符。