Treasure Data - Support Engineering Team blog

トレジャーデータのサポートエンジニアリングチームのブログです。

誰も心当たりのないPrestoクエリについて

こんにちは、Treasure Data サポートの伊藤です。

今回は 見覚えがないPrestoクエリが実行されている という謎について迫っていきます。

心当たりのないクエリ

全く見覚えのない下記クエリを実行するジョブがTDコンソールの 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のバージョンを取得することができます。

TDではなく、自身で構築した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ツールなど)側からすると接続先がTDかどうかはわからず、OSSのPrestoを利用している前提の処理となっており、自身で構築している場合は権限分掌によってエラーとさせないことが可能だと思います。

一方、TDは利用者に対してシステム用のデータベース・テーブルへのアクセス権限は制限しているため、エラーになるのは想定される挙動です。

必要なアクション

あくまでもチェック目的かと思いますので、主目的の処理がエラーになっていないのであれば問題なく、無視して良いでしょう。

ツールによってそもそも実行しないよう制御できるのであれば、エラー回避はできないので実行しないように設定いただければと思います。

終わりに

今回はトピックとしても範囲が狭く短かい記事でしたが、いくつかお問い合わせを頂戴することがありましたので、整理して記事にしてみました。

ツールを利用する際、実行されるクエリは隠されていることが多く意識しないこともあるかと思いますが、本記事が助けになると幸いです。