使用 json_array_elements 扩展 JSON 数组时,是否可以将索引值添加到 postgreSQL 查询的行中?
Is it possible to add index values to the rows of a postgreSQL query when expanding JSON array with json_array_elements?
我有一个 json 格式的简历数据数据库,我正在尝试对其进行转换。
每个 jsib 中的一个部分是 work_history,这是一个 json 数组的形式,即
"work_experience":[
{
"job_title":"title",
"job_description":"description"
},
{
"job_title":"title",
"job_description":"description"
}
]
我正在遍历每个简历(json 文件)并使用 dbt 和 postgreSQL 将此数据导入到新的 table 中,数组的每个元素都是一个新行,其相关元数据为简历。这是我为此使用的代码
select
json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience') as we,
json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience') -> 'job_title' as "name",
rjt.uuid as uuid
from raw_json_table rjt
我需要做的最后一件事是添加一个列,列出每个工作在其单独的工作经验数组中的索引,即如果一个工作是数组中的第三个元素,它将在“ source_location”列。我怎样才能生成这个索引,使每个新的 json 文件都从 0 开始。
将函数移至 FROM 子句(应使用 set-returning 函数)。然后你可以使用 with ordinality
这也是 returns 指示数组内索引的列
select w.experience as we,
w.experience ->> 'job_title' as "name",
w.experience ->> 'job_description' as "description",
w.idx as "index",
rjt.uuid as uuid
from raw_json_table rjt
left join json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience') with ordinality
as w(experience, idx) on true
left join
是必需的,这样 raw_json_table
中不包含数组元素的行仍然包含在内。
我有一个 json 格式的简历数据数据库,我正在尝试对其进行转换。 每个 jsib 中的一个部分是 work_history,这是一个 json 数组的形式,即
"work_experience":[
{
"job_title":"title",
"job_description":"description"
},
{
"job_title":"title",
"job_description":"description"
}
]
我正在遍历每个简历(json 文件)并使用 dbt 和 postgreSQL 将此数据导入到新的 table 中,数组的每个元素都是一个新行,其相关元数据为简历。这是我为此使用的代码
select
json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience') as we,
json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience') -> 'job_title' as "name",
rjt.uuid as uuid
from raw_json_table rjt
我需要做的最后一件事是添加一个列,列出每个工作在其单独的工作经验数组中的索引,即如果一个工作是数组中的第三个元素,它将在“ source_location”列。我怎样才能生成这个索引,使每个新的 json 文件都从 0 开始。
将函数移至 FROM 子句(应使用 set-returning 函数)。然后你可以使用 with ordinality
这也是 returns 指示数组内索引的列
select w.experience as we,
w.experience ->> 'job_title' as "name",
w.experience ->> 'job_description' as "description",
w.idx as "index",
rjt.uuid as uuid
from raw_json_table rjt
left join json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience') with ordinality
as w(experience, idx) on true
left join
是必需的,这样 raw_json_table
中不包含数组元素的行仍然包含在内。