pysparksql查询,带变量和for循环

vzgqcmou  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(324)

这个问题在这里已经有答案了

在python中使用变量格式设置字符串格式(2个答案)
上个月关门了。
我正在尝试在databricks中构造sql查询,这个查询需要每年都执行,因此尝试在查询中添加year和table name作为变量,如下所示。
我试图为每年创建两个临时表,如下所示

df_Conc_2019 = df_Conc.filter(col("Year") == 2019)
df_Conc_2019.createOrReplaceTempView('Conc_2019')

df_Conc_2020 = df_Conc.filter(col("Year") == 2020)
df_Conc_2020.createOrReplaceTempView('Conc_2020')

然后我尝试将这些表(一个接一个或按年份与主表)连接起来,如下所示。但是我的查询中的$conc\u year和$year不起作用。我试图使用for循环来实现这一点,因为我有超过2年的时间来做分析。谢谢。

Conc_Year = 'Conc_2019', 'Conc_2020'
Year = 2019, 2020 

query = "select A.invoice_date, A.Program_Year, $Conc_Year.BusinessSegment, $Conc_Year.Dealer_Prov, $Conc_Year.product_id... WHERE A.ID = $Conc_Year.ID AND A.Program_Year = $Year"

df_final = spark.sql(query)
5vf7fwbs

5vf7fwbs1#

使用 f"{variable}" 用于python中的格式字符串。例如:

for Year in [2019, 2020]:
    Conc_Year = f"Conc_{Year}"
    query = f"""
        select A.invoice_date,
               A.Program_Year,
               {Conc_Year}.BusinessSegment,
               {Conc_Year}.Dealer_Prov, 
               {Conc_Year}.product_id
        from A, {Conc_Year}
        WHERE A.ID = {Conc_Year}.ID AND A.Program_Year = {Year}
    """

相关问题