首页 > 解决方案 > 雪花 - 使用从 S3 复制命令到雪花时出现“解析 JSON 时出错”

问题描述

我正在尝试将 gz 文件从我的 S3 目录复制到 Snowflake。

  1. 我在雪花中创建了一个表(注意“额外”字段被定义为“变体”)

CREATE TABLE accesslog
(
	loghash VARCHAR(32) NOT NULL,
	logdatetime TIMESTAMP,
	ip VARCHAR(15),
	country VARCHAR(2),
	querystring VARCHAR(2000),
	version VARCHAR(15),
	partner INTEGER,
	name VARCHAR(100),
	countervalue DOUBLE PRECISION,
	username VARCHAR(50),
	gamesessionid VARCHAR(36),
	gameid INTEGER,
	ingameid INTEGER,
	machineuid VARCHAR(36),
	extra variant,
	ingame_window_name VARCHAR(2000),
	extension_id VARCHAR(50)
    
);

  1. 我在雪花中使用了这个复制命令:

copy  INTO accesslog
	FROM s3://XXX
    pattern='.*cds_201911.*'
    CREDENTIALS = (
        aws_key_id='XXX',
        aws_secret_key='XXX')
    FILE_FORMAT=(
        error_on_column_count_mismatch=false
    	FIELD_OPTIONALLY_ENCLOSED_BY = '"'
        TYPE = CSV 
        COMPRESSION = GZIP
        FIELD_DELIMITER = '\t'
        )
        ON_ERROR =  CONTINUE

  1. 我运行它,得到了这个结果(我有很多错误行,这是一个例子) 雪花结果 雪花结果 - 更多

a17589e44ae66ffb0a12360beab5ac12	2019-11-01 00:08:39	155.4.208.0	SE		0.136.0	3337	game_process_detected	0	OW_287d4ea0-4892-4814-b2a8-3a5703ae68f3	e9464ba4c9374275991f15e5ed7add13		765	19f030d4-f85f-4b85-9f12-6db9360d7fcc	[{"Name":"file","Value":"wowvoiceproxy.exe"},{"Name":"folder","Value":"C:\\Program Files (x86)\\World of Warcraft\\_retail_\\Utils\\WowVoiceProxy.exe"}]

你能告诉我是什么原因导致这个错误吗?谢谢!

标签: amazon-web-servicessnowflake-cloud-data-platform

解决方案


我正在猜测;

'Error parsing JSON'当然与该extra variant领域有关。

JSON 看起来不错,但反斜杠存在潜在问题\
如果您查看成功加载的行,是否已删除反斜杠?

如果您有STAGE涉及转义字符的设置,这可能(可能)发生。

然后\\UtilsWindows 路径值中的子字符串会触发 Unicode 解码错误,例如。
Error parsing JSON: hex digit is expected in \U???????? escape sequence, pos 123

更新:
事实证明,您必须通过将以下内容添加到以下内容来关闭转义字符处理FILE_FORMAT

ESCAPE_UNENCLOSED_FIELD  = NONE

另一种方法是双引号字段或双重转义反斜杠,例如。C:\\\\Program Files.


推荐阅读