簡體   English   中英

SQL/BigQuery - 一起銷售的產品列表

[英]SQL/BigQuery - List of products sold together

你好嗎?

我有一個包含 DATE、TICKET_ID(交易 ID)和 PRODUCT_ID(已售產品)的銷售表。 我想要一份每天一起銷售的商品清單(也就是說,今天產品 X 和產品 Y 一起銷售了 10 次,昨天產品 X 和產品 Y 一起銷售了 5 次......)

我有這個代碼,但是它有兩個問題:

1-生成反向重復。 例子:

product_id    product_id_bought_with  counting
12345         98765                   130
98765         12345                   130
abcde         fghij                   88
fghij         abcde                   88

2-此代碼在沒有數據列的情況下運行良好。 輸入后數據量要大得多,並且出現限制錯誤。 “查詢執行期間資源超出:無法在分配的 memory 中執行查詢。峰值使用量:限制的 152%。頂部 memory 消費者:ORDER BY 操作:99% 其他/未歸因:1%”

我的代碼:

  SELECT
    c.DATE,
    c.product_id,
    c.product_id_bought_with,
    count(*) counting
    
    FROM ( SELECT a.DATE, a.product_id, b.product_id as product_id_bought_with
      FROM `MY-TABLE` a
      
      INNER JOIN `THE-SAME-TABLE` b
      ON a.ID_TICKETS = b.ID_TICKETS
      AND a.product_id != b.product_id
      AND a.DATE = b.DATE
    ) c

    GROUP BY DATE, product_id, product_id_bought_with
    ORDER BY counting DESC

我對如何做到這一點持開放態度。 提前致謝!

編輯:示例示例

CREATE TABLE `project_id.dataset.table_name` (
    DAT_VTE DATE,
    ID_TICKET STRING,
    product_id int
);

INSERT INTO `project_id.dataset.table_name` (DAT_VTE, ID_TICKET, product_id)
VALUES 
(DATE('2022-01-01'), '123_abc', 876123),
(DATE('2022-01-01'), '123_abc', 324324),
(DATE('2022-01-02'), '456_def', 876123),
(DATE('2022-01-02'), '456_def', 324324),
(DATE('2022-01-02'), '456_def', 432321),
(DATE('2022-05-23'), '987_xyz', 876123),
(DATE('2022-05-23'), '987_xyz', 324324)

根據您的要求,您可以嘗試以下查詢:

with mytable as(
 
 select *,row_number()over (partition by DAT_VTE,ID_TICKET)rownum from `project_id.dataset.MY-TABLE`
)
 
select DAT_VTE
,product_id
,product_id_bought_with
,count(*) counting
from (
select a.DAT_VTE,a.ID_TICKET,a.product_id as product_id, b.product_id as product_id_bought_with
from mytable a
join mytable b
ON a.ID_TICKET   = b.ID_TICKET       
     AND a.DAT_VTE = b.DAT_VTE
     and a.rownum <b.rownum
)
GROUP BY DAT_VTE, product_id, product_id_bought_with

根據您提供的錯誤,資源超出錯誤通常在操作需要在單個計算單元上收集所有數據時觸發,如果不適合,則作業將失敗。 對大量數據進行排序涉及大量計算資源,如果使用分區,則可以更好地利用這些資源。

以下是解決您的問題的方法:

1 通常分區有助於解決文檔和此鏈接中給出的資源問題。

2 您也可以嘗試拆分查詢,將每個單獨的子/內部查詢的結果寫入另一個表作為臨時存儲空間以供進一步處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM