我正在开发一个数据工程项目,该项目使用 Python 中的 Polars 和 Redshift 作为数据仓库来处理来自多个来源的数据。我需要一个强大的策略来保持 Python Polars 函数和用户定义函数 (UDF),这些函数旨在在两个环境中执行相同的操作。
考虑这个例子(实际上函数要长得多):
Python 极坐标函数:
def to_flatcase(sr: pl.Series):
sr = sr.str.to_lowercase().str.replace_all(r"[^a-z0-9]", "")
return sr
对应的Redshift SQL UDF:
CREATE OR REPLACE FUNCTION to_flatcase(title VARCHAR)
RETURNS VARCHAR
IMMUTABLE
AS $$
SELECT REGEXP_REPLACE(
LOWER($1),
'[^a-z0-9]',
''
)
$$ LANGUAGE SQL;
我的挑战是:
我正在寻找能够最大限度地减少手动工作并降低两种实现之间不一致风险的策略。
为了将 X 语言翻译成 Y 语言,您可以使用编译器。 Alfred Aho 和 Jeffrey Ullman 所著的《编译器:原理、技术和工具》一书是您想要开始学习的地方。
使用编译器的词法分析部分,您可以创建一个系统,在创建标记时,您可以根据数据库对其进行分析。如果标记的完整长度匹配,则调用该函数。否则继续其他编译器步骤。