Google bigquery BigQuery中sql函数的执行顺序是什么
我需要对REGEXP\u REPLACE找到的字符串元素进行转换,但是函数SUBSTR看起来像是在REGEXP\u REPLACE之前执行的 我无法找到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
替换的任何限制
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()之类的函数。