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

ジョブフローで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で更新されます