一時ビューとは
Databricksではデータフレームに対してクイックにSQLを使うために 一時ビュー(temporary view) という機能が存在します。
一時ビューはSparkセッションの中でのみ利用できるビューです。クラスターを停止するなどしてセッションを終了すると一時ビューは削除されます。デバッグなどでよく使います。
diamonds = (
spark.read.format("csv")
.option("header", "true")
.option("inferSchema", "true")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
display(diamonds)
diamonds.createOrReplaceTempView("diamonds")
%sql
SELECT * FROM diamonds;
SQLからも一時ビューは作成できるのですが、最近以下のノートブックの文法を教えていただきました。
-- mode "FAILFAST" will abort file parsing with a RuntimeException if any malformed lines are encountered
CREATE TEMPORARY VIEW diamonds
USING CSV
OPTIONS (path "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header "true", mode "FAILFAST")
こちらで説明されているものです。マニュアルではCREATE TEMPORARY VIEW
ではUSING
やOPTIONS
は使えない感じなのですが、普通に動きます。
調べてみたら、一時ビューではフォーマットやオプションを問題なく指定できました。
一時ビューにおけるフォーマットおよびオプションの指定
こちらで説明されています。
Databricks では、SQL ユーザーが CSV ファイルを読み取る際に read_files テーブル値関数を使うことをお勧めします。 read_files は Databricks Runtime 13.1 以降で使用できます。
一時ビューを使うこともできます。 一時ビューまたは read_files を使わずに、SQL を使って CSV データを直接読み取る場合は、次の制限が適用されます。
- データ ソース オプションを指定できません。
- データに対してデータ スキーマを指定できない。
言い換えると一時ビューを使う、あるいはビューの作成時にread_files
関数を使うことでオプションを指定できるということです。read_files
関数はこちらで説明されています。read_files
関数を使う場合にはフォーマットは自動で判別されます。
一時ビューを作成する際にオプションを指定できるということなので、CSV以外も試してみます。なお、オプションのmode
でFAILFAST
を指定することで、こちらにあるように、形式が正しくない場合には読み取りを中止するように指示しています。あとはファイルのパスをpath
で指定しています。
JSON
%sql
CREATE TEMPORARY VIEW nyctaxi_tmp_view_sql
USING JSON
OPTIONS (path "/databricks-datasets/nyctaxi/sample/json/", mode "FAILFAST")
%sql
SELECT * FROM nyctaxi_tmp_view_sql;
Parquet
%sql
CREATE TEMPORARY VIEW parquet_news_tmp_view_sql
USING PARQUET
OPTIONS (path "/databricks-datasets/news20.binary/data-001/training/", mode "FAILFAST")
%sql
SELECT * FROM parquet_news_tmp_view_sql;
Delta
%sql
CREATE TEMPORARY VIEW delta_nyctaxi_tmp_view_sql
USING DELTA
OPTIONS (path "/databricks-datasets/nyctaxi-with-zipcodes/subsampled/", mode "FAILFAST")
%sql
SELECT * FROM delta_nyctaxi_tmp_view_sql;
ビューでのオプション指定
ビューを作成する際にオプションを指定するには、[read_files関数]を使う必要があります。
%sql
CREATE VIEW takaakiyayoi_catalog.default.parquet_news_view AS
SELECT
*
FROM
read_files(
"/databricks-datasets/news20.binary/data-001/training/",
mode = > "FAILFAST"
)
クイックにSQLで操作したいというケースでの自由度が広がりますね。是非ご活用ください!
ちなみに普通に他の方も使われていました。