• Greenplum-表的分布策略


    Greenplum中所有的表都是必须分布存放的,这样可以充分利用MPP的并发特性。
    在创建表时可以指定不同的分布策略,包括三种分布策略:HASH分布、随机分布和复制表。

    HASH分布

    概念:选择一个列或多个列作为数据表的分布键,通过hash计算,将插入的数据路由到特定的segment上。
    HASH分布是默认的分布策略。也可通过指定DISTRIBUTED BY语法来指定使用HASH分布。
    注:当建表时未定义分布键时,如果表有主键,使用主键字段作为默认的分布键;如果表上没有主键,默认按照第一个字段来分布。

    示例:

    =# create table dist1(a int, b text);
    NOTICE:  Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Database data distribution key for this table.
    HINT:  The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
    CREATE TABLE
    =# \d dist1
    Table "public.dist1"
    Column |  Type   | Modifiers
    --------+---------+-----------
    a      | integer |
    b      | text    |
    Distributed by: (a)
    =# create table dist1(a int, b text, primary key (b));
    CREATE TABLE
    =# \d dist1
    Table "public.dist1"
    Column |  Type   | Modifiers
    --------+---------+-----------
    a      | integer |
    b      | text    | not null
    Indexes:
    "dist1_pkey" PRIMARY KEY, btree (b)
    Distributed by: (b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    随机分布

    概念:数据随机分散在每一个节点中,可以保证数据平均分布,但是在执行 SQL 的过程中,关联等操作都需要将数据重分布,性能较差。
    通过指定DISTRIBUTED RANDOMLY语法来指定使用随机分布。
    注:如果表上有主键,不能创建为随机分布表。
    示例:

    =# create table dist1(a int, b text, primary key (a)) distributed randomly;
    ERROR:  PRIMARY KEY and DISTRIBUTED RANDOMLY are incompatible
    =# create table dist1(a int, b text) distributed randomly;
    CREATE TABLE
    =# \d dist1
    Table "public.dist1"
    Column |  Type   | Modifiers
    --------+---------+-----------
    a      | integer |
    b      | text    |
    Distributed randomly
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注:如果想将默认的分布策略设置为随机分布,我们可以通过设置gp_create_table_random_default_distribution值为on来实现,默认值为off。
    gpconfig --show gp_create_table_random_default_distribution

    Values on all segments are consistent
    GUC          : gp_create_table_random_default_distribution
    Master  value: off
    Segment value: off
    
    • 1
    • 2
    • 3
    • 4

    复制表

    概念:每一条记录都会分布到整个集群的所有Instance上,仅用于小表。
    通过指定DISTRIBUTED REPLICATED语法来指定使用复制表。

    示例:

    =# create table dist1(a int, b text, primary key (a)) distributed replicated;
    CREATE TABLE
    qianbase=# \d dist1
    Table "public.dist1"
    Column |  Type   | Modifiers
    --------+---------+-----------
    a      | integer | not null
    b      | text    |
    Indexes:
    "dist1_pkey" PRIMARY KEY, btree (a)
    Distributed Replicated
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    学点Java打小工_Day4_数组_冒泡排序
    Vue入门
    为什么从没有负值的数据中绘制的小提琴图(Violin Plot)会出现负值部分?
    【愚公系列】2022年09月 微信小程序-WebGL动画的使用
    Opencv 基本操作四 指针数组、vector与Mat之间的相互转换
    四、一起学习Java 对象和类
    k8s调度之污点和容忍
    MobileNet V1、V2网络详解及V2复现
    阿里最新秋招面经,腾讯 / 美团 / 字节 1 万道 Java 中高级面试题
    h5中的页面显示隐藏执行事件
  • 原文地址:https://blog.csdn.net/Post_Yuan/article/details/126868191