1. ホーム
  2. sql

[解決済み】Athena: スケールファクターでリソースを使い果たすクエリ

2022-02-21 06:12:42

質問

のようなクエリを実行しています。

SELECT f.*, p.countryName, p.airportName, a.name AS agentName
FROM (
    SELECT 
        f.outboundlegid, 
        f.inboundlegid,
        f.querydatetime,
        cast(f.agent as bigint) as agent,
        cast(f.querydestinationplace as bigint) as querydestinationplace,
        f.queryoutbounddate,
        f.queryinbounddate,
        f.quoteageinminutes,
        f.price
    FROM flights f
    WHERE querydatetime >= '2018-01-02'
    AND querydatetime <= '2019-01-10'
) f
INNER JOIN (
  SELECT airportId, airportName, countryName
  FROM airports
  WHERE countryName IN ('Philippines', 'Indonesia', 'Malaysia', 'Hong Kong', 'Thailand', 'Vietnam')
) p
ON f.querydestinationplace = p.airportId
INNER JOIN agents a
ON f.agent = a.id
ORDER BY f.outboundlegid, f.inboundlegid, f.agent, querydatetime DESC

何が問題なのでしょうか?あるいは、どうすれば最適化できるのでしょうか?これは、私に

このスケールファクターでリソースを使い果たしたクエリ

フライトテーブルがあり、特定の国のフライトを検索したい。

どのように解決するのですか?

Athenaの初期からずっとこの問題に直面しています。 ORDER BY 節があります。Athenaは、hiveとprestodbがインストールされているだけのEMRクラスタです。直面している問題は クエリがX個のノードに分散されていても、順序付け段階はたった1つのノード(この場合はマスターノード)が行わなければならない。つまり、マスターノードが持っているメモリの数だけ、データの順序付けを行うことができるのです。

クエリが返すデータ量を減らしたり、時間範囲を狭めたりすることでテストができます。