将 PostgreSQL 嵌套 JSON 转换为 Tableau 中的数值数组
Convert PostgreSQL nested JSON to numeric array in Tableau
我有一个 PostgreSQL 数据库,其中包含一个带有个人记录的 table test_table
。第一列是简单的 store_id
,第二列 meausurement
是嵌套的 json.
store_id | measurement
----------------------
0 | {...}
measurement
栏的格式如下:
{
'file_info': 'xxxx',
'data': {
'contour_data': {
'X': [-97.0, -97.0, -97.0, -97.0, -97.0, -97.0],
'Y': [-43.0, -41.0, -39.0, -39.0, -38.0, -36.0]
}
}
}
我想在 Tableau 的散点图中绘制 Y
与 X
。因此,我使用 Tableau 的 PostgreSQL 连接器成功连接了数据库。从 this 页面我了解到,我必须使用自定义 SQL 查询从 json 对象中提取数据,因为 Tableau 不直接支持 Postgres 的 json
数据类型.我已经在 Tableau 中尝试了以下自定义 SQL 查询:
select
store_id as store_id,
measurement#>>'{data, contour_data, X}' as contour_points_x,
measurement#>>'{data, contour_data, Y}' as contour_points_y
from test_table
成功将两个数组提取到两个新列 contour_points_x
和 contour_points_y
。但是,这两个新列在 string
类型的 Tableau 中,因此我无法将它们用作绘图的数据源。
我必须如何调整自定义 SQL 查询才能在 Tableau 散点图中绘制数据数组 table?
看来您需要拆分列。检查这个 https://help.tableau.com/current/pro/desktop/en-us/split.htm
编辑 - 当您可以可靠地假设每个列表中点数的上限时,链接方法就会起作用。此处描述了一种拆分任意大小列表的方法 https://apogeeintegration.com/blog/apogee-busts-out-multi-value-cells-using-tableau-prep-builder
答案是几个函数 and/or 语法操作的串联。必须
- 使用
#>
运算符挖掘 json
和 return 它 as json
type (不是 text
像 >>#
那样输入)。
- 使用
json_array_elements_text()
将json
扩展为一组text
。
- 使用类型转换运算符
::
将 text
转换为 float
/* custom SQL Query in Tableau */
select
store_id as store_id,
json_array_elements_text(measurement#>'{data, contour_data, X}')::float as contour_points_x,
json_array_elements_text(measurement#>'{data, contour_data, Y}')::float as contour_points_y,
from test_table
两个结果列现在都作为离散度量出现在 Tableau Sheet 中。更改为离散维度允许根据需要绘制 contour_points_y
与 contour_points_x
。
我有一个 PostgreSQL 数据库,其中包含一个带有个人记录的 table test_table
。第一列是简单的 store_id
,第二列 meausurement
是嵌套的 json.
store_id | measurement
----------------------
0 | {...}
measurement
栏的格式如下:
{
'file_info': 'xxxx',
'data': {
'contour_data': {
'X': [-97.0, -97.0, -97.0, -97.0, -97.0, -97.0],
'Y': [-43.0, -41.0, -39.0, -39.0, -38.0, -36.0]
}
}
}
我想在 Tableau 的散点图中绘制 Y
与 X
。因此,我使用 Tableau 的 PostgreSQL 连接器成功连接了数据库。从 this 页面我了解到,我必须使用自定义 SQL 查询从 json 对象中提取数据,因为 Tableau 不直接支持 Postgres 的 json
数据类型.我已经在 Tableau 中尝试了以下自定义 SQL 查询:
select
store_id as store_id,
measurement#>>'{data, contour_data, X}' as contour_points_x,
measurement#>>'{data, contour_data, Y}' as contour_points_y
from test_table
成功将两个数组提取到两个新列 contour_points_x
和 contour_points_y
。但是,这两个新列在 string
类型的 Tableau 中,因此我无法将它们用作绘图的数据源。
我必须如何调整自定义 SQL 查询才能在 Tableau 散点图中绘制数据数组 table?
看来您需要拆分列。检查这个 https://help.tableau.com/current/pro/desktop/en-us/split.htm
编辑 - 当您可以可靠地假设每个列表中点数的上限时,链接方法就会起作用。此处描述了一种拆分任意大小列表的方法 https://apogeeintegration.com/blog/apogee-busts-out-multi-value-cells-using-tableau-prep-builder
答案是几个函数 and/or 语法操作的串联。必须
- 使用
#>
运算符挖掘json
和 return 它 asjson
type (不是text
像>>#
那样输入)。 - 使用
json_array_elements_text()
将json
扩展为一组text
。 - 使用类型转换运算符
::
将text
转换为float
/* custom SQL Query in Tableau */
select
store_id as store_id,
json_array_elements_text(measurement#>'{data, contour_data, X}')::float as contour_points_x,
json_array_elements_text(measurement#>'{data, contour_data, Y}')::float as contour_points_y,
from test_table
两个结果列现在都作为离散度量出现在 Tableau Sheet 中。更改为离散维度允许根据需要绘制 contour_points_y
与 contour_points_x
。