<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      吹靜靜

      歡迎QQ交流:592590682

      ClickHouse在做SQL查詢時要盡量遵循的原則

      1.大表在左,小表在右,否則會造成右表加載數據量太大,大量消耗內存資源;

      2.如果join的右表為大表,則需要將右表寫成子查詢,在子查詢中將右表的條件都加上,并進行列裁剪,這樣可以有效減少數據加載;

      3.where條件中只放左表的條件,如果放右表的條件將在下推階段右表條件不會生效,將右表條件放到join的子查詢中去。

      select ...
      from t_all
      join ( -- 右表本身直接走本地表
        select ...
        from t_local
        where t_local.filter = xxx -- 盡可能手動將條件放在子查詢中
      )
      where
        t_local.f = xxx -- 當前版本不支持自動下推到JOIN查詢中,需要手動修改
        and t_all.f in (
          select ... from xxx -- 若能將子查詢作為篩選條件更佳
        )

      ClickHouse執行計劃分析

      此執行計劃分析是在多分片單副本的ClickHouse環境中執行的。

      準備數據

      -- 建表語句
      CREATE TABLE dw_local.t_a on cluster cluster_name (
      `aid` Int64,
      `score` Int64,
      `shard` String,
      `_sign` Int8,
      `_version` UInt64
      ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/table/{shard}/t_a', '{replica}')
      ORDER BY (aid);
      CREATE TABLE dw_dist.t_a on cluster cluster_name as dw_local.t_a ENGINE = Distributed('cluster_name', 'dw_local', 't_a', sipHash64(shard));
      CREATE VIEW dw.t_a on cluster cluster_name as select * from dw_dist.t_a final where _sign = 1;
      
      CREATE TABLE dw_local.t_b on cluster cluster_name (
      `bid` Int64,
      `aid` Int64,
      `shard` String,
      `_sign` Int8,
      `_version` UInt64
      ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/table/{shard}/t_b', '{replica}')
      ORDER BY (bid);
      CREATE TABLE dw_dist.t_b on cluster cluster_name as dw_local.t_b ENGINE = Distributed('cluster_name', 'dw_local', 't_b', sipHash64(shard));
      CREATE VIEW dw.t_b on cluster cluster_name as select * from dw_dist.t_b final where _sign = 1;
      
      
      -- 插入數據
      insert into dw_dist.t_a (aid, score, shard, _sign, _version) values(1, 1, 's1', 1, 1);
      insert into dw_dist.t_a (aid, score, shard, _sign, _version) values(2, 1, 's2', 1, 2);
      insert into dw_dist.t_b (bid, aid, shard, _sign, _version) values(1, 1, 's1', 1, 1);
      insert into dw_dist.t_b (bid, aid, shard, _sign, _version) values(2, 2, 's2', 1, 2);
      insert into dw_dist.t_b (bid, aid, shard, _sign, _version) values(3, 0, 's1', 1, 3);
      insert into dw_dist.t_b (bid, aid, shard, _sign, _version) values(4, 1, 's2', 1, 4);

      案例1

      explain select a.aid as aid, b.bid as bid, count(*) as ct from dw.t_a as a join dw.t_b as b on a.aid = b.aid group by aid, bid;

      通過執行計劃可以看到,左表和右表的執行計劃基本一樣,先將遠程節點上的表數據拉取到本地,然后和本地表的數據進行union操作,然后左表和右表進行join操作,最后進行group by操作。

      案例2

      explain select a.aid as aid, b.bid as bid, count(*) as ct from dw.t_b as b join dw.t_a as a on a.aid = b.aid group by aid, bid;

      此SQL和案例1SQL相比只是將左右表的順序調換,此次表的執行順序只是調換了一下,從左到右執行。

      案例3

      explain select a.aid as aid, b.bid as bid, count(*) as ct from dw.t_a as a join dw.t_b as b on a.aid = b.aid where a.aid=1 group by aid, bid;

      此SQL和案例1SQL相比添加了左表的where條件,執行計劃中將條件放在了左表進行數據加載。

      案例4

      explain select a.aid as aid, b.bid as bid, count(*) as ct from dw.t_b as b join dw.t_a as a on a.aid = b.aid where a.aid=1 group by aid, bid;

      此SQL中的左表表無過濾條件,右表存在過濾條件,執行計劃并不會將右表的條件放到拉取數據的階段。

      案例5

      explain select a.aid as aid, b.bid as bid, count(*) as ct from dw_local.t_a as a join dw_local.t_b as b on a.aid = b.aid where a.aid=1 group by aid, bid;

      如果所有表都采用本地表,而不是分布式表,則在數據加載階段不會拉取遠程節點的數據。

      案例6

      explain select a.aid as aid, b.bid as bid, count(*) as ct from dw_local.t_b as b join dw_local.t_a as a on a.aid = b.aid where a.aid=1 group by aid, bid;

      調換左右表順序,同案例5結果相同。

      案例7

      explain select a.aid as aid, b.bid as bid, count(*) as ct from (
          select * from dw.t_a
      ) as a join dw.t_b as b on a.aid = b.aid group by aid, bid;

      左表為子查詢時,左表也會走分布式表查詢方式拉取數據,有文章說左表為子查詢的情況下會導致左表走本地查詢策略,不走分布式查詢策略,可能是版本原因,我們測試過程中沒有出現類似情況。

       

      參考文章:https://www.infoq.cn/article/blvraUL5LEImRzuWH56e

      posted on 2023-02-03 14:08  吹靜靜  閱讀(1274)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 无码综合天天久久综合网| 97在线视频人妻无码| 亚洲国产午夜福利精品| 久久亚洲av综合悠悠色| 国产专区一va亚洲v天堂| 精品无码成人久久久久久| 日韩三级一区二区在线看| 亚洲欧美电影在线一区二区| 狠狠色噜噜狠狠狠狠av不卡| 豆国产97在线 | 亚洲| 偷拍美女厕所尿尿嘘嘘小便| 2019国产精品青青草原| 国产高清在线男人的天堂| 人人妻人人狠人人爽| 国产午夜福利大片免费看| 人人爽亚洲aⅴ人人爽av人人片 | 国产精品 无码专区| 色综合久久一区二区三区| 一区二区亚洲人妻av| 国产日韩av二区三区| 社旗县| 无码国内精品人妻少妇| 干中文字幕| 久久香蕉国产线看观看怡红院妓院| 粉嫩一区二区三区粉嫩视频| 国产精品久久久久影院老司| 色五月丁香五月综合五月| 在线天堂最新版资源| 国产欧美综合在线观看第十页| 亚洲国产精品一二三四五| 熟女熟妇伦av网站| 亚洲精品无码你懂的| 熟妇的奶头又大又长奶水视频| 人妻精品久久无码区| 亚洲第一区二区快射影院| 色综合色狠狠天天综合网| 国产不卡av一区二区| 阳原县| 国产熟妇另类久久久久久| 亚欧乱色国产精品免费九库| 国产AV影片麻豆精品传媒|