Google bigquery BigQuery中sql函数的执行顺序是什么

Google bigquery BigQuery中sql函数的执行顺序是什么,google-bigquery,Google Bigquery,我需要对REGEXP\u REPLACE找到的字符串元素进行转换,但是函数SUBSTR看起来像是在REGEXP\u REPLACE之前执行的 我无法找到替换的任何限制 WITH tabA AS (SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\",\"6cc623dd-41f5-42d9-9637-a169af42e2b1\"]" as myids union all SELECT "[\"5cc623dd-41f5-42d9-9637

我需要对REGEXP\u REPLACE找到的字符串元素进行转换,但是函数SUBSTR看起来像是在REGEXP\u REPLACE之前执行的

我无法找到
替换
的任何限制

WITH tabA AS
  (SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\",\"6cc623dd-41f5-42d9-9637-a169af42e2b1\"]" as myids
  union all
  SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\"]" as myids
  )

SELECT
  myids,
  REGEXP_REPLACE(myids,"\"(.{36})\"",SUBSTR("\\1",0,8)) as ccc,
  SUBSTR(myids,0,8) as ddd
FROM tabA;  
我希望只输出每个正则表达式的前8个字符,而不是全部36个字符

预计将看到:

5cc623dd,6cc623dd
5cc623dd
在查询中,SUBSTR(…)是函数REGEXP_REPLACE()的输入的一部分,因此必须在调用REGEXP_REPLACE()之前对其求值

必须将SUBSTR等效项作为正则表达式的一部分,如下面的示例所示

WITH tabA AS
  (SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\",\"6cc623dd-41f5-42d9-9637-a169af42e2b1\"]" as myids
  union all
  SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\"]" as myids
  )

SELECT
  myids,
  REGEXP_REPLACE(myids,"\"(.{8}).{28}\"","\\1") as ccc
FROM tabA; 
输出:

+---------------------------------------------------------------------------------+---------------------+
|                                      myids                                      |         ccc         |
+---------------------------------------------------------------------------------+---------------------+
| ["5cc623dd-41f5-42d9-9637-a169af42e2b1","6cc623dd-41f5-42d9-9637-a169af42e2b1"] | [5cc623dd,6cc623dd] |
| ["5cc623dd-41f5-42d9-9637-a169af42e2b1"]                                        | [5cc623dd]          |
+---------------------------------------------------------------------------------+---------------------+
在查询中,SUBSTR(…)是函数REGEXP_REPLACE()的输入的一部分,因此必须在调用REGEXP_REPLACE()之前对其求值

必须将SUBSTR等效项作为正则表达式的一部分,如下面的示例所示

WITH tabA AS
  (SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\",\"6cc623dd-41f5-42d9-9637-a169af42e2b1\"]" as myids
  union all
  SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\"]" as myids
  )

SELECT
  myids,
  REGEXP_REPLACE(myids,"\"(.{8}).{28}\"","\\1") as ccc
FROM tabA; 
输出:

+---------------------------------------------------------------------------------+---------------------+
|                                      myids                                      |         ccc         |
+---------------------------------------------------------------------------------+---------------------+
| ["5cc623dd-41f5-42d9-9637-a169af42e2b1","6cc623dd-41f5-42d9-9637-a169af42e2b1"] | [5cc623dd,6cc623dd] |
| ["5cc623dd-41f5-42d9-9637-a169af42e2b1"]                                        | [5cc623dd]          |
+---------------------------------------------------------------------------------+---------------------+

下面是BigQuery标准SQL

#standardSQL
WITH tabA AS (
  SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\",\"6cc623dd-41f5-42d9-9637-a169af42e2b1\"]" AS myids UNION ALL
  SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\"]" AS myids
)
SELECT myids, 
  ( SELECT STRING_AGG(id)
    FROM UNNEST(REGEXP_EXTRACT_ALL(myids, r'"(.{8})-')) id
  ) ids  
FROM tabA  
结果

Row myids                                                                           ids  
1   ["5cc623dd-41f5-42d9-9637-a169af42e2b1","6cc623dd-41f5-42d9-9637-a169af42e2b1"] 5cc623dd,6cc623dd    
2   ["5cc623dd-41f5-42d9-9637-a169af42e2b1"]                                        5cc623dd    

下面是BigQuery标准SQL

#standardSQL
WITH tabA AS (
  SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\",\"6cc623dd-41f5-42d9-9637-a169af42e2b1\"]" AS myids UNION ALL
  SELECT "[\"5cc623dd-41f5-42d9-9637-a169af42e2b1\"]" AS myids
)
SELECT myids, 
  ( SELECT STRING_AGG(id)
    FROM UNNEST(REGEXP_EXTRACT_ALL(myids, r'"(.{8})-')) id
  ) ids  
FROM tabA  
结果

Row myids                                                                           ids  
1   ["5cc623dd-41f5-42d9-9637-a169af42e2b1","6cc623dd-41f5-42d9-9637-a169af42e2b1"] 5cc623dd,6cc623dd    
2   ["5cc623dd-41f5-42d9-9637-a169af42e2b1"]                                        5cc623dd    

您可能希望提供预期输出的示例(基于显示的输入)您可能希望提供预期输出的示例(基于显示的输入)来回答我关于“执行顺序”的问题,而下面的@MikhailBerlyant answer提供了执行更复杂事情的选项-例如,应用SHA256()等函数.这就是我关于“执行顺序”的问题的答案,而下面的@MikhailBerlyant answer提供了执行更复杂操作的选项-例如,应用SHA256()之类的函数。