gpt4 book ai didi

apache-spark - 在 Databricks/Spark 中的 SQL 中为变量分配一个动态值

转载 作者:行者123 更新时间:2023-12-04 01:36:40 30 4
gpt4 key购买 nike

我觉得我一定在这里遗漏了一些明显的东西,但我似乎无法在 Spark SQL 中动态设置变量值。

假设我有两张 table ,tableSrctableBuilder ,我正在创建 tableDest .

我一直在尝试变体

SET myVar FLOAT = NULL

SELECT
myVar = avg(myCol)
FROM tableSrc;

CREATE TABLE tableDest(
refKey INT,
derivedValue FLOAT
);


INSERT INTO tableDest
SELECT
refKey,
neededValue * myVar AS `derivedValue`
FROM tableBuilder

在 T-SQL 中执行此操作是微不足道的,对于 Microsoft ( DECLARE ... SELECT ) 而言,这是一个令人惊讶的胜利。然而,Spark 抛出
Error in SQL statement: ParseException:
mismatched input 'SELECT' expecting <EOF>(line 53, pos 0)

但我似乎无法将派生值分配给变量以供重用。我尝试了一些变体,但最接近的是将变量分配给 select 语句的字符串。

Databricks Screenshot

请注意,这是从 T-SQL 中一个功能齐全的脚本改编而来的,所以我不会很快将十几个 SQL 变量分开来用 Python spark 查询来计算所有这些变量,只是为了插入 {var1} , {var2}等在数百行 f 字符串中。我知道如何做到这一点,但它会很困惑、困难、难以阅读、迁移速度较慢,而且维护起来更糟,如果可能的话,我希望避免这种情况。

最佳答案

套装使用的命令是用于 spark.conf get/set,而不是用于 SQL 查询的变量

对于 SQL 查询,您应该使用小部件:

https://docs.databricks.com/notebooks/widgets.html

但是,有一种在 SQL 上使用 spark.conf 参数的方法:
%python spark.conf.set('personal.foo','bar')
然后你可以使用:
$sql select * from table where column = '${personal.foo}';
技巧部分是您必须在 spark.conf 的名称上使用“点”(或其他特殊字符),否则 SQL 单元会期望您在运行时为 $variable 提供值(它看起来像一个错误对我来说,我相信用 {} 四舍五入应该就足够了)

关于apache-spark - 在 Databricks/Spark 中的 SQL 中为变量分配一个动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59277255/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com