apache / apache/datafusion-python
[Discussion] Define python UDF using `CREATE FUNCTION` SQL statement
- Linguagem predominante
- Python
- Estrelas
- 604
- Forks
- 174
- Merge médio
- 1d 7h
- PRs com merge (30d)
- 4
Descrição
**Is your feature request related to a problem or challenge? Please describe what you are trying to do.**
I would like to be able to define a python function using SQL `CREATE FUNCTION` statement.
Something like
```rust
let sql = r#"
CREATE FUNCTION to_miles(DOUBLE)
RETURNS DOUBLE
LANGUAGE PYARROW
AS '
import pyarrow.compute as pc
conversation_rate_multiplier = 0.62137119
def to_miles(km_data):
return pc.multiply(km_data, conversation_rate_multiplier)
'
"#;
ctx.sql(sql).await?.show().await?;
ctx.sql("select double_col, to_miles(double_col) from t")
.await?
.show()
.await?;
```
**Describe the solution you'd like**
datafusion provides pluggable `datafusion::execution::context::FunctionFactory` which could be wired to interpret python function definitions.
we could provide column based function definitions (`LANGUAGE PYARROW`) or row based (`LANGUAGE PYTHON`)
**Describe alternatives you've considered**
**Additional context**
- databricks has [similar functionality](https://docs.databricks.com/aws/en/udf/unity-catalog)
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Direção de pesquisa
Comece em datafusion::execution::context::FunctionFactory e rastreie como as definições SQL de CREATE FUNCTION poderiam ser conectadas à execução de UDFs Python. Esclareça se LANGUAGE PYARROW baseado em colunas e LANGUAGE PYTHON baseado em linhas estão no escopo e, em seguida, valide o fluxo de CREATE FUNCTION e SELECT mostrado na issue.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python, rust, sql
- Domínio
- databases
- Tipo de issue
- Funcionalidade
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Status de atividade
- Ativa
- Clareza
- Precisa de esclarecimento
- Facilidade para iniciantes
- 35/100