テーブルのスキーマとジョブフローのスキーマが異なる場合はエラーになる?
ジョブフローで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で更新されます
Updated 12 months ago