简体   繁体   English

BigQuery:执行创建表的脚本时出错

[英]BigQuery: An error when executing a script to create a table

I'm trying to run a SQL query via a python script to feed a table automatically.我正在尝试通过 python 脚本运行 SQL 查询以自动提供表。

However, I have this error message:但是,我有此错误消息:

google.api_core.exceptions.BadRequest: 400 GET https://bigquery.googleapis.com/bigquery/v2/projects/****/queries/******************* too many subqueries or query is too complex.

The request works fine when I run it on Bigquery, but doesn't work when it is executed on the API via the python script.当我在 Bigquery 上运行它时,请求工作正常,但当它通过 python 脚本在 API 上执行时不起作用。

Here is the part of the code that blocks my request:这是阻止我的请求的代码部分:

 114:, SCOPE_FINAL AS
 115:(
 116:   
 117:  select
 118:    SCOPE_PARCOURS_2.DATE
 119:    , SCOPE_PARCOURS_2.SESSIONID
 120:   , CONCAT(NOM1.Name_CheckPoint
 121:                   , CASE WHEN NOM2.Name_CheckPoint IS NOT NULL THEN ' > ' ELSE '' END , CASE WHEN NOM2.Name_CheckPoint IS NOT NULL THEN NOM2.Name_CheckPoi
 122:                   , CASE WHEN NOM3.Name_CheckPoint IS NOT NULL THEN ' > ' ELSE '' END , CASE WHEN NOM3.Name_CheckPoint IS NOT NULL THEN NOM3.Name_CheckPoi
 123:                   , CASE WHEN NOM4.Name_CheckPoint IS NOT NULL THEN ' > ' ELSE '' END , CASE WHEN NOM4.Name_CheckPoint IS NOT NULL THEN NOM4.Name_CheckPoi
 124:                   , CASE WHEN NOM5.Name_CheckPoint IS NOT NULL THEN ' > ' ELSE '' END , CASE WHEN NOM5.Name_CheckPoint IS NOT NULL THEN NOM5.Name_CheckPoi
 125:                   ) PARCOURS
 126:    , SCOPE_PARCOURS_2.Name_CheckPoint
 127:    , SCOPE_PARCOURS_2.NUMSTEP
 128:    , SCOPE_PARCOURS_2.NB_ENTREE_TUNNEL
 129:    , SCOPE_PARCOURS_2.NB_LEAD
 130:  from SCOPE_PARCOURS_2
 131:  LEFT OUTER JOIN SCOPE_PARCOURS_2 NOM1
 132:   ON SCOPE_PARCOURS_2.DATE = NOM1.DATE
 133:   AND SCOPE_PARCOURS_2.SESSIONID = NOM1.SESSIONID
 134:   AND NOM1.NUMSTEP = 1
 135:  LEFT OUTER JOIN SCOPE_PARCOURS_2 NOM2
 136:   ON SCOPE_PARCOURS_2.DATE = NOM2.DATE
 137:   AND SCOPE_PARCOURS_2.SESSIONID = NOM2.SESSIONID
 138:   AND NOM2.NUMSTEP = 2
 139:   LEFT OUTER JOIN SCOPE_PARCOURS_2 NOM3
 140:   ON SCOPE_PARCOURS_2.DATE = NOM3.DATE
 141:   AND SCOPE_PARCOURS_2.SESSIONID = NOM3.SESSIONID
 142:   AND NOM3.NUMSTEP = 3
 143:   LEFT OUTER JOIN SCOPE_PARCOURS_2 NOM4
 144:   ON SCOPE_PARCOURS_2.DATE = NOM4.DATE
 145:   AND SCOPE_PARCOURS_2.SESSIONID = NOM4.SESSIONID
 146:   AND NOM4.NUMSTEP = 4
 147:   LEFT OUTER JOIN SCOPE_PARCOURS_2 NOM5
 148:   ON SCOPE_PARCOURS_2.DATE = NOM5.DATE
 149:   AND SCOPE_PARCOURS_2.SESSIONID = NOM5.SESSIONID
 150:   AND NOM5.NUMSTEP = 5
 151: UNION ALL
 152:   select
 153:    DATE
 154:    , SESSIONID
 155:   , 'VIDE' PARCOURS
 156:    , Name_CheckPoint
 157:    , NUMSTEP
 158:    , NB_ENTREE_TUNNEL
 159:    , NB_LEAD
 160:  from SCOPE_AUTRE```

This error occurs when you execute a query with many complex steps to get the results.当您执行具有许多复杂步骤的查询以获取结果时,会发生此错误。

Therefore, to avoid this error message, you can try, if your use case allows it, to split the query into a simpler queries using temporary tables and try to avoid such amount of LEFT JOIN on the same table.因此,为了避免出现此错误消息,如果您的用例允许,您可以尝试使用临时表将查询拆分为更简单的查询,并尽量避免在同一个表上使用如此多的 LEFT JOIN。 Here you have a documentation with recommendations on how to avoid repeated joins [1].这里有一份文档,其中包含有关如何避免重复连接的建议 [1]。

[1] https://cloud.google.com/bigquery/docs/best-practices-performance-output#avoid_repeated_joins_and_subqueries [1] https://cloud.google.com/bigquery/docs/best-practices-performance-output#avoid_repeated_joins_and_subqueries

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM