Объединяйте таблицы, используя значение внутри столбца JSON postgresql

#json #postgresql #hive

Вопрос:

У меня есть две таблицы в postgresql.

  1. первый (продукт) имеет строку json артикула ([149461190])
  2. второй (товар) имеет обычный столбец артикула

Как я могу присоединиться к ним по артикулу? Я попробовал это сделать, но ничего не вышло.

 select * from product ps , jsonb_to_recordset(ps.sku -gt; 'ps_sku') as (sku text) join item v using sku  

Исключение, которое я получаю

org.apache.hadoop.hive.ql.разбор.Исключение синтаксического анализа:строка 5:39 не может распознать ввод рядом с ‘jsonb_array_elements_text’ ‘ (‘ ‘p’ в разделе joinSourcePart

Комментарии:

1. Пожалуйста, приведите конкретный и репрезентативный пример данных ps.sku json в таблице product и укажите тип данных столбца sku в элементе таблицы.

Ответ №1:

Я понял, что product это таблица, и в этой таблице есть поле по имени sku и по типу JSON, а в JSON есть ключ по имени ps_sku

Если значение ps_sku ключа является целочисленным типом, то:

 select * from product pr  inner join item itm on itm.sku = (pr.sku-gt;'ps_sku')::integer  

Если значение ps_sku ключа является типом текста, то:

 select * from product pr  inner join item itm on itm.sku = (pr.sku-gt;'ps_sku')::text   

pr.sku-gt;'ps_sku' эта команда извлекает значение ps_sku ключа из строки JSON (из sku поля)