この形式のS3バケットには数千のファイルがあります。
├── bucket
│ ├── somedata
│ │ ├── year=2016
│ │ ├── year=2017
│ │ │ ├── month=11
│ │ | │ ├── sometype-2017-11-01.parquet
│ | | | ├── sometype-2017-11-02.parquet
│ | | | ├── ...
│ │ │ ├── month=12
│ │ | │ ├── sometype-2017-12-01.parquet
│ | | | ├── sometype-2017-12-02.parquet
│ | | | ├── ...
│ │ ├── year=2018
│ │ │ ├── month=01
│ │ | │ ├── sometype-2018-01-01.parquet
│ | | | ├── sometype-2018-01-02.parquet
│ | | | ├── ...
│ ├── moredata
│ │ ├── year=2017
│ │ │ ├── month=11
│ │ | │ ├── moretype-2017-11-01.parquet
│ | | | ├── moretype-2017-11-02.parquet
│ | | | ├── ...
│ │ ├── year=...
等
予想される動作:AWS Glue Crawlerは、somedata、moredataなどごとに1つのテーブルを作成します。子のパス名に基づいて、テーブルごとにパーティションを作成します。
実際の動作:AWS Glue Crawlerは上記の動作を実行しますが、データのパーティションごとに個別のテーブルを作成するため、数百の無関係なテーブル(およびすべてのデータが追加する余分なテーブル+新しいクロール)が発生します。
何かを設定したり、これを防ぐことができる場所がありません...これらの不要なテーブルが作成されないようにする最善の方法について誰かアドバイスがありますか?
除外に追加
**_SUCCESS
**crc
私のために働いた(awsページを参照 glue/add-crawler )。二重星は、すべてのフォルダー(つまりパーティション)の深さでファイルと一致します。 _SUCCESSが数レベル上に住んでいました。
接着剤のログを設定してください。これにより、権限エラーなどがすぐに指摘されます。
私も同じ問題を抱えていました。 AWSGlueクローラーに除外パターンとして*crc*
を追加しましたが、機能しました。または、ディレクトリ全体をクロールする場合は、*/*crc*
を追加します。
テーブル/ファイルタイプごとに個別のクローラーが必要です。したがって、s3://bucket/somedata/
を参照する1つのクローラーと、s3://bucket/moredata/
を参照する2番目のクローラーを作成します。
内部に空のフォルダがあるかどうかを確認します。 sparkがS3に書き込むとき、時々、_temporary
フォルダーは削除されません。これにより、Glueクローラーは各パーティションのテーブルを作成します。
ですから、私の場合は少し異なり、同じ振る舞いをしていました。
次のようなデータ構造を取得しました。
├── bucket
│ ├── somedata
│ │ ├── event_date=2016-01-01
│ │ ├── event_date=2016-01-02
そのため、テーブルを更新する代わりにAWS Glue Crawlerを起動したとき、このパイプラインは日付ごとに1つのテーブルを作成していました。問題を掘り下げた後、誰かがid
がID
ではなくjsonファイルにバグとして列を追加したことがわかりました。私のデータは寄木細工であるため、パイプラインはデータを保存してEMR内で取得するためにうまく機能していました。しかし、Glueはすべてを小文字に変換するため、Glueはかなりひどくクラッシュしていました。おそらく、それがクラッシュした理由でした。大文字の柱の接着剤を取り除くと、チャームのように機能し始めます。