我有一个表,其中包含两列 metric 和 dimensionName=dimensionValue 键值对,因此数据存储为:
公制 | 尺寸 |
---|---|
A | {x=1, y=2, z=3} |
A | {x=1, y=2, z=3} |
A | {x=2, y=2, z=3} |
A | {x=2, y=3, z=3} |
A | {x=3, y=4, z=3} |
我想获得此表中涉及维度 x 和 y 的所有唯一组合,即我想将 x=1、y=2 视为第 1 行和第 2 行中的相同组合,因此最终涉及 x 和 y 的键值对的基数在此表中将是 4,因为将有 4 个 x 和 y 值的唯一组合 (x=1,y=2)、(x=2,y=2)、(x=2,y=3) 和 (x =3,y=4).
到目前为止,我尝试使用 unnest 但它给了我两列 dimensionName 和 dimensionValue 但我不确定如何获得 x 和 y 值在不同行中的唯一组合
SELECT
dimension_name, dimension_value
FROM
"metrics"
CROSS JOIN
UNNEST(dimensions) AS dimension_map(dimension_name, dimension_value)
WHERE metric='A' AND dimension_name IN ('x', 'y');
非常感谢任何帮助。谢谢!
在Presto中,您可以通过以下步骤得到您想要的结果:
这里是查询:
SELECT
DISTINCT
dimensions['x'] as dim_x,
dimensions['y'] as dim_y
FROM
"metrics"
WHERE
metric = 'A'
AND
dimensions['x'] IS NOT NULL
AND
dimensions['y'] IS NOT NULL
dim_x | dim_y |
---|---|
1 | 2 |
2 | 2 |
2 | 3 |
3 | 4 |