AWS Glue で書いた Parquet ファイルが Glue のデータカタログのスキーマと異なることが度々発生しているので、直接 Parquet ファイルのスキーマを確認できないか調べたところ、parquet-tools コマンドで確認できることがわかりました。
mvn install コマンドでインストールしたり、Maven リポジトリから jar をダウンロードして実行するなど色々方法はありますが、Mac OS 環境だと brew install できます。README には
cd parquet-tools && mvn clean package -Plocal
でインストールするとありますが、Parquet の他のサブモジュールの成果物も必要なので、 git clone したあとに親モジュール内で mvn clean package -Plocal
したほうが良さそう。そのあとも thrift
コマンドがないとエラーが出たりしたので brew でインストールしましたが、Parquet が必要なバージョンと合わなかったりしたのでひとまず断念。
Maven リポジトリから jar をダウンロードできるので、少し使うだけならこれが一番よいなと思っていたのですが、エラーも吐かずにエラーコード1を返してきます。Fat jar のようなので java -jar
で叩くだけだと思うんですが、、
最後に brew で入れてみると:
$ brew install parquet-tools
特にエラーもなく簡単にインストールできました。インストール後は parquet-tools
コマンドとして利用できます:
$ parquet-tools schema file.snappy.parquet message spark_schema { optional binary title (UTF8); optional binary word (UTF8); optional int64 num; }
余談: Athena はある程度スキーマ差を吸収している?
例えば上のスキーマに対して Glue Catalog で num
を int
として定義していると、 int
と bigint(int64)
で型が異なるので、Redshift から読むとエラーになります。ただ Athena で同じようなクエリを投げてもエラーにはなりません。
struct
と map
, struct
に対して string
のようなスキーマ差は Athena もエラーとなるのですが、ビット長が違う程度のスキーマ差は Athena は吸収してくれるようです。そのため、最終的に利用する方法が Redshift なのであれば、Athena ではなく Redshift でデータが読めるか確認しないといけません。