创建函数

适用于:勾选“是”砖的SQL勾选“是”Databricks运行时9.1及以上版本

创建一个SQL标量函数或表函数,该函数接受一组参数并返回一个标量值或一组行。

语法

创建取代临时函数如果存在function_namefunction_parameter(,...返回data_type|表格column_spec(,...])特征...返回表达式|查询function_parameterparameter_namedata_type默认的default_expression评论parameter_commentcolumn_speccolumn_namedata_type评论column_comment特征语言SQL|确定的|评论function_comment|包含SQL|读取SQL数据|SQL安全定义者

参数

  • 或替换

    如果指定,则替换具有相同名称和签名(参数数量和参数类型)的函数。不能使用不同的签名替换现有的函数。这主要用于更新函数体和函数的返回类型。不能指定此参数如果存在

  • 临时

    正在创建的函数的范围。当你指定临时,则创建的函数在当前会话中有效且可见。目录中没有持久化条目。

  • 如果不存在

    如果指定,则仅在函数不存在时创建该函数。如果指定的函数已经存在于系统中,则函数创建成功(没有抛出错误)。不能指定此参数取代

  • function_name

    函数的名称。对于永久函数,可以选择使用模式名限定函数名。如果名称没有限定,则在当前模式中创建永久函数。

  • function_parameter

    指定函数的参数。

    • parameter_name

      参数名在函数中必须是唯一的。

    • data_type

      任何支持的数据类型。

    • 默认的default_expression

      适用于:勾选“是”砖的SQL勾选“是”Databricks运行时10.4及以上

      当函数调用不为形参赋值时使用的可选默认值。default_expression必须可塑的data_type.表达式不能引用另一个参数或包含子查询。

      当为一个参数指定默认值时,以下所有参数也必须具有默认值。

    • 评论发表评论

      参数的可选描述。评论必须是STRING字面值。

  • 返回data_type

    标量函数的返回数据类型。

  • 返回表(column_spec[,…])

    表函数结果的签名。

    • column_name

      列名在签名中必须唯一。

    • data_type

      任何支持的数据类型。

    • 评论column_comment

      列的可选描述。评论必须是STRING字面值。

  • 返回{表达式|查询

    函数体。对于标量函数,它可以是查询或表达式。对于表函数,它只能是一个查询。表达式不能包含:

    在函数体中,可以通过形参的非限定名称引用形参,也可以使用函数名限定形参。

  • 特征

    所有特征子句都是可选的。可以按任意顺序指定任意数量的子句,但每个子句只能指定一次。

    • 语言SQL

      函数的语言。SQL是唯一受支持的语言。

    • (不)确定的

      函数是否确定。当一个函数对于一组给定的参数只返回一个结果时,它就是确定的。

    • 评论function_comment

      函数的注释。function_comment必须是字符串字面量。

    • 包含SQL读取SQL数据

      函数是直接还是间接地从表或视图读取数据。当函数读取SQL数据时,不能指定包含SQL.如果两个子句都不指定,则该属性将从函数体派生。

    • SQL安全定义器

      函数体和任何默认表达式都使用函数所有者的授权执行。这是唯一受支持的行为。

例子

创建并使用SQL标量函数

>创建视图tc1c2作为01),12);
——创建一个不带参数的临时函数。>创建临时函数你好()返回字符串返回“Hello World !”>选择你好();你好世界——创建带参数的永久函数。>创建函数区域xy返回返回xy在查询的SELECT子句中使用SQL函数。>选择区域c1c2作为区域t0020在查询的WHERE子句中使用SQL函数。>选择t在哪里区域c1c2>012编写SQL函数。>创建函数广场x返回返回区域xx);>选择c1广场c1作为广场t000110——创建一个非确定性函数>创建函数roll_dice()返回INT确定的包含SQL评论“掷一个六面骰子”返回兰德()6)::INT+1——掷一个6面骰子>选择roll_dice();3.

创建并使用使用默认值的函数

——扩展功能,支持可变边数和骰子。——使用默认值来支持可变数量的参数>下降函数roll_dice>创建函数roll_dicenum_diceINT默认的1评论掷骰子的个数(默认值:1)num_sidesINT默认的6评论每个骰子的边数(默认值:6)返回INT确定的包含SQL评论“掷一些n面骰子”返回序列1roll_dicenum_dice1),0accx->兰德()roll_dicenum_sides)::intacc->acc+roll_dicenum_dice);投掷单个6面骰子仍然有效>选择roll_dice();3.掷3个六面骰子>选择roll_dice3.);15——掷3个10面骰子>选择roll_dice3.1021——创建带有标量子查询的SQL函数。>创建视图分数球员分数作为01),02),12),15);>创建函数avg_scorepINT返回浮动评论“获得玩家的平均分”返回选择AVG分数分数在哪里球员p>选择c1avg_scorec1t01513.5

创建一个SQL表函数

——制作两个日期之间的所有工作日>创建函数工作日开始日期结束日期返回表格day_of_week字符串一天日期返回选择提取DAYOFWEEK_ISO一天),一天选择序列工作日开始工作日结束))作为T横向视图爆炸作为一天在哪里提取DAYOFWEEK_ISO一天之间的15——返回所有工作日>选择工作日day_of_week一天工作日日期“2022-01-01”日期“2022-01-14”);12022-01-0322022-01-043.2022-01-0542022-01-0652022-01-0712022-01-1022022-01-113.2022-01-1242022-01-1352022-01-14—返回来自LATERAL相关性的日期范围的工作日>选择工作日日期“2020-01-01”),日期“2021-01-01”),日期“2022-01-01”作为开始开始),横向工作日开始开始+时间间隔“7”);3.2020-01-0142020-01-0252020-01-0312020-01-0622020-01-073.2020-01-0852021-01-0112021-01-0422021-01-053.2021-01-0642021-01-0752021-01-0812022-01-0322022-01-043.2022-01-0542022-01-0652022-01-07

替换SQL函数

—替换一个SQL标量函数。>创建取代函数广场x返回返回xx替换一个SQL表函数。>创建取代函数getempsdeptnoINT返回表格的名字字符串返回选择的名字员工e在哪里edeptnogetempsdeptno描述一个SQL表函数。>描述函数getemps函数默认的getemps类型表格输入deptnoINT返回idINT的名字字符串

请注意

不能使用不同的签名替换现有的函数。

描述一个SQL函数

>描述函数你好函数你好类型标量输入()返回字符串>描述函数区域函数默认的区域类型标量输入xy返回>描述函数roll_dice函数默认的roll_dice类型标量输入num_diceINTnum_sidesINT返回INT>描述函数扩展roll_dice函数默认的roll_dice类型标量输入num_diceINT默认的1掷骰子的个数(默认值:1)num_sidesINT默认的6每个骰子的面数(默认值:6)返回INT评论一个数量-骰子确定的数据访问包含SQL配置...老板房子@总是赢了创建时间2月12092902太平洋标准时间2022身体序列1roll_dicenum_dice1),0accx->兰德()roll_dicenum_sides)::intacc->acc+roll_dicenum_dice