おつかれさまです。すぺきよです。
最近仕事でS3 + Glue + Athenaでデータ分析用のテーブルを作成してQuick SightでBIツールを作ろうと頑張っています。
その際にあーでもない、こーでもないとテーブルを作ったり削除したり、Viewを作ったり削除したり・・・。
そんなことを何度も繰り返しているとタイトルにある「Cannot invoke “String.startsWith(String)” because “data” is null」というエラーが出てViewが削除できなくなってしまいました。
エラーということで、Amazonに問い合わせようにもサポートは有料だし、フォーラムに行っても直接の解決策を見つけることができません。
調査をしているうちに、この状況に陥っても削除する方法があったので共有します。
何があったのか

AthenaのクエリコンソールからCreate ViewでViewを作った後、Quick Sightでデータセットを作り、ビジュアルをこねくり回していました。
そこで、一部データの表現が正しくないことが判明。
テーブルから全てを作り直すこととしました。
こういう場合いつもはビジュアル→データセット→View→テーブルの順で上流から削除しています。
この時はたまたまデータセットを削除する前に、Athenaのクエリコンソール上でDrop Viewを実行しでViewの削除をしてしまいました。
その後このエラーが発生し、慌ててデータセットを削除するも、以降Viewが削除できなくなってしまいました。
この現象の発生はたまたま偶然の可能性があり、再現性はないかもしれません。
試したこと
一時的な状況の不整合によるものだろうと思い、まずは、しばらく放置することとしました。
時折Drop Viewを試しながら、いつになったら削除できるんだろうなぁ・・・と別作業をします。
しかし、1時間、2時間経っても同じエラーが出て削除できそうにありません。
Viewの命名ルールが決まっているので、別名のViewで開発を進めるという選択肢もなく、途方に暮れていました。
解決方法
私が実行した最終的な解決方法です。
Athenaのクエリコンソールからコマンド実行により削除するのではなく、Glueのテーブル一覧から該当のViewを削除するというものです。
削除手順
まずはGlueに行き、左のメニューからTablesを選択し、開きます。

右側のペインに表示される一覧の中にはテーブルとViewが表示されるので、削除したい対象のViewを選択して削除を行います。
エラーの原因は?
不明です。
エラーメッセージを元に調査をした結果、直接的なAthenaに対する回答はありませんでした。
ただ、NullPointerExceptionと同時に出力されることが多いテキストであることはわかりました。
きっと、状況がおかしくなって内部的にNullPointerExceptionが発生していたんでしょうね。
今思えばエラー発生時にDDLをみるなど、もう少し詳しく見ておけば、もっと何かがわかったかもしれません。
削除後
削除した後に何か不具合が起こるかと心配しましたが、今のところ問題ありません。
削除したViewと同名のViewの再作成もできましたし、データセットの作成とビジュアルの作成も問題ありません。
まとめ
今回は、AthenaでViewを削除するときに遭遇した「Cannot invoke “String.startsWith(String)” because “data” is null」の対処法を記載しました。
Athenaのクエリコンソールでおかしくなったら、Glueから物理的(?)に消せば対処できるようです。
Amazonさんのことなので、こういう不具合は直ぐに解消され、この記事の内容も同時に意味をなさないものになるのかなと思います。
それでも、もし困ったら参考にしてみてください。
コメント