2016-04-01 7 views
1

データフローによってBQからテーブルをエクスポートしていますが、ParDoで処理したときに各データの "string"フィールドの最初のデータ型がBQスキーマにあるかどうかにかかわらず、TableRowになります。例えばDataflow ParDoのTableRow.get( "field_name")のみをStringにキャストすることができます

、私のテーブルはINTEGER入力されたコラム「FIELDA」を持っていると言う:

 public void processElement(ProcessContext c) throws Exception { 
     TableRow row = c.element(); 
     String str = (String) c.get("fieldA"); // OK 
     Integer i = (Integer) c.get("fieldA"); // Throw "String cannot be cast to Integer" exception 
    } 

それはバグですか、それは私だけでしょうか?私だけでなく、とにかく周りを回るには?整数型の場合、私はまだInteger.valueOf(String)を行うことができますが、Timestampフィールドを解析するときには少しハッキリでエラーが発生しやすいでしょう。

FYI、私はBigQueryTableRowIteratorによるとBlockDataflowPipelineRunner

答えて

0

を使用しています:整数がBigQueryのエクスポートのJSON形式を一致させる文字列としてエンコードされていること

注意を。

だから、Integer.parseIntにする必要があります。ご迷惑をおかけして申し訳ございませんが、BigQueryIO.Readから読み取ったTableRowの値の入力に関するドキュメントを改善する必要があります。このドキュメントはあまり発見できません。

+0

私の質問は、 "fieldA"は最初の場所ではbqスキーマのINTEGER型ですが、ParDoではString型を返していますが、 –

+0

フィールドの型がINTEGERだがParDoあなたにバグのように聞こえるStringを与えます。これはバッチまたはストリーミングパイプラインですか?どのランナーを使用していますか? (direct/Dataflow/sparkかflink?) – jkff

+0

と申し訳ありませんが、私はこれを明確にしませんでしたが、私には、 'TableRow.get()'がBQスキーマに関係なく文字列を返すということがあります。たとえば、BQスキーマタイプのタイムスタンプを使用すると、ParDoでも文字列タイプが返されます –

関連する問題