StarRocks分区内表创建与insert方案

一.分区表创建(2种方式):

目前仅支持分区键的数据类型为日期和整数类型。

1. 手动创建指定分区

CREATE TABLE OL_TABLE_SR
(
   STATIC_DATE                   DATE    COMMENT   '统计日期'          ,
   DT                            BIGINT  COMMENT   '该时间全量数据'

) ENGINE=OLAP
DUPLICATE KEY(STATIC_DATE, STATIC_YEAR,STATIC_MONTH)
PARTITION BY RANGE(DT)
(
PARTITION p20030101 VALUES [("20030101"), ("20030102")),
PARTITION p20120101 VALUES [("20120101"), ("20120102")),
PARTITION p20150101 VALUES [("20150101"), ("20150102")),
PARTITION p20150102 VALUES [("20150102"), ("20150103")),
PARTITION p20150103 VALUES [("20150103"), ("20150104")),
PARTITION p20150104 VALUES [("20150104"), ("20150105")),
PARTITION p20160101 VALUES [("20160101"), ("20160102")),
PARTITION p20170101 VALUES [("20170101"), ("20170102"))
)
DISTRIBUTED BY HASH(STATIC_DATE) BUCKETS 32
PROPERTIES (
"replication_num" = "3"
)
;

2.批量创建分区

通过 START、END 指定批量分区的开始和结束,EVERY 子句指定分区增量值。其中,批量分区包含 START 的值,但是不包含 END 的值。

# 表名大写,与hive表名一致;DT 类型为 BIGINT

CREATE TABLE OL_TABLE_SR
(
STATIC_DATE                         DATE    COMMENT   '统计日期'          ,
STATIC_YEAR                         BIGINT  COMMENT   '统计年'            ,
STATIC_MONTH                         BIGINT  COMMENT   '统计月'            ,
STATIC_DAY                         BIGINT  COMMENT   '统计天'            ,
ONE_DEPT                             STRING  COMMENT   '事业部'            ,
DT                            STRING  COMMENT   '该时间全量数据'
) ENGINE=OLAP
DUPLICATE KEY(STATIC_DATE, STATIC_YEAR,STATIC_MONTH)
PARTITION BY RANGE(STATIC_DATE)
(
START ("2023-01-01") END ("2023-01-04") EVERY (INTERVAL 1 day)
)
DISTRIBUTED BY HASH(STATIC_DATE) BUCKETS 32
PROPERTIES (
"replication_num" = "3"
)
;

二、insert 数据写入(读外表写入内表,2种方式)

1.方式1:指定分区

# LABEL 名自定义即可
# 通过命令查询insert任务进进度和状态:SHOW LOAD WHERE label="insert_load_p20150104"\G;

insert overwrite OL_CUBE_RPT_INTEGRATED_INCOME_ALL_STARROCKS_I_PT PARTITION(p20150104)
WITH LABEL insert_load_p20150104
select * from test.OL_TABLE_SR
where dt='20150104';

2.方式2:动态插入分区

# LABEL 名自定义即可
# 通过以下命令查询insert任务进进度和状态:
# SHOW LOAD WHERE label="insert_load_dy_20230103"\G;

insert overwrite ol_dt_i_pt
WITH LABEL insert_load_dy_20230103
select
STATIC_DATE
,STATIC_YEAR
,STATIC_MONTH
,STATIC_DAY
,ONE_DEPT
,DT
from OL_DT_TEST
where DT>='20230101' and DT<'20230104'
;

三:问题:

1.若insert失败

报错:ERROR 1064 (HY000): Query timeout. Increase the query_timeout session variable and retry
需要调整 query_timeout

# 单位s,默认为300秒
set query_timeout =3000;

Session变量,默认为300秒,可以通过show variables like ‘%query_timeout%’;查看。
Insert Into本身也是一个SQL命令,因此Insert Into语句也受到Session变量query_timeout的限制。
可以通过SET query_timeout = xxx;来增加超时时间,单位是秒,同样,也可以通过增加global关键词让设置全局生效。

2.查询DT为空

查询DT为空

当前 Hive 元数据缓存模式为懒加载,即:如果 Hive 新增了分区,StarRocks 只会将新增分区的 partition key 进行缓存,不会立即缓存该分区的文件信息。只有当查询该分区时或者用户手动执行 refresh 分区操作时,该分区的文件信息才会被加载。StarRocks 首次缓存该分区统计信息后,该分区后续的元数据变更就会自动同步到 StarRocks 中。

mysql> REFRESH EXTERNAL TABLE OL_DT_TEST;
Query OK, 0 rows affected (1 min 2.21 sec)

mysql> select distinct DT from test.OL_DT_TEST;
+----------+
| DT       |
+----------+
| 20170101 |
+----------+
1 row in set (0.63 sec)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值