Spark SQLを使用したデータのクエリー

Spark SQLでは、SQL言語のバリエーションを使用してSparkクエリーを実行できます。

Spark SQLでは、SQL言語のバリエーションを使用してSparkクエリーを実行できます。Spark SQLには、Spark DatasetをScalaとJavaに返し、対話形式でSQLシェルを使用するためのAPIが含まれています。

Spark SQLの基礎

DSEでは、DSEクラスターに格納され、Sparkを使用して実行されるデータに対して、Spark SQLを使用したリレーショナル・クエリーを実行できます。Spark SQLは、分散されたデータ・コレクションにまたがって問い合わせを行うための統一リレーショナル・クエリー言語であり、リレーショナル・データベースで使用されるSQL言語のバリエーションをサポートします。Spark SQLは、Sparkデータ・セットに対してSQLクエリーを実行する機能を含んでおり、SharkおよびHiveに取って代わるクエリー言語として設計されています。従来型SparkアプリケーションをSpark SQLクエリーと組み合わせて使用すると、大規模なデータセットを分析することができます。

SparkSessionクラスとそのサブクラスは、リレーショナル・クエリーをSparkで実行するためのエントリー・ポイントです。

DataFrameは、名前が付けられたカラム内に編成されたSpark Datasetで、従来のリレーショナル・データベースのテーブルと似ています。CSVファイルやSpark RDDなど、どのSparkデータ・ソースからでもDataFrameインスタンスを作成でき、DSEの場合はデータベースにテーブルを作成できます。DSEでは、DSEトランザクション・クラスター内のデータからSpark SQLテーブルにアクセスする際、テーブルをHiveメタストアに登録することから、そのテーブルに対してSQLクエリーを実行することができます。

注: Spark SQLセッションで、自分で作成または破壊するテーブルや、削除するテーブル・データは、ベースとなるDSEデータベースに反映されるのではなく、そのセッションのメタストアにのみ反映されます。

Spark SQLシェルの起動

Spark SQLシェルを使用して、対話形式でSpark SQLクエリーを実行できます。シェルを起動するには、dse spark-sqlを実行します。

dse spark-sql

DSE内のSpark SQLシェルは自動的にSparkセッションを作成して、Spark SQL Thriftサーバーに接続してベースとなるJDBC接続に対処します。

Spark SQLセッションでベースとなるデータベース・テーブルのスキーマが変更された場合(CQLを使用して列が追加された場合など)は、テーブルをドロップし、メタストアを更新して、適切なスキーマでテーブルに対してクエリーの実行を続けてください。

DROP TABLE tablename;
SHOW TABLES;

スキーマが変更されたテーブルに対するクエリーは、ランタイム例外を引き起こします。

Spark SQLの制限事項

  • あるファイル・システムから、別のファイル・システムのテーブルにデータを読み込むことはできません。
    CREATE TABLE IF NOT EXISTS test (id INT, color STRING) PARTITIONED BY (ds STRING); 
    LOAD DATA INPATH 'hdfs2://localhost/colors.txt' OVERWRITE INTO TABLE test PARTITION (ds ='2008-08-15');

    最初の行により、デフォルトのファイル・システムにテーブルが作成されます。二行目は、別のファイル・システムのパスからそのテーブルにデータを読み込もうとしますが、失敗します。