サーバー構成の調整
クエリーにMPPエンジンを使用するために、調整できる特定の構成パラメーターがあります。このセクションでは、特定の調整オプションについて例を挙げて説明します。
[Max Source Side Cardinality Estimate(ソース側カーディナリティの最大推定値)]
この設定は、自動準結合をトリガーするために、結合のソース側の推定最大行数を制御します。この値は、Studioを使用してデータソースレベルでオーバーライドできます。
SELECT
supp_nation,
cust_nation,
sum(1) revenue
FROM (SELECT
n1.n_name supp_nation,
n2.n_name cust_nation,
l_extendedprice volume
FROM /shared/new_DS/hive211/tpch_11/supplier,
/shared/new_DS/hive211/tpch_11/lineitem,
/shared/new_DS/hive211/tpch_11/orders,
/shared/new_DS/hive211/tpch_11/customer,
/shared/new_DS/imp27/tpch_11/nation n1,
/shared/new_DS/imp27/tpch_11/nation n2
WHERE ((((((s_suppkey = l_suppkey AND o_orderkey = l_orderkey) AND c_custkey = o_custkey) AND s_nationkey = n1.n_nationkey) AND c_nationkey = n2.n_nationkey) AND ((n1.n_name LIKE 'FRANCE%' AND n2.n_name LIKE 'GERMANY%') OR (n1.n_name LIKE 'EGYPT%' AND n2.n_name LIKE 'IRAN%'))) AND l_shipdate BETWEEN DATE '1995-01-01' AND DATE '1996-12-31')) shipping
GROUP BY supp_nation,
cust_nation
ORDER BY supp_nation ASC,
cust_nation ASC
上記のクエリーの実行プランを実行している間、この設定の構成によっては、次のフォールバック理由が発生することがあります。
Query plan contains a SCAN node using a SEMI join: |physical.operator.SqlScan (@44093785, @471fc95b) |Type : |Node Id : 10 |Datasource Id : 20173 |Plan Level : 0 |Cardinality : 8 (between 0 and 9223372036854775807 rows) | Selectables: customer.c_nationkey, supplier.s_nationkey | Map : 0, 1 | Matching Id : 30, 32 |semiJoinID: 2 |semiJoinNode: physical.operator.DynamicHashJoin@2ced0d21 |Push SQL is SELECT customer.`c_nationkey`,supplier.`s_nationkey` FROM tpch_11.supplier JOIN tpch_11.lineitem ON supplier.`s_suppkey` = lineitem.`l_suppkey` JOIN tpch_11.orders ON lineitem.`l_orderkey` = orders.`o_orderkey` JOIN tpch_11.customer ON orders.`o_custkey` = customer.`c_custkey` WHERE (lineitem.`l_shipdate` >= '1995-01-01' AND lineitem.`l_shipdate` <= '1996-12-31')
次の手順を実行します。
1.[Administration(管理)] -> [Configuration(構成)] -> [Server(サーバー)] -> [SQL Engine(SQLエンジン)] -> [Optimizations(最適化)] -> [Semi join(準結合)]に移動し、[Max Source Side Cardinality Estimate(最大ソース側カーディナリティ推定)]を-1に設定します。構成ウィンドウの検索オプションを使用してプロパティを検索することにより、プロパティに移動することもできます。
2.[Apply(適用)]をクリックします。
3.実行プランを再実行します。
設定が適切に調整されると、クエリーによって並列フェッチが実行されます。
[Case Sensitivity(大文字と小文字の区別)]
この設定は、クエリーのデフォルトの大文字と小文字の区別を制御します。falseの場合、文字列の比較は大文字と小文字を区別せずに実行されます。この設定がデータソースの大文字と小文字の区別の設定と一致しない場合、そのソースのクエリー実行はパフォーマンスが低下します。デフォルト値はFalseです。このオプションの構成によっては、次のフォールバック理由が発生する場合があります。
Cannot delegate plan execution to the parallel runtime engine: Cannot push Selectable because the data source Apache Drill 1.14 is case sensitive and our system is not case sensitive and the selectable is not wrapped with upper or lower function --`R_1`.`supp_nation`--
次の手順を実行します。
1.[Administration(管理)] -> [Configuration(構成)]-> [Server(サーバー)]-> [SQL Engine(SQLエンジン)] -> [SQL Language(SQL言語)]に移動し、[Case Sensitivity(大文字と小文字の区別)]を[True]に設定します。構成ウィンドウの検索オプションを使用してプロパティを検索することにより、プロパティに移動することもできます。
2.[Apply(適用)]をクリックします。
3.実行プランを再実行します。
設定が適切に調整されると、クエリーによって並列フェッチが実行されます。
[Ignore Trailing Spaces(末尾スペースの無視)]
この設定は、クエリーの文字列の比較時に末尾スペースの無視を制御します。trueの場合、文字列の比較は末尾スペースを無視して行われます。この設定がデータソースの末尾スペースの設定と一致しない場合は、そのソースのクエリー実行のパフォーマンスが低下します。デフォルト値はTrueです。このオプションの構成によっては、次のフォールバック理由が発生する場合があります。
Cannot delegate plan execution to the parallel runtime engine: Cannot push selectable because the data source Apache Drill 1.14 does not ignore trailing spaces and our system ignores trailing spaces and the selectable is not wrapped with rtrim function --`R_1`.`supp_nation`--
次の手順を実行します。
1.[Administration(管理)] -> [Configuration(構成)]-> [Server(サーバー)]-> [SQL Engine(SQLエンジン)] -> [SQL Language(SQL言語)]に移動し、[Ignore Trailing Spaces(末尾スペースの無視)]を[False]に設定します。構成ウィンドウの検索オプションを使用してプロパティを検索することにより、プロパティに移動することもできます。
2.[Apply(適用)]をクリックします。
3.実行プランを再実行します。
設定が適切に調整されると、クエリーによって並列フェッチが実行されます。
[Minimum Partition Volume(最小パーティションボリューム)]
[Minimum Partition Volume(最小パーティションボリューム)]構成は、各パーティションによってフェッチされるデータボリュームを設定するために使用されます。デフォルト値は256です。0または負の値に設定すると、影響はありません。次のクエリーを実行して、このオプションを分析します。
select CASE (N_NAME)
WHEN 'ALGERIA' THEN 'result1'
WHEN 'KENYA' THEN 'result2'
ELSE 'other'
END as col1
from /users/composite/drill/ds/tpchorcl234/C##TPCH10/H_NATION inner join
/users/composite/drill/ds/tpchorcl236/C##TPCH10/H_REGION
on N_REGIONKEY=R_REGIONKEY
次のフォールバックシナリオが発生する可能性があります。
Plan has scans with low estimated data volumes. Maximum estimated data volume: 4250
次の手順を実行します。
1.[Server(サーバー)] > [SQL Engine(SQLエンジン)] > [Parallel Processing(並列処理)] -> [Minimum Partition Volume(最小パーティションボリューム)]に移動して、低い値に設定します。構成ウィンドウの検索オプションを使用してプロパティを検索することにより、プロパティに移動することもできます。
2.[Apply(適用)]をクリックします。
3.実行プランを再実行します。
注意: 少量のデータを処理するクエリーは、通常、並列処理エンジンでは処理されません。[Disable Low Data Volume Restriction(低データ量制限を無効にする)]設定をオンにすると、このルールを無効にできます。
上記のように構成パラメーターが適切に調整されると、クエリーは並列フェッチを実行します。