Treasure Data - Support Engineering Team blog

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

カラム名が重複してるので外部サービスに出力できない

こんにちは。Treasure Data サポートの大村です。

今回はTreasure Data から外部サービスに出力する際にエラーとなる例の1つであるカラム名の重複についてご紹介していきます。 このタイプのエラーではクエリ単体で実行するとエラーにはならないのですが、その結果を外部サービスに出力する際にエラーになってしまいます。 エラーログをよく確認する必要があるので、実際のエラーログを元にご紹介していきます。

原因そのものは出力先が同一カラム名を許可していないことにありますので、カラム名が同一にならないよう調整する必要があります。 また、実際のエラーログも出力先の外部サービスによって異なりますので、よくエラーログを確認する必要があります。

事例

Prestoでクエリを実行し、その結果をPostgreSQLに出力するという事例でご紹介します。

まず、Prestoクエリで同じカラムを2回、select句に指定します。

select time, symbol, symbol, open from sample_datasets.nasdaq limit 10

このクエリはPrestoの実行単体では動作します。実際に実行しますと以下のような結果を得られると思います。 (limitを使用しているので、同一の結果になるかはわかりませんが)

実際に同一のsymbolというカラムが2つあるのが確認できるかと思います。 この結果をExport Resultsで出力先をPostgreSQLのテーブルに指定すると以下のようなエラーにより失敗することになります。

エラー部分を抜粋すると…

  :
2022-07-29 06:26:26.613 +0000 [INFO] (0047:task-0000): Error details:
shadow_postgresql_jdbc.org.postgresql.util.PSQLException: ERROR: column "symbol" specified more than once
  :

column "symbol" specified more than onceというようにsymbolというカラム名が複数あるというエラーメッセージが出ています。こちらのエラーメッセージは出力先に外部サービスに依存するため、PostgreSQLではこちらのように出ていますが、他のサービスでは別のエラーメッセージになります。

こちらの解消にはクエリで同一のカラム名にしない。または、同一カラムを複数出力しない。ということになります。

最後に

こちらのエラーはPresto単体では特に問題なく実行できるため、エラーメッセージをしっかりと確認しないと気づかないことがあります。 Jobが失敗した際はエラーメッセージを確認することをお忘れなく。