JSON 使用 Snowflake 查询

JSON query with Snowflake

你好,我有下面的 json 字段(地址簿列表),我试图在其中提取 addr1,但我的代码结果为 NULL 有人可以帮忙吗?

查询-

select 
addressbooklist:addressbook.addressbookAddress.addr1 as test,
from customer;

JSON 字段

{
  "addressbook": [
    {
      "addressbookAddress": {
        "addr1": "701 N. Brand Boulevard",
        "addr2": null,
        "addr3": null,
        "addrPhone": null,
        "addrText": "Executive Software International<br>701 N. Brand Boulevard<br>Glendale CA 912031242<br>United States",
        "addressee": "Executive Software International",
        "attention": null,
        "city": "Glendale",
        "country": {
          "value": "_unitedStates"
        },
        "customFieldList": null,
        "internalId": null,
        "nullFieldList": null,
        "override": false,
        "state": "CA",
        "zip": "912031242"
      },
      "defaultBilling": false,
      "defaultShipping": true,
      "internalId": "1587207",
      "isResidential": false,
      "label": "701 N. Brand Boulevard"
    },
    {
      "addressbookAddress": {
        "addr1": "701 N. Brand Boulevard",
        "addr2": null,
        "addr3": null,
        "addrPhone": null,
        "addrText": "Executive Software International<br>701 N. Brand Boulevard<br>Glendale CA 912031242<br>United States",
        "addressee": "Executive Software International",
        "attention": null,
        "city": "Glendale",
        "country": {
          "value": "_unitedStates"
        },
        "customFieldList": null,
        "internalId": null,
        "nullFieldList": null,
        "override": false,
        "state": "CA",
        "zip": "912031242"
      },
      "defaultBilling": true,
      "defaultShipping": false,
      "internalId": "1587208",
      "isResidential": false,
      "label": "701 N. Brand Boulevard"
    }
  ],
  "replaceAll": false
}

了解您要使用哪种语言会有所帮助。我只需要用 mySQL 来做这件事。这样的事情可能会有所帮助:

select yourField->>'$."addressbookAddress"[0].addr1' 作为地址 从你的桌子 其中 1

您的 json 文档 addressbook 元素是一个数组,而不是普通的 属性。您可以使用 [0] 符号引用数组中的特定元素(0=第一个元素,1=第二个,...)。您的查询将如下所示:

select addressbooklist:addressbook[0].addressbookAddress.addr1 as test from customer;

如果您想要在结果中包含所有地址簿项目,您可以使用这种查询来展平 json 结构:

select ab.value:addressbookAddress.addr1 as test
from customer
, lateral flatten(input => addressbooklist:addressbook) ab;

结果:

TEST
"701 N. Brand Boulevard"
"701 N. Brand Boulevard"

有关 Snowflake json 数组语法的更多信息,请参见此处:

您引用的 JSON 对象具有以下结构:

Array[Object1{key1: value, key2: value}, Object2{key1: value, key2: value}]

Object1 是数组的第一项,索引为 0,Object2 的索引为 1,依此类推。

您可以访问数组中的一个项目,例如 Array[0],您可以访问对象内部的一个值,例如 Object1.key1。在此示例中,您可以联系 key1,例如 Array[0]Object1.key1

在您的情况下,您可以在第一个对象中访问 addr1,如下所示:

addressbook[0].addressbookAddress.addr1