Big Query - извлечь поле json, содержащее эмодзи?

В моей таблице базы данных 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"}}}]}]}

Я хочу создать представление с колонкой text с извлеченными textзначение поля из необработанного json. Я создал sql как

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

К сожалению, результат выглядит так Sample ��

Кто-нибудь знает, как заставить большой запрос правильно декодировать смайлики или хотя бы просто не менять его на эти знаки?

3 ответа

Решение

Эти символы, которые вы встроили, не предназначены для значка банка, что, я думаю, является вашей проблемой. Запустите в BQ следующее, и он вернет желаемый смайлик:select " Sample \U0001f3e6"

Ссылка:https://emojipedia.org/bank/

Два, которые вы указали, по умолчанию используют недопустимый символ '?'http://unicode.scarfboy.com/?s=U%2Bdfe6

edit: то, что когда-либо обрабатывает сообщение, может бросать кодировки, которые вы видите в своем сообщении, что может быть реальной проблемой.

Я столкнулся с подобной проблемой и исправил ее с помощьюPARSE_JSON. В моем личном случае:

JSON_VALUE(payload, "$.key")вернул

пока:

JSON_VALUE(PARSE_JSON(payload), "$.key")вернул правильный смайлик.

Надеюсь, это может помочь!

Если вы используете клиент 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.

Символ Юникода «БАНК»: https://www.fileformat.info/info/unicode/char/1f3e6/index.htm,https://charbase.com/1f3e6-unicode-bank

Другие вопросы по тегам