请问10TB是指一个表还是一个库。
我觉得64C512G的配置可以的,上POC吧
抱歉打扰了,我执行了您上面给的建议,但是还是报错
ERROR 1064 (HY000): Memory of Query8cb8f860-2505-11ed-90d8-fa163e88b465 exceed limit. Pipeline Backend: 10.0.0.83, fragment: 8cb8f860-2505-11ed-90d8-fa163e88b48a Used: 438106711304, Limit: 438103947386. Mem usage has exceed the limit of single query, You can change the limit by set session variable exec_mem_limit.
请问您的分区键和BUCKETS是如何设置的?
DISTRIBUTED BY HASH(ss_item_sk,ss_ticket_number,ss_item_sk) BUCKETS 950
PROPERTIES (
“replication_num” = “1”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“storage_medium” = “SSD”,
“enable_persistent_index” = “true”,
“bloom_filter_columns” = “ss_sold_date_sk,ss_sold_time_sk,ss_item_sk”
);
这个SQL是运行主键模型的表吧?请增加分区键PARTITION BY
这个是建表语句
CREATE TABLE store_sales
(
ss_sold_date_sk
bigint(20) NULL COMMENT “”,
ss_sold_time_sk
bigint(20) NULL COMMENT “”,
ss_item_sk
bigint(20) NULL COMMENT “”,
ss_customer_sk
bigint(20) NULL COMMENT “”,
ss_cdemo_sk
bigint(20) NULL COMMENT “”,
ss_hdemo_sk
bigint(20) NULL COMMENT “”,
ss_addr_sk
bigint(20) NULL COMMENT “”,
ss_store_sk
bigint(20) NULL COMMENT “”,
ss_promo_sk
bigint(20) NULL COMMENT “”,
ss_ticket_number
bigint(20) NULL COMMENT “”,
ss_quantity
int(11) NULL COMMENT “”,
ss_wholesale_cost
decimal64(7, 2) NULL COMMENT “”,
ss_list_price
decimal64(7, 2) NULL COMMENT “”,
ss_sales_price
decimal64(7, 2) NULL COMMENT “”,
ss_ext_discount_amt
decimal64(7, 2) NULL COMMENT “”,
ss_ext_sales_price
decimal64(7, 2) NULL COMMENT “”,
ss_ext_wholesale_cost
decimal64(7, 2) NULL COMMENT “”,
ss_ext_list_price
decimal64(7, 2) NULL COMMENT “”,
ss_ext_tax
decimal64(7, 2) NULL COMMENT “”,
ss_coupon_amt
decimal64(7, 2) NULL COMMENT “”,
ss_net_paid
decimal64(7, 2) NULL COMMENT “”,
ss_net_paid_inc_tax
decimal64(7, 2) NULL COMMENT “”,
ss_net_profit
decimal64(7, 2) NULL COMMENT “”,
INDEX index_name5 (ss_quantity
) USING BITMAP COMMENT ‘Bitmap Index’
) ENGINE=OLAP
DUPLICATE KEY(ss_sold_date_sk
, ss_sold_time_sk
, ss_item_sk
)
COMMENT “OLAP”
DISTRIBUTED BY HASH(ss_item_sk
, ss_ticket_number
, ss_item_sk
) BUCKETS 950
PROPERTIES (
“replication_num” = “1”,
“bloom_filter_columns” = “ss_sold_time_sk, ss_sold_date_sk, ss_item_sk”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“storage_medium” = “SSD”
);
增加分区建,是支持追加的吧,不用drop表吧
分桶数量 = BE节点数量 * CPU 核数/2
麻烦您检查一下BUCKETS是否合适
增加分区键是否能直接追加我在看一下。
我是参考分桶说是一个桶不大于5个G ,压缩完之后就是1g ,大小表不一样的话,分桶都是您刚才说的规则吗
我们建议一个桶不大于1G,性能是最佳的。例子:时间分区键,一个月的数据是32G,那么BUCKETS是32就较合适了。分桶数量 = BE节点数量 * CPU 核数/2是一个较通用的配置。
由于您开始建表没有分区键,现在暂时不支持追加,有分区键后,是支持追加新分区。
那小表的话一个表就存几千条数据,那分桶我1-5个这样合适吗
只要每个桶少于1G就ok了,不用特意把BUCKETS设小。
分桶数量 = BE节点数量 * CPU 核数/2 其他数据量不大的表就按照这个公式吧
建议每个表都有PARTITION BY和DISTRIBUTED BY
之前我们建表都是用的这个两个模型DUPLICATE KEY DISTRIBUTED BY
明细模型是很成熟,主要是要PARTITION BY和DISTRIBUTED BY 这样性能才会最好
感谢您的支持,刚刚接触starrocks,有些东西把控不到位,多谢您的指导
PARTITION BY 后面跟几个字段,标准是什么呢?怎么才能达到最优呢
PARTITION BY 跟一个字段,通常是用时间来作范围分区
PRIMARY KEY (dt, order_id)
PARTITION BY RANGE(`dt`) (
PARTITION p20210820 VALUES [('2021-08-20'), ('2021-08-21')),
PARTITION p20210821 VALUES [('2021-08-21'), ('2021-08-22')),
...
PARTITION p20210929 VALUES [('2021-09-29'), ('2021-09-30')),
PARTITION p20210930 VALUES [('2021-09-30'), ('2021-10-01'))
) DISTRIBUTED BY HASH(order_id) BUCKETS 4
```我看案例是这个,我们还有加时间吗