Snowflake-使用从S3到雪花的复制命令时出现“解析JSON时出错”

时间:2019-12-17 07:10:22

标签: amazon-web-services snowflake-data-warehouse

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

  1. 我在雪花中创建了一个表(注意'extra'字段定义为'Variant')

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. 我运行它,并得到了这个结果(我有很多错误行,这是一个例子) snowflake result snowflake result -more

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"}]

能否请您告诉我导致此错误的原因? 谢谢!

1 个答案:

答案 0 :(得分:0)

我在猜测;

'Error parsing JSON'当然与extra variant字段相关。

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

如果您具有涉及转义字符的STAGE设置,则可能会发生这种情况。

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

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

ESCAPE_UNENCLOSED_FIELD  = NONE

另一种选择是双引号或双转义反斜杠,例如。 C:\\\\Program Files