Как я могу преобразовать все вложенные строки строк обратно в обычные строки bigquery?

У меня есть таблица, которая выглядит так:

Row id  edad    nombre     sector          contacto.telefono    contacto.correo 
1   275  18   dozolme      El Golf         5555555          [email protected]
                                           123456789        [email protected]
                                           35161631

Как я могу вернуться к этому?

Row id  edad    nombre     sector          telefono             correo  
1   275  18   dozolme      El Golf         5555555          [email protected]
2   275  18   dozolme      El Golf         123456789        [email protected]
3   275  18   dozolme      El Golf         35161631         null --> ? maybe null? 

Схема:

id                  INTEGER NULLABLE    
edad                INTEGER NULLABLE    
nombre              STRING  NULLABLE    
sector              STRING  NULLABLE    
contacto            RECORD  REPEATED    
contacto.telefono   STRING  REPEATED    
contacto.correo     STRING  REPEATED    

РЕДАКТИРОВАТЬ

Вот как я получаю результат сейчас

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
select * except(contacto, telefono, correo),
  telefono, correo
from `project.dataset.table`,
unnest(contacto), 
unnest(telefono) as telefono with offset
join unnest(correo) as correo with offset
using(offset)

Все еще получаю эти пустые места :(. Строка 1 не превращается в 3 разные строки

Pedro Pablo Severin Honorato 15.12.2020 02:38

я только что попробовал с образцами данных из вашего вопроса - и я не вижу пустых мест!!! - пожалуйста, перепроверьте и/или уточните свою проблему

Mikhail Berlyant 15.12.2020 02:41

Добавил фото с выводом запроса

Pedro Pablo Severin Honorato 15.12.2020 02:45

попробуй обновлённую версию - я понял, что телефоно, коррео тоже повторяются, поэтому скорректировал код соответственно

Mikhail Berlyant 15.12.2020 02:48

СПАСИБО!! Это сработало! Можете ли вы объяснить мне немного, почему и как? Или укажите мне направление, где я могу узнать больше об этом. Иногда мне кажется, что я слаб в SQL.

Pedro Pablo Severin Honorato 15.12.2020 03:23

конечно. так что сначала unnest просто сглаживает массив contacto. затем массивы telefono и correo также выравниваются, а их элементы соединяются на своих позициях в этих массивах. а затем - исходные массивы contacto, telefono, correo исключаются из вывода через except . надеюсь это поможет. рассмотрите возможность голосования за ответ

Mikhail Berlyant 15.12.2020 03:27

@PedroPabloSeverinHonorato . . . Я думаю, что это возвращает только минимальное количество телефонных номеров и электронных писем. Итак, если у вас есть 3 номера телефона и 2 адреса электронной почты, вы получите только 2 номера телефона с этим запросом.

Gordon Linoff 15.12.2020 13:16

Гордон прав. Каким-то образом я предположил, что телефон и электронная почта связаны друг с другом. Между тем, ответ Гордона вообще не работает и просто не работает!!! :о(

Mikhail Berlyant 15.12.2020 16:33

У вас очень странная структура данных — массив контактов с массивами адресов электронной почты и телефонных номеров. Слишком много повторяющихся полей.

select t.* except (contacto, telefono, correo),
       te, co
from t left join
     unnest(t.contacto) c
     on 1=1 left join
     (unnest(c.telefono) te with offset tn full join
      unnest(c.correo) co with offset cn
      on tn = cn
     )
     on 1=1;

Наверное, из-за отсутствия у меня опыта. Разве это не «правильный способ» хранения контактной информации человека? Телефон и электронная почта не должны быть в разделе «Контактная информация»?

Pedro Pablo Severin Honorato 15.12.2020 03:30

@PedroPabloSeverinHonorato . . . Я сомневаюсь, что телефон и электронная почта связаны друг с другом. У вас должно быть только два массива, один для телефонных номеров и один для электронной почты — структура не требуется.

Gordon Linoff 15.12.2020 03:34

Ну... да... телефон и электронная почта не связаны друг с другом. Единственная связь состоит в том, что они принадлежат конкретному человеку, но не более того. Возможно, у меня неправильное представление о структурах и массивах. Не могли бы вы порекомендовать мне, где я могу узнать все это

Pedro Pablo Severin Honorato 15.12.2020 13:00

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