0
votes

Alternative à l'auto-rejoindre

J'ai une table - SupplyNetwork, y compris quatre colonnes:

CustomerID, fournisseur, fournisseur_productid, achat_year

.

Je souhaite construire une paire client où les deux clients ontchètent le même produit du même fournisseur d'une année focale. J'utilise le auto-jointure pour le faire dans bigquery .mais c'est trop lent. Toute alternative? xxx


2 commentaires

Conseil d'aujourd'hui: utilisez toujours la syntaxe joindre . Plus facile à écrire (sans erreur), plus facile à lire (et à maintenir) et plus facile à convertir en une jointure extérieure si nécessaire. (Notez que ce n'est pas la réponse à votre problème de performance.)


Vous devez passer à A.CUSTOMERID pour éviter les doublons. Comme il est maintenant, vous obtenez les deux, B et B, A.


3 Réponses :


0
votes

Utilisez une syntaxe de jointure et indexez la colonne de la clientèle xxx


1 commentaires

Le temps d'exécution NOPE restera le même, quelle que soit la syntaxe que vous utilisez.Indexing peut aider s'il n'est pas un OLTP, car les indices ralentissent avec plusieurs inserts et mises à jour.



0
votes

Vous pouvez utiliser l'agrégation pour obtenir tous les clients em> qui répondent aux conditions d'une seule ligne: xxx pré>

Vous pouvez alors obtenir des paires à l'aide des opérations de tableau: P >

with pss as (
      select Purchase_Year, Supplier_productID, SupplierID,
             array_agg(distinct CustomerID) as customers
      from supplynetwork sn
      group by Purchase_Year, Supplier_productID, SupplierID
     )
select c1, c2, pss.*
from pss cross join
     unnest(pss.customers) c1 cross join
     unnest(pss.customers) c2
where c1 < c2;


0 commentaires

0
votes

Vous pouvez utiliser croix rejoindre , qui (même si un cartésien) peut probablement vous donner un avantage de la simplicité. Essayez cette requête ci-dessous et voyez si c'est moins cher que votre base: xxx


0 commentaires