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