首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Denodo (VQL)选择数组中的参数值

使用Denodo (VQL)选择数组中的参数值
EN

Stack Overflow用户
提问于 2019-09-11 03:15:17
回答 2查看 845关注 0票数 0

我正在尝试做一些看似简单的事情,但是找不到Denodo的VQL (虚拟查询语言)的正确语法。我在名为"location“的列中有这样一个字符串: XXXX-YYYY-ZZZZ- AAAA -BBBB,它的长度是可变的,我想要获取第四个集合的值(即本例中的AAAA)。我像这样使用Denodo split函数:

从my_table中选择SPLIT("-",location)3作为my_variable

然而,3不起作用。我尝试了一系列的变种:

选择SPLIT("-",location)3.value AS my_variable FROM my_table

选择SPLIT("-",location).column3 AS my_variable FROM my_table

等。

有人能帮我找出从数组中返回单个参数的正确语法吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-12 13:06:06

代码语言:javascript
复制
SELECT field_1[3].string 
FROM (SELECT split('-', 'XXXX-YYYY-ZZZZ-AAAA-BBBB') as field_1)

您必须使用子查询来执行此操作,因为访问数组元素(即[<number>])的语法只能与字段名一起使用。您不能在表达式结果的旁边使用类似[4]的内容。

票数 2
EN

Stack Overflow用户

发布于 2019-09-11 04:34:56

这个问题很有帮助:https://community.denodo.com/answers/question/details?questionId=90670000000CcQPAA0

我通过创建一个将数组另存为字段的视图来使其正常工作:

代码语言:javascript
复制
CREATE OR REPLACE VIEW p_sample_data FOLDER = '/stack_overflow' 
AS SELECT bv_sample_data.location AS location
, bv_sample_data.id AS id
, split('-', location) AS location_array 
FROM bv_sample_data;

请注意,我创建了一个名为location_array的列

现在,您可以在视图顶部使用select语句提取所需的信息:

代码语言:javascript
复制
SELECT location, id, location_array[2].string
FROM p_sample_data

location_array[2]是第三个元素,.string告诉denodo你想要字符串值(我想这就是它要做的……您必须阅读文档中有关复合值的更多信息:https://community.denodo.com/docs/html/browse/6.0/vdp/vql/advanced_characteristics/management_of_compound_values/management_of_compound_values )

另一种可能的方法是使用数组创建一个视图,然后展平该数组,尽管我还没有尝试过这种方法。

更新:我尝试创建一个平面化数组的视图,然后使用分析(或“窗口”)函数来获取row_number() OVER (PARTITION BY id order by ID ASC),但分析/窗口函数不适用于平面文件源。

因此,如果你走“扁平化”的路线,而你的源系统不能使用解析函数,你可以直接使用rownum()函数,但是你必须用你想要的列号来偏移值,然后使用余数除法来提取你想要的数据。

如下所示:

代码语言:javascript
复制
--My view with the array is called p_sample_data
CREATE OR REPLACE VIEW f_p_sample_data FOLDER = '/stack_overflow' AS 
SELECT location AS location
   , id AS id
   , string AS string
   , rownum(2) AS rownumber 
FROM FLATTEN p_sample_data AS v ( v.location_array);

现在,使用rownum()函数(偏移量为2),我可以在where子句中使用余数除法来获得我想要的数据:

代码语言:javascript
复制
SELECT location, id, string, rownumber
FROM f_p_sample_data
WHERE rownumber % 5 = 0

坦率地说,我认为更简单的方法是将位置数据留在数组中,然后使用location_array[2].string语法提取第n列,其中2是第n列,从零开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57876974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档