私は一緒に参加したいIPアドレスのテーブルとIPアドレス範囲のテーブル(start ip、end ip)を持っています。私は次のクエリでこの作業を行うことができました:BigQueryでIP範囲に効率的に参加する
SELECT * FROM `ips` i
JOIN `ranges` a
ON NET.SAFE_IP_FROM_STRING(i.ip)
BETWEEN NET.SAFE_IP_FROM_STRING(a.start_ip)
AND NET.SAFE_IP_FROM_STRING(a.end_ip)
問題私がいる。それは本当にひどくスケールということです。 10個のIPに対してそれを行うには約8秒かかります.100は30秒かかり、1000は数分かかります。私は数千万の行のためにこれを行うことができるようにしたいと思います。 (私はNET.SAFE_IP_FROM_STRING
の出力を範囲テーブルに書き込もうとしましたが、約10%の速度しか上げず、スケーリングには役立ちません)。
範囲は重複しないので、入力テーブルのすべての行について、出力テーブルには0または1行が必要です。 LATERAL JOIN
はそれを可能にし、ほぼ確実に高速化しますが、BigQueryがそれらをサポートしているとは思いません。このクエリを高速かつスケーラブルにする方法は他にありますか?