postgresql - Pentaho 数据集成输入/输出位类型错误

标签 postgresql pentaho kettle data-integration pdi

我在工作中的许多项目中都使用 Pentaho Data Integration。我们的数据库主要使用 Postgres。我们的一张旧表有两列设置为类型 bit(1) 以存储 0 表示假,1 表示真。

我的任务是将生产表与我们开发环境中的副本同步。我正在使用表输入读取数据并立即尝试执行插入/更新。但是,由于 PDI 转换为 bool 值,它失败了。我更新了查询以将值转换为整数以保留 0 和 1,但是当我再次运行它时,我的转换失败了,因为整数不能是位值。

几天来我一直在尝试不同的方法,例如使用 javascript 步骤转换为位,但我无法成功读取位类型并使用插入/更新步骤来存储数据。我也不认为插入/更新步骤具有更新用于定义列数据类型的 SQL 的功能。

数据库连接使用:

  • 连接类型:PostgreSQL
  • 访问: native (JDBC)
  • 支持 bool 数据类型:true
  • 引用数据库中的所有内容:true

注意:更改表以更改数据类型在此时不是可选的。目前有太多应用程序依赖于此表,因此以这种方式更改它可能会导致不良影响

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

您可以使用“as assignment”选项在目标数据库中创建转换对象(例如从字符变化到位)。 AS ASSIGNMENT 允许在插入期间自动应用此转换。 http://www.postgresql.org/docs/9.3/static/sql-createcast.html

这里有一些概念验证:

CREATE FUNCTION cast_char_to_bit (arg CHARACTER VARYING) 
    RETURNS BIT(1) AS
$$
    SELECT
    CASE WHEN arg = '1' THEN B'1'
        WHEN arg = '0' THEN B'0'
        ELSE NULL
    END
$$
LANGUAGE SQL;

CREATE CAST (CHARACTER VARYING AS BIT(1)) 
WITH FUNCTION cast_char_to_bit(CHARACTER VARYING) 
AS ASSIGNMENT;

现在您应该能够将单字符字符串插入/更新到 bit(1) 列中。但是,您需要将输入列转换为字符变化/文本,以便在表输入步骤之后将其转换为字符串,并在插入/更新步骤中转换为字符变化。

也许,您可以使用现有的转换函数创建转换对象,这些转换函数已经在 postgres 中定义(请参阅 pg_cast、pg_type 和 pg_proc 表,通过 oid 连接),但不幸的是我没能做到这一点。

编辑 1: 抱歉之前的解决方案。添加从 bool 值到位的转换看起来更合理:您甚至不需要在表输入步骤中转换数据。

CREATE FUNCTION cast_bool_to_bit (arg boolean) 
    RETURNS BIT(1) AS
$$
    SELECT
    CASE WHEN arg THEN B'1'
        WHEN NOT arg THEN B'0'
        ELSE NULL
    END
$$
LANGUAGE SQL;

CREATE CAST (BOOLEAN AS BIT(1)) 
WITH FUNCTION cast_bool_to_bit(boolean) 
AS ASSIGNMENT;

关于postgresql - Pentaho 数据集成输入/输出位类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241488/

相关文章:

sql - postgres 中的聚合函数中的 DISTINCT ON

c# - Entity Framework Core : Npgsql. PostgresException: 23505: 重复键值违反唯一约束

sql - 获取有效的日期范围。最小值和最大值

sql - 如何使用 psql 命令行将参数传递给 .sql 文件?

spring - 使用 Spring MVC 确认密码的最简单方法

pentaho - 从 SQL Server 存储过程获取字段

Pentaho BI 市场

java - 水壶使用PGP加密文件

mysql - Pentaho - Group By step 不返回时间戳值

merge - 如何在 Pentaho 中合并流?