Talend 将 JSON 字符串转换为 PostgreSQL 中的 JSON 或 JSONB

3

我正在尝试使用Talend获取存储在MySQL中的JSON数据,该数据类型为VARCHAR,并将其导出到以下类型的PostgreSQL 9.4表:

CREATE TABLE myTable( myJSON as JSONB)

当我尝试运行作业时,出现以下错误:

错误: 列"json_string"的类型为json,但表达式的类型为字符变量

提示: 您需要重写或转换表达式。位置: 54

如果我使用Python或仅使用PostgreSQL插入普通SQL,我可以插入类似'{"Name":"blah"}'的字符串,并且它可以理解。

INSERT INTO myTable(myJSON) VALUES ('{"Name":"blah"}');

有什么方法可以用Talend实现这个吗?

我遇到了同样的错误,但不是针对JSON。问题/限制在于Talend不支持JSONB数据类型。正如提示所示,您必须进行类型转换或更改PostgreSQL表中的数据类型。我使用tSplitRow组件进行此类类型转换。 - Jai Prakash
@JaiPrakash 你怎么使用那个组件将其转换为不同的类型? - exhuma
@exhuma 请查看我下面的回答。希望图片可见且有意义。 - Jai Prakash
2个回答

7
你可以通过在“tPostgresqlOutput”组件的“高级设置”选项卡中添加类型转换。考虑以下示例:
在本例中,“tPostgresqlOutput_1”的输入行只有一个名为data的列。该列的数据类型是String,并且被映射到数据库列data,其数据类型为VARCHAR(这是Talend默认建议的)。

tPostgreslOutput_1 schema

接下来,打开tPostgresqlOutput_1组件的设置,并找到“高级设置”选项卡:

Advanced Settings Tab

在这个选项卡上,您可以通过一个新的表达式来替换现有的data列:
  • 名称列中,指定目标列名。
  • SQL 表达式列中,进行类型转换。例如: "?::json"`。注意占位符字符?``的使用,它将被原始值替换。
  • 位置中,指定Replace。这将用您的 SQL 表达式(包括类型转换)替换 Talend 提供的值。
  • 作为参考列,使用源值。

Type Casting

这应该可以解决问题。


感谢您发布解决方案。对我非常有用。 - spdaly

0

enter image description here

这是一个示例模式,其中我有输入行'r',它具有question_json和choice_json列,这些列是json字符串。从中我知道我想要提取的键,以下是我的操作方式。

enter image description here

你应该查看问题值和选项值这两列。希望这能帮到你。

很遗憾,这不是问题的答案。您正在展示如何从数据库中读取JSON。我要找的是如何将JSON写入数据库。或者更一般地说:在写入数据库时如何进行类型转换(在这种情况下需要)。我添加了一个我发现的解决方案作为答案,它运行良好。我暂时不接受这个答案,以防有人找到更好的解决方案。 - exhuma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接