Snowpark-Python动态连接

vtwuwzda  于 2023-01-29  发布在  Python
关注(0)|答案(2)|浏览(153)

我已经搜索了大量的文档,试图找到一个例子来说明我正在尝试做的事情。我承认,更大的问题可能是我缺乏python专业知识。所以我在这里接触,希望有人能给我指出正确的方向。我正在尝试创建一个python函数,基于函数参数动态查询表。下面是我正在尝试做的一个例子:

def validateData(_ses, table_name,sel_col,join_col, data_state, validation_state):
 
    sdf_t1 = _ses.table(table_name).select(sel_col).filter(col('state') == data_state)
    sdf_t2 = _ses.table(table_name).select(sel_col).filter(col('state') == validation_state)
    df_join = sdf_t1.join(sdf_t2, [sdf_t1[i] == sdf_t2[i] for i in join_col],'full')
    return df_join.to_pandas()

这将被称为这样的:

df = validateData(ses,'table_name',[col('c1'),col('c2')],[col('c2'),col('c3')],'AZ','TX')

我遇到的问题是函数的第5行:

df_join = sdf_t1.join(sdf_t2, [col(sdf_t1[i]) == col(sdf_t2[i]) for i in join_col],'full')

我知道代码是不正确的,但我希望它能解释我想做的事情。如果有人有任何建议,如果这是可能的或如何,我将不胜感激。

tcomlyy6

tcomlyy61#

与其加入数据框,我认为使用直接SQL更容易,并将数据拉入雪框,然后将其转换为Pandas数据框。

from snowflake.snowpark import Session
import pandas as pd

#snow df creation using SQL
data = session.sql("select t1.col1, t2.col2, t2.col2 from mytable t1 full outer join mytable2 t2 on t1.id=t2.id where t1.col3='something'")

#Convert snow DF to Pandas DF. You can use this pandas data frame.
data= pd.DataFrame(data.collect())
3pmvbmvn

3pmvbmvn2#

本质上你需要的是从两个变量列表中创建一个python表达式,我没有比使用eval更好的主意了。
也许可以试试eval(" & ".join(["(col(sdf_t1[i]) == col(sdf_t2[i]))" for i in join_col])。请注意,我还没有完全测试这个,只是想抛出一个想法。

相关问题