如何在 Google BigQuery 中进行“安全”的 SPLIT?

Pra*_*les 2 sql google-bigquery

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

)
Run Code Online (Sandbox Code Playgroud)

我们希望拆分可以处理它可以处理的字段 - 并且当它不能处理时简单地为第二个字段生成一个 NULL 值。(即有点类似于 SAFE_CAST 命令在无法进行强制转换时给出 NULL 的方式。)

我们如何对 Google BigQuery 中的字段进行“安全”分割?

Mik*_*ant 5

使用 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

)   
Run Code Online (Sandbox Code Playgroud)

带输出

Row Standard_Name   Standard_Code    
1   MULTUM          123  
2   MULTUM234       null       
Run Code Online (Sandbox Code Playgroud)

而不是Array index 1 is out of bounds (overflow)原始查询