首页 > 解决方案 > 雪花 VARCHAR 到 VARIANT 插入“\”字符

问题描述

我在 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 有效负载。

标签: jsonparsingsnowflake-cloud-data-platformvariant

解决方案


据我所知,这是预期的行为。您可以使用 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


推荐阅读