はじめに
自分用メモ。
複雑な変換をするとき、
SELECT結果をデータフレームに→データフレームをTempViewに→TempViewから新しいSELECT を作成→・・・ というようなことをしていたが、今はパラメータ化クエリが推奨されているらしい。
テキスト→日付などの型変換もpython内ででき、SQLインジェクションにも対応できてよいとか
参考:
https://www.databricks.com/jp/blog/parameterized-queries-pyspark
今までのやり方
CTEのようにViewを使って多段での変換をしていた。
pyspark
df = spark.sql("SELECT * FROM <テーブル名>")
display(df)
pyspark
df.createOrReplaceTempView("tempV1")
df2 = spark.sql("""
SELECT
*,quantity * 1.1 as `110% QTY`
FROM
tempV1
""")
display(df2)
パラメータ化クエリを使ってデータフレームをソースにする
spark.sql はpythonオブジェクトをそのまま埋め込みできるのでちょっと楽ちん
pyspark
df = spark.sql("SELECT * FROM <テーブル名>")
display(df)
pyspark
df2 = spark.sql("""
SELECT
*,quantity * 1.1 as `110% QTY`
FROM
{df}
"""
,df=df)
display(df2)