Разделение имени в Google BigQuery - PullRequest
0 голосов
/ 18 марта 2020

Разделить полное имя на firstName и lastName.

Я хочу разделить полное имя на основе "," на firstName и LastName. что-нибудь перед "," должно быть выбрано как firstName, и что-либо "," должно быть последним. Я использовал функцию split (fullName) и использовал смещение для захвата firstName и lastName, но столкнулся с ошибкой, когда в fullName было 2 ",". Я использовал этот код:

WITH getfirstName AS 
(
  SELECT ID,Name[offset(1)] AS firstName FROM
    (SELECT * FROM 
    (SELECT ID,Name,ARRAY_LENGTH(Name) as length  FROM
    (
    SELECT ID, SPLIT(OPR_FULL) as Name FROM `project.Dataset.Name` )
    )
    WHERE length >=2)
)


, getLastName AS 
(
  SELECT  A.ID,  NAME[OFFSET(0)] AS lastName
  FROM(SELECT SPLIT(OPR_FULL) as Name,ID FROM `project.Dataset.Name`) A
  LEFT JOIN getfirstName B
  ON A.ID=B.ID
)

Есть ли лучший способ сделать это? КАК РАЗРЕШИТЬ ДВОЙНОЙ "," ВЫПУСК? если я использую OFFSET (2), я получаю ошибку OffBound.

1 Ответ

2 голосов
/ 18 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT fullName,
  REGEXP_EXTRACT(fullName, r'(.*?),') lastName,
  REGEXP_EXTRACT(fullName, r',(.*)') firstName
FROM `project.dataset.table`  

Вы можете проверить, поиграть с выше, используя фиктивные данные, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Geogre,Bailey' fullName UNION ALL
  SELECT 'Kat,JR,Cruz'
)
SELECT fullName,
  REGEXP_EXTRACT(fullName, r'(.*?),') lastName,
  REGEXP_EXTRACT(fullName, r',(.*)') firstName
FROM `project.dataset.table`  

с выводом

Row fullName        lastName    firstName    
1   Geogre,Bailey   Geogre      Bailey   
2   Kat,JR,Cruz     Kat         JR,Cruz    

В случае если запятая вообще отсутствует - вы можете использовать ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Geogre,Bailey' fullName UNION ALL
  SELECT 'Kat,JR,Cruz' union all
  SELECT 'Monica Calderon'
)
SELECT fullName,
  REGEXP_EXTRACT(fullName, r'(.*?)(?:,|$)') lastName,
  REGEXP_EXTRACT(fullName, r',(.*)') firstName
FROM `project.dataset.table`

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

Row fullName            lastName            firstName    
1   Geogre,Bailey       Geogre              Bailey   
2   Kat,JR,Cruz         Kat                 JR,Cruz  
3   Monica Calderon     Monica Calderon     null     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...