ホームページ > データベース > mysql チュートリアル > SQL 結合の UDF が予期した結合ではなくデカルト積を生成することがあるのはなぜですか?

SQL 結合の UDF が予期した結合ではなくデカルト積を生成することがあるのはなぜですか?

Patricia Arquette
リリース: 2024-12-18 16:38:17
オリジナル
134 人が閲覧しました

Why Do UDFs in SQL Joins Sometimes Produce Cartesian Products Instead of Expected Joins?

SQL クエリで UDF がデカルト積を引き起こす理由

SQL を使用する場合、ユーザー定義関数 (UDF) によって予期しないパフォーマンスの問題が発生する可能性があります。これは結合操作で特に顕著であり、UDF が目的の完全外部結合ではなくデカルト積をもたらす可能性があります。

デカルト積の原因

UDF の使用には次のことが必要です。潜在的に無限の領域と非決定的な動作を伴う任意の関数の評価。これらの関数の値を決定するには、システムは考えられるすべての引数の組み合わせを考慮し、デカルト積を計算する必要があります。

指定された関数で提供される SQL クエリを考えてみましょう。 Databricks-Question:

-- Query 1: Join without UDF
SELECT col1, col2 FROM table1 AS t1 JOIN table2 AS t2 ON t1.foo = t2.bar;

-- Query 2: Join with UDF
SELECT col1, col2 FROM table1 AS t1 JOIN table2 AS t2 ON equals(t1.foo, t2.bar);
ログイン後にコピー

クエリ 1 では、単純な等価条件によりデータ シャッフルが可能になります。 foo 列と bar 列に基づいて、期待どおりの結果が得られます。ただし、クエリ 2 では、イコール UDF を使用すると、すべての可能なペアの組み合わせに対して関数を評価する必要があり、結果としてデカルト積が得られます。

解決策

外部関数の強制デカルト積に対する結合は、通常、Spark SQL エンジンを変更しない限り不可能です。ただし、UDF 自体を最適化して評価の数を減らすと、パフォーマンスの低下の一部を軽減できる可能性があります。

以上がSQL 結合の UDF が予期した結合ではなくデカルト積を生成することがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート