ジョブフローでGCSやSFTPサーバーなどのストレージからファイルをインポートする場合、スキーマを指定する箇所は以下の2箇所あります。
テーブルのスキーマ指定
下記のいずれかのタイミングで指定されます
テーブル新規作成時のオプションで明示的に指定
テーブル新規作成時にCSVファイルを管理画面からアップロード
テーブルを「置き換え」ジョブで更新
空のテーブルを「追加」ジョブで更新
ジョブのスキーマ指定
下記のいずれかのタイミングで指定されます
ジョブフローのジョブ設定で明示的に指定
「スキーマの自動検出」により暗黙的に決定(スキーマ指定をしない場合)
エラーになる主なパターン
スキーマ関連のジョブエラーは、主に下記です。
「追加」ジョブで、テーブルのスキーマ指定とジョブのスキーマ指定が一致していない場合
例
データ型の不一致
カラム名の不一致
テーブルのスキーマ指定よりジョブのスキーマ指定の方がカラム数が多い
(S3からのインポートの場合、) テーブルのスキーマ指定とジョブのスキーマ指定のカラム数が異なる
「ジョブのスキーマ指定」がファイル内の実データと矛盾する場合
例
データと「対応するデータ型の正規形式」の不一致
カラム数の不一致
エラー例:"message":"Error while reading data, error message: Too many values in row starting at position: 93. Found 4 column(s) while expected 1."
スキーマで指定するフィールドは1つだが、実データだと4つになっているためエラーになっています。
この実データを取り込みたい場合は、スキーマで4つのフィールドを指定してください。カラム順の不一致
エラーにならない主なパターン
ただし、下記の場合はエラーになりません。
「置き換え」ジョブで、テーブルのスキーマ指定とジョブのスキーマ指定が異なる場合
ジョブで指定したスキーマで、テーブルのスキーマが上書きされます
「追加」ジョブで、テーブルのスキーマ指定とジョブのスキーマ指定についてカラムの順番のみが異なる場合
データ型やカラム名が一致していれば、順番が違っていても正常に取り込まれます
「追加」ジョブで、テーブルのスキーマ指定よりジョブのスキーマ指定の方がカラム数のみが少ない場合 (S3からのインポートを除く)
ジョブによる更新データに含まれないテーブル側のカラムは、NULLで更新されます