Извлеките свойство JSON со звездочкой в ​​имени свойства, используя get_json_object () в SparkSql - PullRequest
0 голосов
/ 11 января 2019

У меня есть таблица в Databricks, в которой есть столбец (называемый «свойствами»), который содержит данные JSON. Я успешно использовал get_json_object () в записной книжке SparkSql, чтобы извлечь из него свойства, например:

%sql
select distinct_id, get_json_object(properties, "$.time")
from my_table

Это хорошо работает. Однако в столбце свойств есть подсвойства, в именах которых есть звездочки, например, * Plan . Доступ к этим свойствам стандартным способом, например, $. * Plan не работает, поскольку * имеет особое значение для get_json_object (). Я пытался получить доступ к этим свойствам с помощью escape-символов, например:

%sql
select distinct_id, get_json_object(properties, "$.\*Plan")
from my_table

... вместе с альтернативными побегами, но безрезультатно. Есть ли способ извлечь подсвойства JSON, которые могут экранировать звездочку?

Спасибо!

1 Ответ

0 голосов
/ 11 января 2019

Вы можете использовать LATERAL VIEW и json_tuple в качестве обходного пути. Это не так уж суетно по поводу специальных символов, например:

SELECT x.*
FROM my_table
  LATERAL VIEW json_tuple( properties, '*Plan' ) x

Или, если вы намерены использовать get_json_object, вы можете очистить строку заранее (хотя вы несколько опровергли смысл использования JSON):

%sql
select 
  distinct_id, 
  get_json_object(replace(properties, '*', ''), '$.Plan' ) z
from my_table

Я не мог лично заставить работать какие-либо экранирующие методы (например, \ u0042 или \), но рад, что меня исправили.

В идеале не ставьте такие странные символы в JSON.

...