我是根据这个SQL改的 语法不一定通过 你看是否能理解
我只改了SQL 7
好的,如果我发现建表语句不合适的话,我删除建表语句,从新建表的话,数据是不是从新导入呢,还是说我直接建表就行了
删除表后,数据也不存在了,我们数据库删除表是会放在trash,不是真正的删除,磁盘空间是不会释放的,请使用drop table xxx force
嗯嗯好的,明白了,感谢
| cs_sold_date_sk | cs_sold_time_sk | cs_ship_date_sk | cs_bill_customer_sk | cs_bill_cdemo_sk | cs_bill_hdemo_sk | cs_bill_addr_sk | cs_ship_customer_sk | cs_ship_cdemo_sk | cs_ship_hdemo_sk | cs_ship_addr_sk | cs_call_center_sk | cs_catalog_page_sk | cs_ship_mode_sk | cs_warehouse_sk | cs_item_sk | cs_promo_sk | cs_order_number | cs_quantity | cs_wholesale_cost | cs_list_price | cs_sales_price | cs_ext_discount_amt | cs_ext_sales_price | cs_ext_wholesale_cost | cs_ext_list_price | cs_ext_tax | cs_coupon_amt | cs_ext_ship_cost | cs_net_paid | cs_net_paid_inc_tax | cs_net_paid_inc_ship | cs_net_paid_inc_ship_tax | cs_net_profit |
±----------------±----------------±----------------±--------------------±-----------------±-----------------±----------------±--------------------±-----------------±-----------------±----------------±------------------±-------------------±----------------±----------------±-----------±------------±----------------±------------±------------------±--------------±---------------±--------------------±-------------------±----------------------±------------------±-----------±--------------±-----------------±------------±--------------------±---------------------±-------------------------±--------------+
| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 31919681 | NULL | NULL | NULL | 22 | 87139 | NULL | 1229018862 | 39 | NULL | 49.33 | 45.87 | 134.94 | 1788.93 | 670.41 | NULL | 125.22 | 0.00 | NULL | 1788.93 | NULL | 2019.42 | 2144.64 | 1118.52 |像这样的数据 选择明细模型的话,
create table catalog_sales
(
cs_sold_date_sk int ,
cs_sold_time_sk int ,
cs_ship_date_sk int ,
cs_bill_customer_sk int ,
cs_bill_cdemo_sk int ,
cs_bill_hdemo_sk int ,
cs_bill_addr_sk int ,
cs_ship_customer_sk int ,
cs_ship_cdemo_sk int ,
cs_ship_hdemo_sk int ,
cs_ship_addr_sk int ,
cs_call_center_sk int ,
cs_catalog_page_sk int ,
cs_ship_mode_sk int ,
cs_warehouse_sk int ,
cs_item_sk int ,
cs_promo_sk int ,
cs_order_number int ,
cs_quantity int ,
cs_wholesale_cost decimal(7,2) ,
cs_list_price decimal(7,2) ,
cs_sales_price decimal(7,2) ,
cs_ext_discount_amt decimal(7,2) ,
cs_ext_sales_price decimal(7,2) ,
cs_ext_wholesale_cost decimal(7,2) ,
cs_ext_list_price decimal(7,2) ,
cs_ext_tax decimal(7,2) ,
cs_coupon_amt decimal(7,2) ,
cs_ext_ship_cost decimal(7,2) ,
cs_net_paid decimal(7,2) ,
cs_net_paid_inc_tax decimal(7,2) ,
cs_net_paid_inc_ship decimal(7,2) ,
cs_net_paid_inc_ship_tax decimal(7,2) ,
cs_net_profit decimal(7,2)
)DUPLICATE KEY(cs_sold_date_sk,cs_sold_time_sk,cs_ship_date_sk,cs_bill_customer_sk,cs_bill_cdemo_sk,cs_bill_hdemo_sk)
DISTRIBUTED BY HASH(cs_item_sk,cs_order_number,cs_ship_date_sk) BUCKETS 700
PROPERTIES (
“replication_num” = “1”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“storage_medium” = “SSD”,
“enable_persistent_index” = “true”,
“bloom_filter_columns” = “cs_item_sk,cs_order_number,cs_ship_date_sk”
);
这样建表合理吗
DUPLICATE KEY 建议少于等于3个KEY,DISTRIBUTED BY HASH建议少于等于2个key
麻烦在问一下,SR 基于内存,往内存缓存数据的话,是一遍缓存一遍计算,还是需要全部缓存完之后在计算呢?
key 越多越消耗内存吧
一遍缓存一遍计算,子查询的结果返回的数据特别多也是占用内存的,key越多消耗的内存越多。
DUPLICATE KEY 数据排序
PARTITION KEY 数据分区
DISTRIBUTED BY HASH 数据均匀分布
DUPLICATE KEY 一般用前散列做缓存的话,如果前三列的数据都为null的话,是不是特别影响性能呢?像这样情况,DUPLICATE KEY 应该怎么设计呢?
bloom_filter_columns 如果用上它的话一般情况下选择几个字段,什么样的字段适合呢
DUPLICATE KEY 尽量使用int,bigint类型。null也算一个值来处理,性能不会影响,只是某些查询可能会遗漏了null的情况,少于等于三个值。
适用场景
满足以下几个条件时可以考虑对某列建立Bloom Filter 索引:
- 首先BloomFilter也适用于非前缀过滤。
- 查询会根据该列高频过滤,而且查询条件大多是in和=。
- 不同于Bitmap, BloomFilter适用于高基数列。
目前我的机器上还剩下将尽200g内存,还是报错Memory of Query5148f74a-26ac-11ed-adf2-fa163e88b465 exceed limit. Pipeline Backend: 10.0.0.83, fragment: 5148f74a-26ac-11ed-adf2-fa163e88b4f5 Used: 438104843024, Limit: 438103947386. Mem usage has exceed the limit of single query, You can change the limit by set session variable exec_mem_limit.,这种情况能通过调整参数解决吗,还是说之前的说的加be节点呢
Mem: 503 303 196 0 3 194
请调大这个参数exec_mem_limit,
/*+ SET_VAR(exec_mem_limit = 515396075520,query_timeout=10000000,batch_size=4096,parallel_fragment_exec_instance_num=32) */
这个应调过了,感觉没有生效
exec_mem_limit | 515396075520
parallel_exchange_instance_num | -1 |
| parallel_fragment_exec_instance_num | 32
SELECT /*+ SET_VAR(exec_mem_limit = 515396075520,query_timeout=10000000,batch_size=4096,parallel_fragment_exec_instance_num=32) */ FROM table;
这样执行 就肯定会用到
我是这么调整
set global exec_mem_limit = 515396075520
set global parallel_fragment_exec_instance_num = 32;
set global enable_cbo = true;
Set globale batch_size=4096
有些参数 variables 是没有的
MySQL [information_schema]> select /*+ SET_VAR(exec_mem_limit = 515396075520,query_timeout=10000000,batch_size=4096,parallel_fragment_exec_instance_num=32) */ from session_variables;
ERROR 1064 (HY000): Syntax error in line 1:
select from session_variables
^
Encountered: FROM
Expected: FROM is keyword, maybe FROM
语句执行有问题