извлечение данных из поля с несколькими значениями - PullRequest
0 голосов
/ 19 сентября 2018
We have table person. It has sample fields with multiple values like

person

ID name  tripNumber startPlace   endPlace
1  xxx    20         Portland    Atlanta
          25         California  Atlanta
          40         America     Africa
2  EKVV   40         America     Africa
          37         Argentina   Carolina

We need to retrieve entire row of data in particular condition like tripNumber=40 and endPlace="Africa"

We need the result like this,

ID name  tripNumber startPlace   endPlace
1  xxx    40         America     Africa
2  EKVV   40         America     Africa

1 Ответ

0 голосов
/ 19 сентября 2018

Ниже для стандартного SQL BigQuery

#standardSQL
WITH `project.dataset.person` AS (
  SELECT 1 id, 'xxx' name, [20, 25, 40] tripNumber, ['Portland', 'California', 'America'] startPlace, ['Atlanta', 'Atlanta', 'Africa'] endPlace UNION ALL
  SELECT 2,  'EKVV', [40, 37], ['America', 'Argentina'], ['Africa', 'Carolina']
)
SELECT id, name, tripNumber, startPlace[SAFE_OFFSET(off)] startPlace, endPlace[SAFE_OFFSET(off)] endPlace 
FROM `project.dataset.person`,
UNNEST(tripNumber) tripNumber WITH OFFSET off
WHERE tripNumber = 40

с результатом

Row id  name    tripNumber  startPlace  endPlace     
1   1   xxx     40          America     Africa   
2   2   EKVV    40          America     Africa     

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

Ниже - основан на более распространенной схеме повторяющихся записей

, поэтому, если таблица person будет выглядеть так, как показано ниже

Row id  name    trips.tripNumber    trips.startPlace    trips.endPlace   
1   1   xxx     20                  Portland            Atlanta  
                25                  California          Atlanta  
                40                  America             Africa   
2   2   EKVV    40                  America             Africa   
                37                  Argentina           Carolina        

, в этом случае решение будет

#standardSQL
WITH `project.dataset.person` AS (
  SELECT 1 id, 'xxx' name, [STRUCT<tripNumber INT64, startPlace STRING, endPlace STRING>(20, 'Portland', 'Atlanta'),(25, 'California', 'Atlanta'),(40, 'America', 'Africa')] trips UNION ALL
  SELECT 2, 'EKVV', [STRUCT(40, 'America', 'Africa'),(37, 'Argentina', 'Carolina')]
)
SELECT id, name, tripNumber, startPlace, endPlace 
FROM `project.dataset.person`,
UNNEST(trips) trip
WHERE tripNumber = 40 

с результатом

Row id  name    tripNumber  startPlace  endPlace     
1   1   xxx     40          America     Africa   
2   2   EKVV    40          America     Africa   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...