テクニカルサポートエンジニアリングチームの伊藤 一樹です。
今回は見覚えがないPrestoクエリが実行されているという謎について迫っていきます。
心当たりのないクエリ
全く見覚えのない下記クエリを実行するジョブがTreasure Data CDPコンソールのJob Activitiesの画面で見つかったことはありませんか?
SELECT node_version FROM system.runtime.nodes WHERE coordinator = TRUE
しかも下記のようなエラーで失敗しているので、何かしらの処理が失敗したのかどうか不安になりますよね。
Query xxxxxxxx_xxxxxx_xxxxx_xxxxx failed: [PERMISSION_DENIED] Access Denied: Cannot select from table runtime.nodes
謎のクエリの目的
謎のクエリはnode_versionというカラムを抽出していることから推測できるかと思いますが、Prestoのバージョンを取得することができます。Treasure Data CDPではなく、自身で構築したOSSのPrestoであればSELECT node_id, node_version FROM system.runtime.nodes;
というクエリを実行すると下記のような情報が取得できたりします。
node_id | node_version |
1 | 317 |
2 | 317 |
3 | 317 |
どこから実行しされたの?
BIツール(Tableau Desktopのような)を利用している場合に、バージョンチェック目的で自動で実行されることがあるようです。
なぜエラーになるの?
エラーメッセージにある通り、runtime.nodesというシステム用テーブルへのアクセス権限を所持していないことで失敗しています。クライアント(BIツールなど)側からすると接続先がTreasure Data CDPかどうかはわからず、OSSのPrestoを利用している前提の処理となっており、自身で構築している場合は権限分掌によってエラーとさせないことが可能だと思います。
一方、Treasure Data CDPは利用者に対してシステム用のデータベース・テーブルへのアクセス権限は制限しているため、エラーになるのは想定される挙動です。
必要なアクション
あくまでもチェック目的かと思いますので、主目的の処理がエラーになっていないのであれば問題なく、無視して良いでしょう。ツールによってそもそも実行しないよう制御できるのであれば、エラー回避はできないので実行しないように設定いただければと思います。
終わりに
今回はトピックとしても範囲が狭く短かい記事でしたが、いくつかお問い合わせを頂戴することがありましたので、整理して記事にしてみました。ツールを利用する際、実行されるクエリは隠されていることが多く意識しないこともあるかと思いますが、本記事が助けになると幸いです。