テーブルのスキーマとジョブフローのスキーマが異なる場合はエラーになる?

ジョブフローでGCSやSFTPサーバーなどのストレージからファイルをインポートする場合、スキーマを指定する箇所は以下の2箇所あります。

  1. テーブルのスキーマ指定
    • 下記のいずれかのタイミングで指定されます
      • テーブル新規作成時のオプションで明示的に指定
      • テーブル新規作成時にCSVファイルを管理画面からアップロード
      • テーブルを「置き換え」ジョブで更新
      • 空のテーブルを「追加」ジョブで更新
  2. ジョブのスキーマ指定
    • 下記のいずれかのタイミングで指定されます
      • ジョブフローのジョブ設定で明示的に指定
      • スキーマの自動検出」により暗黙的に決定(スキーマ指定をしない場合)

エラーになる主なパターン

スキーマ関連のジョブエラーは、主に下記です。

「追加」ジョブで、テーブルのスキーマ指定とジョブのスキーマ指定が一致していない場合

    • データ型の不一致
    • カラム名の不一致
    • テーブルのスキーマ指定よりジョブのスキーマ指定の方がカラム数が多い
    • (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で更新されます