SparkSQL は、サブクエリのサポート、特に WHERE 句の制限に直面しています。この記事ではこのトピックに焦点を当てていますが、Spark の最近のバージョン (2.0) ではサブクエリに対するより強力なサポートが提供されていることに注意することが重要です。この応答では、SparkSQL におけるサブクエリの歴史的な制限と現状について詳しく説明します。
Spark 2.0 以降
Spark 2.0 では、サブクエリに大幅な改善が導入されました。取り扱い。相関サブクエリと非相関サブクエリの両方がサポートされるようになりました。サポートされるシナリオの例は次のとおりです。
select * from l where exists (select * from r where l.a = r.c)
Spark 2.0 以前
Spark 2.0 より前では、サブクエリは FROM 句に制限されており、以前の Hive の動作に従っていました。バージョン0.12。 WHERE 句のサブクエリはサポートされていませんでした。この制限は、サブクエリが JOIN 操作を使用して表現できるという事実から生じています。
たとえば、samplcsv テーブルの最大給与未満の給与を要求するクエリ:
sqlContext.sql( "select sal from samplecsv where sal < (select MAX(sal) from samplecsv)" ).collect().foreach(println)
は失敗します。無効な構文を示すエラーが発生して実行されます。 Spark の以前のバージョンでの解決策には、JOIN を使用してクエリを書き換える必要がありました。
sqlContext.sql( "select l.sal from samplecsv l JOIN (select MAX(sal) as max_salary from samplecsv) r ON l.sal < r.max_sale" ).collect().foreach(println)
計画された機能
将来を見据えて、Spark はさらに多くの機能強化を導入する予定です。サブクエリのサポートへ。
結論
SparkSQL のサブクエリ機能には、大幅な進化を遂げました。 Spark 2.0 の導入により、サブクエリが広くサポートされるようになり、開発者は複雑なクエリをより簡単に表現できるようになりました。
以上がSparkSQL のサブクエリ機能はどのように進化しましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。