データフローによって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
私の質問は、 "fieldA"は最初の場所ではbqスキーマのINTEGER型ですが、ParDoではString型を返していますが、 –
フィールドの型がINTEGERだがParDoあなたにバグのように聞こえるStringを与えます。これはバッチまたはストリーミングパイプラインですか?どのランナーを使用していますか? (direct/Dataflow/sparkかflink?) – jkff
と申し訳ありませんが、私はこれを明確にしませんでしたが、私には、 'TableRow.get()'がBQスキーマに関係なく文字列を返すということがあります。たとえば、BQスキーマタイプのタイムスタンプを使用すると、ParDoでも文字列タイプが返されます –