Redshift 上的无效数字

新手上路,请多包涵

我正在尝试将一些数据从舞台加载到关系环境,但发生了一些我无法弄清楚的事情。

我正在尝试运行以下查询:

 SELECT
  CAST(SPLIT_PART(some_field,'_',2) AS BIGINT) cmt_par
FROM
  public.some_table;

some_field 是一列,其中包含两个数字并用下划线连接的数据,如下所示:

 some_field -> 38972691802309_48937927428392

我正在尝试获得第二部分。

也就是说,这是我得到的错误:

 [Amazon](500310) Invalid operation: Invalid digit, Value '1', Pos 0,
Type: Long
Details:
 -----------------------------------------------
  error:  Invalid digit, Value '1', Pos 0, Type: Long
  code:      1207
  context:
  query:     1097254
  location:  :0
  process:   query0_99 [pid=0]
  -----------------------------------------------;

Execution time: 2.61s
Statement 1 of 1 finished

1 statement failed.

从字面上看,有些数字不是有效数字。我已经尝试获取引发错误的确切数据,它似乎是一个正常的字段,就像我期望的那样。即使我抛出 NULL 字段也会发生这种情况。

我认为这将是一个编码错误,但我还没有找到任何参考来解决这个问题。有人有什么想法吗?

谢谢大家。

原文由 Maurício Borges 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
1 个回答

当您使用 Glue 作业将数据从任何数据源插入到 Redshift 时:

Glue 将重新排列数据 然后 复制,这可能会导致此问题。即使在使用 apply-mapping 之后,这也发生在我身上。

就我而言, datatype 根本不是问题。在源代码中,它们被强制转换为与 Redshift 中的字段完全匹配。

Glue 按列名的字母顺序重新排列列,然后将数据复制到 Redshift 表中 (这显然会引发错误,因为我的第一列是 ID 键,不像其他字符串列)。

为了解决这个问题,我在 Glue 中使用了一个 SQL 查询来运行一个选择命令,该命令具有表中列的正确顺序。 .奇怪的是为什么 Glue 即使在使用 apply-mapping 之后也会这样做,但我使用的解决方法有所帮助。

原文由 prash 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进