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

Talend Casting of JSON string to JSON or JSONB in PostgreSQL

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

CREATE TABLE myTable( myJSON as JSONB)

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

ERROR: column "json_string" is of type json but expression is of type character varying

Hint: You will need to rewrite or cast the expression. Position: 54

如果我使用 python 或只是普通的 SQL 和 PostgreSQL insert 我可以插入一个字符串,例如 '{"Name":"blah"} ' 它明白了。

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

知道如何在 Talend 中完成此操作吗?

您可以通过打开 "tPostgresqlOutput" 组件上的 "Advanced Settings" 选项卡来添加 type-cast。考虑以下示例:

在这种情况下,"tPostgresqlOutput_1" 的输入行有一列 data。此列的类型为 String,并映射到类型为 VARCHAR 的数据库列 data(Talend 默认建议):

接下来,打开 tPostgresqlOutput_1 的组件设置并找到 "Advanced settings" 选项卡:

在此选项卡上,您可以用新表达式替换现有的data列:

  • name 列中,指定目标列名称。
  • SQL 表达式 列中,进行类型转换。在这种情况下:"?::json"`. Note the usage of the placeholder character?`` 将替换为原始值。
  • 位置中,指定Replace。这将用您的 SQL 表达式(包括类型转换)替换 Talend 建议的值。
  • 作为参考列使用源值。

这应该可以解决问题。

这是一个示例架构,其中我有输入行 'r',其中有 question_json 和 choice_json 列,它们是 json 字符串。我从中知道我想提取的关键,这就是我的做法

您应该查看 question_value 和 choice_value 列。希望对你有帮助