This is an automated email from the ASF dual-hosted git repository. github-bot pushed a commit to branch asf-site in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/asf-site by this push: new 14891ab547 Publish built docs triggered by b4053801bf6e9345af1e856404d11a437410a7d8 14891ab547 is described below commit 14891ab54786d93c2e93794c8e2791d34ca9bb4e Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com> AuthorDate: Thu Jun 26 15:26:12 2025 +0000 Publish built docs triggered by b4053801bf6e9345af1e856404d11a437410a7d8 --- .../functions/adding-udfs.md.txt | 29 ++++++++++++++++------ library-user-guide/functions/adding-udfs.html | 29 ++++++++++++++++------ searchindex.js | 2 +- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/_sources/library-user-guide/functions/adding-udfs.md.txt b/_sources/library-user-guide/functions/adding-udfs.md.txt index bfe72eca30..74851b4e59 100644 --- a/_sources/library-user-guide/functions/adding-udfs.md.txt +++ b/_sources/library-user-guide/functions/adding-udfs.md.txt @@ -235,7 +235,9 @@ async fn main() { ## Adding a Scalar Async UDF -A Scalar Async UDF allows you to implement user-defined functions that support asynchronous execution, such as performing network or I/O operations within the UDF. +A Scalar Async UDF allows you to implement user-defined functions that support +asynchronous execution, such as performing network or I/O operations within the +UDF. To add a Scalar Async UDF, you need to: @@ -249,14 +251,13 @@ use arrow::array::{ArrayIter, ArrayRef, AsArray, StringArray}; use arrow_schema::DataType; use async_trait::async_trait; use datafusion::common::error::Result; -use datafusion::common::internal_err; +use datafusion::common::{internal_err, not_impl_err}; use datafusion::common::types::logical_string; use datafusion::config::ConfigOptions; -use datafusion::logical_expr::async_udf::{ - AsyncScalarFunctionArgs, AsyncScalarUDFImpl, -}; +use datafusion_expr::ScalarUDFImpl; +use datafusion::logical_expr::async_udf::AsyncScalarUDFImpl; use datafusion::logical_expr::{ - ColumnarValue, Signature, TypeSignature, TypeSignatureClass, Volatility, + ColumnarValue, Signature, TypeSignature, TypeSignatureClass, Volatility, ScalarFunctionArgs }; use datafusion::logical_expr_common::signature::Coercion; use log::trace; @@ -287,8 +288,9 @@ impl AsyncUpper { } } +/// Implement the normal ScalarUDFImpl trait for AsyncUpper #[async_trait] -impl AsyncScalarUDFImpl for AsyncUpper { +impl ScalarUDFImpl for AsyncUpper { fn as_any(&self) -> &dyn Any { self } @@ -305,13 +307,24 @@ impl AsyncScalarUDFImpl for AsyncUpper { Ok(DataType::Utf8) } + fn invoke_with_args( + &self, + _args: ScalarFunctionArgs, + ) -> Result<ColumnarValue> { + not_impl_err!("AsyncUpper can only be called from async contexts") + } +} + +/// The actual implementation of the async UDF +#[async_trait] +impl AsyncScalarUDFImpl for AsyncUpper { fn ideal_batch_size(&self) -> Option<usize> { Some(10) } async fn invoke_async_with_args( &self, - args: AsyncScalarFunctionArgs, + args: ScalarFunctionArgs, _option: &ConfigOptions, ) -> Result<ArrayRef> { trace!("Invoking async_upper with args: {:?}", args); diff --git a/library-user-guide/functions/adding-udfs.html b/library-user-guide/functions/adding-udfs.html index dabfc84954..88822e529c 100644 --- a/library-user-guide/functions/adding-udfs.html +++ b/library-user-guide/functions/adding-udfs.html @@ -931,7 +931,9 @@ for the same input.</p></li> </section> <section id="adding-a-scalar-async-udf"> <h2>Adding a Scalar Async UDF<a class="headerlink" href="#adding-a-scalar-async-udf" title="Link to this heading">ΒΆ</a></h2> -<p>A Scalar Async UDF allows you to implement user-defined functions that support asynchronous execution, such as performing network or I/O operations within the UDF.</p> +<p>A Scalar Async UDF allows you to implement user-defined functions that support +asynchronous execution, such as performing network or I/O operations within the +UDF.</p> <p>To add a Scalar Async UDF, you need to:</p> <ol class="arabic simple"> <li><p>Implement the <code class="docutils literal notranslate"><span class="pre">AsyncScalarUDFImpl</span></code> trait to define your async function logic, signature, and types.</p></li> @@ -943,14 +945,13 @@ for the same input.</p></li> <span class="k">use</span><span class="w"> </span><span class="n">arrow_schema</span><span class="p">::</span><span class="n">DataType</span><span class="p">;</span> <span class="k">use</span><span class="w"> </span><span class="n">async_trait</span><span class="p">::</span><span class="n">async_trait</span><span class="p">;</span> <span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">common</span><span class="p">::</span><span class="n">error</span><span class="p">::</span><span class="nb">Result</span><span class="p">;</span> -<span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">common</span><span class="p">::</span><span class="n">internal_err</span><span class="p">;</span> +<span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">common</span><span class="p">::{</span><span class="n">internal_err</span><span class="p">,</span><span class="w"> </span><span class="n">not_impl_err</span><span class="p">};</span> <span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">common</span><span class="p">::</span><span class="n">types</span><span class="p">::</span><span class="n">logical_string</span><span class="p">;</span> <span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">config</span><span class="p">::</span><span class="n">ConfigOptions</span><span class="p">;</span> -<span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">logical_expr</span><span class="p">::</span><span class="n">async_udf</span><span class="p">::{</span> -<span class="w"> </span><span class="n">AsyncScalarFunctionArgs</span><span class="p">,</span><span class="w"> </span><span class="n">AsyncScalarUDFImpl</span><span class="p">,</span> -<span class="p">};</span> +<span class="k">use</span><span class="w"> </span><span class="n">datafusion_expr</span><span class="p">::</span><span class="n">ScalarUDFImpl</span><span class="p">;</span> +<span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">logical_expr</span><span class="p">::</span><span class="n">async_udf</span><span class="p">::</span><span class="n">AsyncScalarUDFImpl</span><span class="p">;</span> <span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">logical_expr</span><span class="p">::{</span> -<span class="w"> </span><span class="n">ColumnarValue</span><span class="p">,</span><span class="w"> </span><span class="n">Signature</span><span class="p">,</span><span class="w"> </span><span class="n">TypeSignature</span><span class="p">,</span><span class="w"> </span><span class="n">TypeSignatureClass</span><span class="p">,</span><span class="w"> </span><span class="n">Volatility</span><span class="p">,</span> +<span class="w"> </span><span class="n">ColumnarValue</span><span class="p">,</span><span class="w"> </span><span class="n">Signature</span><span class="p">,</span><span class="w"> </span><span class="n">TypeSignature</span><span class="p">,</span><span class="w"> </span><span class="n">TypeSignatureClass</span><span class="p">,</span><span class="w"> </span><span class="n">Volatility</span><span class="p">,</span><span class="w"> </span><span class="n">ScalarFunctionArgs</span> <span class="p">};</span> <span class="k">use</span><span class="w"> </span><span class="n">datafusion</span><span class="p">::</span><span class="n">logical_expr_common</span><span class="p">::</span><span class="n">signature</span><span class="p">::</span><span class="n">Coercion</span><span class="p">;</span> <span class="k">use</span><span class="w"> </span><span class="n">log</span><span class="p">::</span><span class="n">trace</span><span class="p">;</span> @@ -981,8 +982,9 @@ for the same input.</p></li> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> +<span class="sd">/// Implement the normal ScalarUDFImpl trait for AsyncUpper</span> <span class="cp">#[async_trait]</span> -<span class="k">impl</span><span class="w"> </span><span class="n">AsyncScalarUDFImpl</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">AsyncUpper</span><span class="w"> </span><span class="p">{</span> +<span class="k">impl</span><span class="w"> </span><span class="n">ScalarUDFImpl</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">AsyncUpper</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">as_any</span><span class="p">(</span><span class="o">&</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="kp">&</span><span class="nc">dyn</span><span class="w"> </span><span class="n">Any</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="bp">self</span> <span class="w"> </span><span class="p">}</span> @@ -999,13 +1001,24 @@ for the same input.</p></li> <span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">DataType</span><span class="p">::</span><span class="n">Utf8</span><span class="p">)</span> <span class="w"> </span><span class="p">}</span> +<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">invoke_with_args</span><span class="p">(</span> +<span class="w"> </span><span class="o">&</span><span class="bp">self</span><span class="p">,</span> +<span class="w"> </span><span class="n">_args</span><span class="p">:</span><span class="w"> </span><span class="nc">ScalarFunctionArgs</span><span class="p">,</span> +<span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="nb">Result</span><span class="o"><</span><span class="n">ColumnarValue</span><span class="o">></span><span class="w"> </span><span class="p">{</span> +<span class="w"> </span><span class="n">not_impl_err</span><span class="o">!</span><span class="p">(</span><span class="s">"AsyncUpper can only be called from async contexts"</span><span class="p">)</span> +<span class="w"> </span><span class="p">}</span> +<span class="p">}</span> + +<span class="sd">/// The actual implementation of the async UDF</span> +<span class="cp">#[async_trait]</span> +<span class="k">impl</span><span class="w"> </span><span class="n">AsyncScalarUDFImpl</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">AsyncUpper</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">ideal_batch_size</span><span class="p">(</span><span class="o">&</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="nb">Option</span><span class="o"><</span><span class="kt">usize</span><span class="o">></span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">invoke_async_with_args</span><span class="p">(</span> <span class="w"> </span><span class="o">&</span><span class="bp">self</span><span class="p">,</span> -<span class="w"> </span><span class="n">args</span><span class="p">:</span><span class="w"> </span><span class="nc">AsyncScalarFunctionArgs</span><span class="p">,</span> +<span class="w"> </span><span class="n">args</span><span class="p">:</span><span class="w"> </span><span class="nc">ScalarFunctionArgs</span><span class="p">,</span> <span class="w"> </span><span class="n">_option</span><span class="p">:</span><span class="w"> </span><span class="kp">&</span><span class="nc">ConfigOptions</span><span class="p">,</span> <span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="nb">Result</span><span class="o"><</span><span class="n">ArrayRef</span><span class="o">></span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">trace</span><span class="o">!</span><span class="p">(</span><span class="s">"Invoking async_upper with args: {:?}"</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">);</span> diff --git a/searchindex.js b/searchindex.js index af18153a00..575988958c 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles":{"!=":[[56,"op-neq"]],"!~":[[56,"op-re-not-match"]],"!~*":[[56,"op-re-not-match-i"]],"!~~":[[56,"id19"]],"!~~*":[[56,"id20"]],"#":[[56,"op-bit-xor"]],"%":[[56,"op-modulo"]],"&":[[56,"op-bit-and"]],"(relation, name) tuples in logical fields and logical columns are unique":[[12,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[56,"op-multiply"]],"+":[[56,"op-plus"]],"-":[[56,"op-minus"]],"/":[[56,"op-divide"]],"<":[[56,"op-lt"]],"< [...] \ No newline at end of file +Search.setIndex({"alltitles":{"!=":[[56,"op-neq"]],"!~":[[56,"op-re-not-match"]],"!~*":[[56,"op-re-not-match-i"]],"!~~":[[56,"id19"]],"!~~*":[[56,"id20"]],"#":[[56,"op-bit-xor"]],"%":[[56,"op-modulo"]],"&":[[56,"op-bit-and"]],"(relation, name) tuples in logical fields and logical columns are unique":[[12,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[56,"op-multiply"]],"+":[[56,"op-plus"]],"-":[[56,"op-minus"]],"/":[[56,"op-divide"]],"<":[[56,"op-lt"]],"< [...] \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@datafusion.apache.org For additional commands, e-mail: commits-h...@datafusion.apache.org