Как сделать «безопасный» SPLIT в Google BigQuery? - PullRequest
0 голосов
/ 27 марта 2020

Следующий код в Google BigQuery выбрасывает ошибку индекса за пределами границ.

SELECT 
  SPLIT(CONCEPT_CKI, "!")[OFFSET(0)] AS Standard_Name
  ,SPLIT(CONCEPT_CKI, "!")[OFFSET(1)] AS Standard_Code

FROM 
(
      SELECT "MULTUM!123" AS CONCEPT_CKI
      UNION ALL
      SELECT "MULTUM234" AS CONCEPT_CKI

)

Мы бы хотели, чтобы разбиение работало с полями, с которыми оно может работать, и просто получило бы значение NULL для второго поля, когда это невозможно. (т.е. несколько похоже на то, как команда SAFE_CAST выдает NULL, если она не может выполнить приведение.)

Как сделать «безопасный» SPLIT для полей в Google BigQuery?

1 Ответ

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

Используйте SAFE_OFFSET, как в примере ниже

SELECT 
  SPLIT(CONCEPT_CKI, "!")[OFFSET(0)] AS Standard_Name
  ,SPLIT(CONCEPT_CKI, "!")[SAFE_OFFSET(1)] AS Standard_Code

FROM 
(
      SELECT "MULTUM!123" AS CONCEPT_CKI
      UNION ALL
      SELECT "MULTUM234" AS CONCEPT_CKI

)   

с выводом

Row Standard_Name   Standard_Code    
1   MULTUM          123  
2   MULTUM234       null       

вместо Array index 1 is out of bounds (overflow) для исходного запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...