实时数仓 Hologres的jsonb格式,根据key提取出一个数组,做数组的判断,提取的数组如何转换为 int数组呢。jsonb里的 key和value是这样的 "sku_ids": [124739738, 124739741, 124739742, 124739737, 124739740, 124739739] 。 提取出来想做数组元素是否包含某个数组中元素的操作
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在实时数仓 Hologres 中,可以通过 JSONB 类型的处理函数提取出数组,并将其转换为整型数组以进行进一步的操作。以下是详细的步骤和方法:
假设 JSONB 数据存储在一个表中,字段名为 jsonb_column
,其内容如下:
{
"sku_ids": [124739738, 124739741, 124739742, 124739737, 124739740, 124739739]
}
可以使用 ->
操作符提取 sku_ids
对应的数组:
SELECT jsonb_column -> 'sku_ids' AS sku_ids_array
FROM your_table;
这将返回一个 JSONB 格式的数组。
为了对数组进行操作(如判断是否包含某个元素),需要将 JSONB 数组转换为 PostgreSQL 的原生数组类型(INT[]
)。可以使用 jsonb_array_elements_text
函数结合 ARRAY_AGG
实现这一目标。
示例 SQL 如下:
SELECT ARRAY_AGG(value::INT) AS sku_ids_int_array
FROM (
SELECT jsonb_array_elements_text(jsonb_column -> 'sku_ids') AS value
FROM your_table
) subquery;
解释: - jsonb_array_elements_text
:将 JSONB 数组展开为每一行的文本值。 - value::INT
:将文本值显式转换为整型。 - ARRAY_AGG
:将展开的值重新聚合为一个整型数组。
在 PostgreSQL 和 Hologres 中,可以使用 ARRAY_CONTAINS
函数或 @>
操作符来判断数组是否包含某个元素。
ARRAY_CONTAINS
SELECT ARRAY_CONTAINS(sku_ids_int_array, 124739738) AS contains_sku_id
FROM (
SELECT ARRAY_AGG(value::INT) AS sku_ids_int_array
FROM (
SELECT jsonb_array_elements_text(jsonb_column -> 'sku_ids') AS value
FROM your_table
) subquery
) final_query;
@>
操作符SELECT sku_ids_int_array @> ARRAY[124739738] AS contains_sku_id
FROM (
SELECT ARRAY_AGG(value::INT) AS sku_ids_int_array
FROM (
SELECT jsonb_array_elements_text(jsonb_column -> 'sku_ids') AS value
FROM your_table
) subquery
) final_query;
解释: - ARRAY_CONTAINS(array, element)
:检查数组是否包含指定元素,返回布尔值。 - @>
操作符:检查左侧数组是否包含右侧数组的所有元素。
如果需要判断 sku_ids
是否包含另一个数组中的任意元素,可以使用 ARRAY_EXCEPT
或 UNNEST
结合 IN
子句实现。
[124739738, 124739741]
中的任意元素SELECT EXISTS (
SELECT 1
FROM UNNEST(sku_ids_int_array) AS sku_id
WHERE sku_id IN (124739738, 124739741)
) AS contains_any_sku_id
FROM (
SELECT ARRAY_AGG(value::INT) AS sku_ids_int_array
FROM (
SELECT jsonb_array_elements_text(jsonb_column -> 'sku_ids') AS value
FROM your_table
) subquery
) final_query;
解释: - UNNEST
:将数组展开为多行。 - IN
子句:检查展开的值是否存在于指定的列表中。 - EXISTS
:判断是否存在满足条件的行。
TRY_CAST
)仅在特定版本中支持,请确保您的 Hologres 版本符合要求。通过上述步骤,您可以成功从 JSONB 数据中提取数组并转换为整型数组,同时实现数组的包含判断操作。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975