首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google bigquery在简单查询方面非常慢

Google bigquery在简单查询方面非常慢
EN

Stack Overflow用户
提问于 2022-11-04 04:51:55
回答 1查看 66关注 0票数 -1

我有一个简单的查询,从4个表中计数记录(不加入):

代码语言:javascript
运行
复制
SELECT count(tx._sequence_num) as txc, 
count(o._sequence_num) as oc, 
count(t._sequence_num) as tc, 
count(ol._sequence_num) as olc  
FROM `xxx.TAX_TRANSACTIONS` tx, 
xxx.ORDER o, 
xxx.TRANSACTION t, 
xxx.ORDER_LINES ol

它永远不会把结果还给我

如果我把它分成4个这样的查询:

代码语言:javascript
运行
复制
SELECT count(tx._sequence_num) as txc FROM `xxx.TAX_TRANSACTIONS` tx; --202685
SELECT count(o._sequence_num) as oc FROM xxx.ORDER o; --175642
SELECT count(t._sequence_num) as tc  FROM  xxx.TRANSACTION t; --199392
SELECT count(ol._sequence_num) as olc  FROM  xxx.ORDER_LINES ol; --174947

它在1-2秒后返回(-xxxxxx右边是记录计数)

对于这个简单的连接,我从来没有得到结果:

代码语言:javascript
运行
复制
SELECT ol.DEVICE_ID AS VIN,
       tx.TAX_LINES AS SKU,
       o.USER_ID AS ACCOUNT_DN,
       o.ORDER_NUMBER,
       cast(t.AMOUNT as FLOAT64)/100 AS TOTAL_AMOUNT ,
       t.TRANSACTION_STATUS,
       t.TRANSACTION_TYPE,
       t.TRANSACTION_TAG,
       t.CREATED_ON ,
       tx.TAX_CALCULATED,
       tx.TRANSACTION_STATUS AS TAX_TXN_STATUS,
       tx.ERROR_MESSAGE REMARKS,
       tx.TRANSACTION_ID AS TAX_TXN_ID,
       tx.TAXATION_TYPE AS TAX_TXN_TYPE,
       tx.TRANSACTION_DATE TAX_TXN_DATE
        FROM xxx.TAX_TRANSACTIONS tx join
         `xxx.ORDER` o on o.ORDER_NUMBER = tx.ORDER_NUMBER join
         xxx.TRANSACTION t on o.ORDER_NUMBER = t.ORDER_NUMBER join
         xxx.ORDER_LINES ol on o.ID = ol.ORDER_ID
        WHERE (t.TRANSACTION_TYPE IN ("purchase") AND t.TRANSACTION_STATUS ="approved" AND tx.TAXATION_TYPE = "SalesInvoice") or
        (t.TRANSACTION_TYPE IN ("refund") AND tx.TAXATION_TYPE = "ReturnInvoice") or
        (tx.TRANSACTION_STATUS IN ("Error"))
    ORDER BY CREATED_ON DESC

我的问题有什么问题吗?请告诉我如何解决这个问题(加入)。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-04 10:32:36

你说你没有加入,但实际上你是。更糟的是,你正在做交叉连接。通过像在FROM子句中所做的那样,放置4个表,就可以隐式地将所有4个表连接在一起。

换句话说,连接产生的行数将为202685 * 175642 * 199392 * 174947 =12418359000000000000,这是一个庞大的数字。这就是为什么您的查询没有完成的原因。

也许可以看一下当前正在预览的执行图(我可以在上面的屏幕截图中看到它)--它可能会指示在这里执行的是什么操作。

如果您想要计数每个表中的行数,那么您必须编写4个单独的查询,就像您所做的那样。

UPDATE,作为演示,我有一个包含288行的表。

代码语言:javascript
运行
复制
select count(*)
from `project.dataset.t` a

返回288

代码语言:javascript
运行
复制
select count(*)
from `project.dataset.t` a,
`project.dataset.t` b

返回82944

代码语言:javascript
运行
复制
select count(*)
from `project.dataset.t` a,
`project.dataset.t` b,
`project.dataset.t` c

返回23887872

代码语言:javascript
运行
复制
select count(*)
from `project.dataset.t` a,
`project.dataset.t` b,
`project.dataset.t` c,
`project.dataset.t` d

返回6879707136 (68亿)。这是一个巨大的数字,对于一个只有288行的表。您的查询将生成124183590000000000000000行(正如我前面所说)。

下面是返回6879707136的查询的执行图:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74312362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档