S3 の CSV ファイルに分割されたデータがあります。
- s3://bucket/dataset/p=1/*.csv (パーティション #1)
- ...
- s3://bucket/dataset/p=100/*.csv (パーティション #100)
s3://bucket/dataset/ で分類子を実行すると、150 列 (c1、...、c150) が検出され、さまざまなデータ型が割り当てられるため、結果は非常に有望に見えます。
結果のテーブルを Athena にロードしてクエリ ( select * from dataset limit 10
) を実行すると、次のエラー メッセージが表示されます。
HIVE_PARTITION_SCHEMA_MISMATCH: テーブルとパーティションのスキーマが一致しません。タイプは互換性がなく、強制できません。テーブル 'tests.dataset' の列 'c100' は型 'string' として宣言されていますが、パーティション 'AANtbd7L1ajIwMTkwOQ' は列 'c100' を型 'boolean' として宣言しています。
まず第一に、「AANtbd7L1ajIwMTkwOQ」の使用方法がわかりません...しかし、Glue のパーティションのリストから、c100 が文字列として分類されているパーティションとブール値として分類されているパーティションがあることがわかります。テーブルスキーマはそれを文字列としてリストしていますが。
これは、c100 をテーブル スキーマに一致する文字列として分類するパーティションにクエリを制限すると、クエリが機能することも意味します。c100 をブール値として分類するパーティションを使用すると、クエリは上記のエラー メッセージで失敗します。
いくつかの CSV 列 c100 を見ると、3 つの異なる値が含まれているようです。
- 真実
- 間違い
- [空] (...、、...のように)
おそらく一部の行にタイプミスが含まれている可能性があり (おそらく)、一部のパーティションは文字列として分類されますが、これは単なる理論であり、ファイルの数とサイズのために検証が困難です。
私もMSCK REPAIR TABLE dataset
無駄に努力しました。
これに対する迅速な解決策はありますか?たぶん、すべてのパーティションに文字列を使用するように強制しますか? パーティションのリストを見ると、無効になっている「スキーマの編集」ボタンがあります。
または、すべての行をチェックして破棄または修復する Glue ジョブを作成する必要がありますか?