我想从 Snowpark python 代码调用 Snowflake 中定义的外部函数。例如,我尝试像这样操作数据框:
dataframe = dataframe.with_column('name', sql_expr("select test_ext(3,4)"))
然而,函数
sql_expr
的输入没有被 python 解释器识别。
(这里,test_ext() 是一个与 Azure 集成的外部函数。)
syntax error line 1 at position 85 unexpected 'select'.
syntax error line 1 at position 103 unexpected '4'.
我使用的语法正确吗?官方文档没有给出任何示例
sql_expr
我无法重现相同的错误,但它应该像下面这样工作:
from snowflake.snowpark.functions import function
test_ext = function("test_ext")
dataframe = dataframe.with_column('name', test_ext(3,4))
一种选择是使用 Ponder,它实现了 pandas.apply,无需太多额外的工作。一个技巧是您需要使用 Python 3.8 编写函数,因为 3.10 python 代码中的操作码与 Snowflake 不兼容:
In [1]: import snowflake.connector
...: import ponder
...: import modin.pandas as pd
...: snowflake_conn = snowflake.connector.connect(
...: user="<USER>",
...: password="<PASS>",
...: account="<ACCOUNT>",
...: role="<ROLE>",
...: database="<DB>",
...: schema="<SCHEMA>",
...: WAREHOUSE="<WH>",
...: )
...: ponder.init()
...: ponder.configure(default_connection=snowflake_conn)
In [2]: df = pd.read_sql("ORDERS", snowflake_conn)
...: df['O_TOTALPRICE']
Out[2]:
0 69652.08
1 125083.85
2 125538.32
3 95524.74
4 269980.56
...
976 85624.93
977 14243.38
978 53057.98
979 59465.14
980 142011.37
Name: O_TOTALPRICE, Length: 981, dtype: float64
In [3]: def add_ten(x):
...: return x + 10
...:
In [4]: df['O_TOTALPRICE'].apply(add_ten)
Out[4]:
0 69662.08
1 125093.85
2 125548.32
3 95534.74
4 269990.56
...
976 85634.93
977 14253.38
978 53067.98
979 59475.14
980 142021.37
Name: O_TOTALPRICE, Length: 981, dtype: float64