kayak / pypika

PyPika is a python SQL query builder that exposes the full richness of the SQL language using a syntax that reflects the resulting query. PyPika excels at all sorts of SQL queries but is especially useful for data analysis.
http://pypika.readthedocs.io/en/latest/
Apache License 2.0
2.5k stars 295 forks source link

CustomFunction #798

Open T828367-SPARK opened 6 months ago

T828367-SPARK commented 6 months ago

Hi I am using Pypika with Snowflake and trying to create a custom function for Snowflakes OBJECT_CONSTRUCT function. Snowflake docs - https://docs.snowflake.com/en/sql-reference/functions/object_construct.

This function takes in n parameters. With every odd parameter being a string, and every even parameter being a database column.

How do I create a customFunction that types a dynamic number of parameters. While also making every odd parameter a string.

SQL query should come out looking like: select site , object_construct( 'Name', tbl.name, 'Lat', tbl.site_lat, 'Long', tbl.site_long, ) as myObject from myTable tbl

Is this possible with Pypika's current functionality?

Thanks

nlassaux commented 6 months ago

Hey! Have you tried the following?

def object_construct(function_name: str, params: list[tuple[str, str]]) -> CustomFunction:
    parameters = []
    for p in params:
        params.append(param[0]) #append the param's name
        params.append(param[1]) #append the param's value
    return CustomFunction(function_name, parameters)

That'd use this system: https://github.com/kayak/pypika?tab=readme-ov-file#custom-functions