【问题标题】:Snowflake Searching string in semi structured data半结构化数据中的雪花搜索字符串
【发布时间】:2021-01-03 13:32:15
【问题描述】:

我有一张桌子。有很多列和行。我试图在 Snowflake 中查询的一列具有半结构化数据。例如,当我查询时

select response
from table
limit 5

这是返回的内容

[body={\n "id": "xxxxx",\n "object": "charge",\n "amount": 500,\n "amount_refunded": 0,\n "application": null,\n "application_fee": null,\n "application_fee_amount": null,\n "balance_transaction": null,\n "billing_details": {\n "address": {\n "city": null,\n "zip": "xxxxx",]

我只想选择此数据中的 zip。当我运行代码时:

select response:zip
from table
limit 5

我得到一个错误。 SQL compilation error: error line 1 at position 21 Invalid argument types for function 'GET': (VARCHAR(16777216), VARCHAR(11))

发生这种情况有什么原因吗?我是雪花的新手,所以试图解析这些数据但卡住了。谢谢!

【问题讨论】:

    标签: sql json snowflake-cloud-data-platform


    【解决方案1】:

    雪花有very good documentation on the subject

    对于您的具体情况,您是否尝试过使用点表示法?这是访问 JSON 的合适方法。所以

    Select result:body.zip
    from table
    

    记住你有你的'body'元素。您需要先使用分号访问该元素,因为它是 1 级元素。 Zip 位于 body 内,因此它是 2 级。1 级元素使用分号访问,2 级元素使用点符号访问。

    【讨论】:

    • 谢谢。但是,这会产生错误:SQL 编译错误:错误行 0 在位置 -1 函数 'GET' 的参数类型无效:(VARCHAR(16777216), VARCHAR(4))
    • 我一直在查看文档,但我尝试的一切都会产生错误
    • 在这种情况下,为什么不尝试将其转换为字符串,使用 Split 函数在换行符处将其拆分,然后展平结果数组以向您显示结果展平操作的实例是邮编吗?
    【解决方案2】:

    我认为您对此有多个问题。

    1. 首先,我认为您的响应列不是变体列。请运行以下查询并确认

      在表格上显示列;

    2. 即使列是变体,数据的存储方式也不是有效的 JSON 格式。您需要剥离 JSON 部分,然后将其存储在变体列中。

    请做第一部分并分享信息,然后我会建议下一步。我想把它放在评论中,但评论不允许写这么多句子。

    【讨论】:

    • 这是 {"type":"TEXT","length":16777216,"byteLength":16777216,"nullable":true,"fixed":false} 的结果
    • 所以,我的预感是正确的。数据类型是 TEXT 而不是变体。您应该有一个变体 COLUMN 来存储 JSON,否则您将不得不使用 PARSE_JSON。此外,您必须从响应中删除 json 部分
    • 使用 PARSE_JSON 我收到此错误 解析 JSON 时出错:未知关键字“auth_body”,位置 11
    • 您没有有效的 JSON
    • 也许我不明白。那我需要做什么呢?
    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2020-02-23
    • 2011-11-16
    • 1970-01-01
    相关资源
    最近更新 更多