雪花 VARCHAR 到 VARIANT 插入“\”字符
Posted
技术标签:
【中文标题】雪花 VARCHAR 到 VARIANT 插入“\\”字符【英文标题】:Snowflake VARCHAR to VARIANT Inserting "\" characters雪花 VARCHAR 到 VARIANT 插入“\”字符 【发布时间】:2021-02-09 21:17:34 【问题描述】:我在 varchar 列中有一些原始数据,但是当我对其运行 to_variant() 函数时,数据会发生巨大变化。例如。
这个json数据存储在varchar中
"event_detail":
"event_name": "quote_created",
"id": "679cc110-1c06-4f7d-aeed-1f637c0eff2d",
"source": "Quote service",
"timestamp":
"nanos": 730693300,
"seconds": 1603366821
变成这样
"
\"event_detail\":
\"event_name\": \"quote_created\",
\"id\": \"679cc110-1c06-4f7d-aeed-1f637c0eff2d\",
\"source\": \"Quote service\",
\"timestamp\":
\"nanos\": 730693300,
\"seconds\": 1603366821
"
有人见过这个吗?它使解析变体变得非常困难?我之前也看到过在变体数据类型中存储的第一个没有“\”字符的 json 有效负载。
【问题讨论】:
不是转义引号吗? 如果您选择 to_variant(据我所知,这是预期的行为。您可以使用 parse_json 函数,而不是使用 to_variant 函数将 varchar 转换为变量。在这种情况下,很容易解析:
select parse_json(' "event_detail":
"event_name": "quote_created",
"id": "679cc110-1c06-4f7d-aeed-1f637c0eff2d",
"source": "Quote service",
"timestamp":
"nanos": 730693300,
"seconds": 1603366821 '):event_detail.event_name::String;
这将返回:quote_created
【讨论】:
当我从snowflake.connector
使用write_pandas
时,我看到了同样的行为,我想知道有什么办法可以防止这种情况发生,但我认为这是预期的行为。
在变体上解析 varchar 要慢得多,这就是我们尝试将其存储为变体的原因。以上是关于雪花 VARCHAR 到 VARIANT 插入“\”字符的主要内容,如果未能解决你的问题,请参考以下文章
从 Hive Map 迁移到 Snowflake Variant