Select 使用 Denodo (VQL) 的数组中的参数值
Select Value of Parameter in Array with Denodo (VQL)
我正在尝试做一些看似简单但无法为 Denodo 的 VQL(虚拟查询语言)找到正确语法的事情。我有一个这样的字符串:XXXX-YYYY-ZZZZ-AAAA-BBBB 在一个名为 "location" 的列中,长度不同,我想获得第四组的值(即本例中的 AAAA)。我正在使用这样的 Denodo 拆分功能:
SELECT SPLIT("-",location)[3] AS my_variable FROM my_table
但是,[3] 不起作用。我尝试了很多变体:
SELECT SPLIT("-",location)[3].value AS my_variable FROM my_table
SELECT SPLIT("-",location).column3 AS my_variable FROM my_table
等等
谁能帮我找出 return 数组中单个参数的正确语法?谢谢!
这个问题有帮助:https://community.denodo.com/answers/question/details?questionId=90670000000CcQPAA0
我通过创建一个将数组保存为字段的视图使其工作:
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 语句来提取您想要的信息:
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 )
另一种可能的方法是使用数组创建视图,然后展平数组,尽管我还没有尝试过该选项。
更新:我尝试创建一个展平数组的视图,然后使用分析(或 "window")函数来获取 row_number() OVER (PARTITION BY id order by ID ASC)
,但 analytic/window 函数没有针对平面文件源工作。
因此,如果您采用 "flatten" 路线并且您的源系统无法使用分析功能,您可以直接使用 rownum() 函数,但您必须将值抵消你想要的列号,然后用余数除法取出你想要的数据。
像这样:
--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 子句中使用余数除法来获取我想要的数据:
SELECT location, id, string, rownumber
FROM f_p_sample_data
WHERE rownumber % 5 = 0
坦率地说,我认为更简单的方法是将您的位置数据留在数组中并使用 location_array[2].string
语法提取第 n 列,其中 2
是第 n 列,从零开始.
SELECT field_1[3].string
FROM (SELECT split('-', 'XXXX-YYYY-ZZZZ-AAAA-BBBB') as field_1)
您必须使用子查询来执行此操作,因为访问数组元素的语法(即 [<number>]
)只能与字段名称一起使用。您不能在表达式结果旁边使用类似 [4]
的内容。
我正在尝试做一些看似简单但无法为 Denodo 的 VQL(虚拟查询语言)找到正确语法的事情。我有一个这样的字符串:XXXX-YYYY-ZZZZ-AAAA-BBBB 在一个名为 "location" 的列中,长度不同,我想获得第四组的值(即本例中的 AAAA)。我正在使用这样的 Denodo 拆分功能:
SELECT SPLIT("-",location)[3] AS my_variable FROM my_table
但是,[3] 不起作用。我尝试了很多变体:
SELECT SPLIT("-",location)[3].value AS my_variable FROM my_table
SELECT SPLIT("-",location).column3 AS my_variable FROM my_table
等等
谁能帮我找出 return 数组中单个参数的正确语法?谢谢!
这个问题有帮助:https://community.denodo.com/answers/question/details?questionId=90670000000CcQPAA0
我通过创建一个将数组保存为字段的视图使其工作:
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 语句来提取您想要的信息:
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 )
另一种可能的方法是使用数组创建视图,然后展平数组,尽管我还没有尝试过该选项。
更新:我尝试创建一个展平数组的视图,然后使用分析(或 "window")函数来获取 row_number() OVER (PARTITION BY id order by ID ASC)
,但 analytic/window 函数没有针对平面文件源工作。
因此,如果您采用 "flatten" 路线并且您的源系统无法使用分析功能,您可以直接使用 rownum() 函数,但您必须将值抵消你想要的列号,然后用余数除法取出你想要的数据。
像这样:
--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 子句中使用余数除法来获取我想要的数据:
SELECT location, id, string, rownumber
FROM f_p_sample_data
WHERE rownumber % 5 = 0
坦率地说,我认为更简单的方法是将您的位置数据留在数组中并使用 location_array[2].string
语法提取第 n 列,其中 2
是第 n 列,从零开始.
SELECT field_1[3].string
FROM (SELECT split('-', 'XXXX-YYYY-ZZZZ-AAAA-BBBB') as field_1)
您必须使用子查询来执行此操作,因为访问数组元素的语法(即 [<number>]
)只能与字段名称一起使用。您不能在表达式结果旁边使用类似 [4]
的内容。