google-bigquery - 传递一个数组到 bigquery sql 中的 js UDF
问题描述
我正在尝试从某些表中获取数据,并将它们传递给 bigquery 中的 JavaScript UDF。
我编写了以下代码,但我似乎无法理解将我的选择结果存储在所需结构中的正确语法,然后如何将其传递给我的 udf 函数。
DECLARE arg1 ARRAY<STRING>;
DECLARE arg2 ARRAY<STRUCT <col1 STRING, col2 STRING> >;
DECLARE res1 ARRAY<STRING>;
SET arg1 = ARRAY<STRING>["Adams", "Joseph", "Davis", "Mary", "Jesus"] ;
CREATE TEMP FUNCTION myfunction(arg1 ARRAY<STRING> , arg2 ARRAY<STRUCT<col1 STRING, col2 STRING> > )
RETURNS ARRAY<STRING>
LANGUAGE js AS '''
return ["a", "b", "c"]
''';
SET ARG2 = (SELECT AS STRUCT(
WITH TBL1 AS
(SELECT 'Adams' as LastName, 50 as SchoolID UNION ALL
SELECT 'Buchanan', 52 UNION ALL
SELECT 'Coolidge', 52 UNION ALL
SELECT 'Davis', 51 UNION ALL
SELECT 'Eisenhower', 77)
SELECT LastName as col1, SchoolID as col2 FROM TBL1));
SET res1 = select res FROM UNNEST(myfunction( arg1, arg2 )) res;
解决方案
您共享的代码存在一些语法错误,但基于程序逻辑,我对更具声明性的样式进行了一些调整并更正了这些错误。
arg1
即使TBL1
如果需要我们也可以将其包含在 CTE中,我也保留了arg2
现在是通过从TBL1
as a中选择的值创建的,并且使用和STRUCT
重命名列as col1
as col2
- 由于您的 UDF 接受为字符串,因此我已将其转换
SchoolId
为string
col2
- 我
id
为演示目的添加了另一个字段,因为我将按此id
列对数据进行分组或聚合,以获取arg2
UDF 所需的结构参数数组 - 我最终选择
id
并使用正确格式的参数调用您UDF
。array_agg
用于在此处创建结构数组。结果在名为的列中res2
DECLARE arg1 ARRAY<STRING>;
SET arg1 = ARRAY<STRING>["Adams", "Joseph", "Davis", "Mary", "Jesus"] ;
CREATE TEMP FUNCTION myfunction(arg1 ARRAY<STRING> , arg2 ARRAY<STRUCT<col1 STRING, col2 STRING> > )
RETURNS ARRAY<STRING>
LANGUAGE js AS '''
return ["a", "b", "c"]
''';
WITH TBL1 AS (
SELECT 'Adams' as LastName, 50 as SchoolID UNION ALL
SELECT 'Buchanan', 52 UNION ALL
SELECT 'Coolidge', 52 UNION ALL
SELECT 'Davis', 51 UNION ALL
SELECT 'Eisenhower', 77
),
tbl2 as (
SELECT
1 as id,
STRUCT(
LastName as col1,
CAST(SchoolID as STRING) as col2
) as arg2
FROM TBL1
)
select id, myfunction(arg1, array_agg( arg2)) as res1 from tbl2
group by id
让我知道这是否适合您。
推荐阅读
- css - 当同一容器中的另一个 div 具有未定义的高度时,设置容器内 div 的大小
- asterisk - 在被叫方使用 Asterisk 中的 ARI 接听电话后 x 秒后挂断电话
- javascript - 将一串赞成计数转换为 JavaScript 中的数字数组的函数
- java - 将kafka-consumer设置为consumer-group中的容灾消费者?
- java - 我应该如何以及通过使用哪个定位器来自动化任何站点中左侧导航的主要和子元素?
- typescript - TypeScript:使用字符串文字时的类型推断
- node.js - nodeJS mongoose 如何制作一个特殊的 get crud
- javascript - 具有相同日期格式的javascript日期
- spring - 如何使用 LDAP 和基于角色的数据库授予权限来实现 Spring Security?
- python - ndarrays 的滚动窗口