databricks環境でデータパイプライン構築をしていた際、加工したDataframeをSQLクエリ内に埋め込んでtableの代わりに利用していました。注意点として、f構文無しの場合「{df}」と記述し、f構文ありの場合「{{df}}」にする必要があります。
f構文を利用しない場合
加工したDataframe(df_target)に対して、店舗リストが格納されているDataframe(df_store_list)と照合し、不足している店舗がないかを確認する際に使用しました。
import pyspark.pandas as ps
from textwrap import dedent # 文字列を見やすくするライブラリ
df_store_list = ps.Dataframe() # Dataframeを作成
df_target = ps.Dataframe() # Dataframeを作成
query = dedent("""
select
store_num
from
{df_store_list}
except
select
store_num
from
{df_target}
""")
df_result = ps.sql(sql, df_store_list=df_store_list, df_target=df_target) #「埋め込んだ変数名」=「加工したdataframe名」
print(df_result.shape)
display(df_result)
f構文を利用して変数を参照させる場合
{{df}}と囲む必要があります。
import pyspark.pandas as ps
from textwrap import dedent # 文字列を見やすくするライブラリ
df = ps.Dataframe() # Dataframeを作成
deli_plan_day_param = "2024-05-01" # クエリ内に参照する変数
query = dedent(f"""
select
store_num,
item_id,
stock_qty,
deli_plan_bin,
deli_plan_day,
from
{{df}}
where
deli_plan_day=to_date("{deli_plan_day_param}")
""")
# to_date("{deli_plan_day_param}") -> Date型で「2024-05-01」が入っている
df_result = ps.sql(query, df=df) #「埋め込んだ変数名」=「加工したdataframe名」
print(df_result.shape)
display(df_result)
※dataframeを複数埋め込みたい場合は、df1=df1,df2=df2と続けて書きます。
コメント