Redshift の無効な数字 質問する

Redshift の無効な数字 質問する

ステージからリレーショナル環境にデータを読み込もうとしているのですが、原因が分からない問題が発生しています。

次のクエリを実行しようとしています:

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

some_field は、次のようにアンダースコアで結合された 2 つの数値を持つデータを持つ列です。

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 フィールドを破棄しても、このエラーが発生します。

エンコードエラーだと思ったのですが、解決方法の参考資料が見つかりませんでした。誰か何かご存知ですか?

みなさんありがとう。

ベストアンサー1

私はこの問題に遭遇し、少し調べてみました。どうやら、このエラーはValue '1'誤解を招く部分で、実際の問題はこれらのフィールドが数値として有効ではないということのようです。

私の場合は空の文字列でした。私は問題の解決策を見つけました。このブログ投稿これは基本的に、数値ではないフィールドを見つけて、キャストする前に null で埋めるというものです。

select cast(colname as integer) from
(select
 case when colname ~ '^[0-9]+$' then colname
 else null
 end as colname
 from tablename);

結論: この Redshift エラーは完全に混乱を招くものであり、修正する必要があります。

おすすめ記事