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

cod*_*rer 2 mysql postgresql talend

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

CREATE TABLE myTable( myJSON as JSONB)
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该作业时,我收到以下错误:

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

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

如果我使用python或只是普通的SQL与PostgreSQL插入,我可以插入一个字符串,如'{"Name":"blah"}',它理解它.

INSERT INTO myTable(myJSON) VALUES ('{"Name":"blah"}');
Run Code Online (Sandbox Code Playgroud)

任何想法是如何在Talend完成的?

exh*_*uma 5

您可以通过打开"tPostgresqlOutput"组件上的"高级设置"选项卡来添加类型转换.请考虑以下示例:

在这种情况下,"tPostgresqlOutput_1"的输入行有一列data.此列类型的String并且被映射到数据库列data类型的VARCHAR(如由拓蓝建议的默认):

tPostgreslOutput_1架构

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

高级设置选项卡

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

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

类型铸造

这应该可以解决问题.