【问题标题】:Big Query - extract json field which contains emoji?大查询 - 提取包含表情符号的 json 字段?
【发布时间】:2021-02-11 17:59:15
【问题描述】:

在我的 BQ 数据库表中,我有一个名为 payload 的列,其中包含作为字符串的原始 facebook webhooks JSON 有效负载。其中一个包含带有Sample ???? 之类的表情符号的文本。在大查询中它看起来像

{"object":"page","entry":[{"id":"xxxx","time":1602757469275,"messaging":[{"sender":{"id":"xxxx"},"recipient":{"id":"xxxx"},"timestamp":1602757469062,"message":{"mid":"m_xxxx","text":"Sample \ud83c\udfe6","quick_reply":{"payload":"{\"key\": \"value\"}"},"tags":{"source":"source"}}}]}]}

我想创建一个视图,其中包含从原始 json 提取的 text 字段值的列 text。我创建了一个类似的 sql

SELECT
JSON_EXTRACT_SCALAR(payload, '$.entry[0].messaging[0].message.text') as text,
FROM `my_table.facebook.webhook_received` 

遗憾的是,我得到的结果看起来像 Sample ��

有谁知道如何使大查询正确解码表情符号,或者至少不将其更改为那些符号?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您嵌入的那些字符不适用于银行图标,我相信这是您的问题。 在 BQ 中运行以下命令,它会返回所需的表情符号: select " Sample \U0001f3e6"

    参考:https://emojipedia.org/bank/

    您提供的两个似乎默认为“?”,无效字符 http://unicode.scarfboy.com/?s=U%2Bdfe6

    编辑:处理消息的内容可能会抛出您在消息中看到的编码,这可能是实际问题。

    【讨论】:

    • 我不能同意,因为当我运行像 console.log("Sample \ud83c\udfe6") 这样的 js 代码时,输​​出是正确的并且包含表情符号
    • 我验证了您发送的控制台输出,看看您的意思。在我看来,BQ 正在单独解析每个组件,从而导致双 ?.
    • 因此,仔细研究一下,BQ 似乎在 Python 编码中处理表情符号(我在回答中提供的内容)。您提供的字符串是 Java 编码,请参阅此处的变体:fileformat.info/info/unicode/char/1f3e6/index.htm 如果有帮助,这是另一个类似的问题:stackoverflow.com/questions/55699140/…
    【解决方案2】:

    如果您使用 BigQuery Python 客户端及其load_table_from_json 方法,则在之前的版本中存在一个 Unicode 错误(尤其是它的字节超过 0xFFFF,如?),我已提交此错误修复,该修复已包含在最新版本包括它,https://github.com/googleapis/python-bigquery/releases/tag/v2.24.0。顺便说一句,您应该使用 \U0001F3E6,而不是 \ud83c\udfe6(UTF-16 十六进制类型)在您的 Python 代码中使用 BigQuery 呈现?。

    Unicode 字符“银行”:https://www.fileformat.info/info/unicode/char/1f3e6/index.htmhttps://charbase.com/1f3e6-unicode-bank

    【讨论】:

    • 感谢您指出这一点。我已经修改了其他类似问题的答案,只留下了这个问题的答案网址。
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 2020-04-06
    • 2012-09-11
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    相关资源
    最近更新 更多