如何遵循Doris建表规范在指定数据库中创建MySQL表?

MySQL中指定数据库建表使用CREATE TABLE database_name.table_name (...);,而在Doris中,建表规范遵循类似的语法结构,但需注意数据类型和分区策略的差异。

在MySQL和Doris中创建表的过程有一些相似之处,但也存在显著差异,以下详细描述了如何在这两个数据库系统中指定数据库建表:

MySQL中指定数据库创建表

1、选择数据库:首先使用USE语句选择要操作的数据库,如果你的数据库名称是mydatabase,可以使用以下命令:

   USE mydatabase;

2、创建表:使用CREATE TABLE语句来创建表,基本的语法如下:

   CREATE TABLE table_name (
       column1 datatype,
       column2 datatype,
       ...
   );

创建一个名为employees的表,包含idnamepositionsalary四个字段,可以使用以下SQL命令:

   CREATE TABLE employees (
       id INT AUTO_INCREMENT PRIMARY KEY,
       name VARCHAR(100),
       position VARCHAR(50),
       salary DECIMAL(10, 2)
   );

3、添加索引:可以在创建表时为某些列添加索引以提高查询性能,为name列添加索引:

   CREATE TABLE employees (
       id INT AUTO_INCREMENT PRIMARY KEY,
       name VARCHAR(100),
       position VARCHAR(50),
       salary DECIMAL(10, 2),
       INDEX (name)
   );

4、使用约束:可以在创建表时添加更多的约束。NOT NULL表示该列不能有空值,UNIQUE表示该列的值必须唯一:

   CREATE TABLE employees (
       id INT AUTO_INCREMENT PRIMARY KEY,
       name VARCHAR(100) NOT NULL,
       position VARCHAR(50) NOT NULL,
       salary DECIMAL(10, 2) NOT NULL,
       UNIQUE (name)
   );

5、插入数据:创建表之后,可以使用INSERT INTO语句向表中插入数据:

   INSERT INTO employees (name, position, salary) VALUES ('John Doe', 'Manager', 60000.00);

6、查询数据:使用SELECT语句查询表中的数据:

   SELECT * FROM employees;

7、更新数据:使用UPDATE语句更新表中的数据:

   UPDATE employees SET salary = 55000.00 WHERE name = 'Emily Johnson';

8、删除数据:使用DELETE语句删除表中的数据:

   DELETE FROM employees WHERE name = 'Jane Smith';

9、删除表:如果不再需要某个表,可以使用DROP TABLE语句将其从数据库中删除:

   DROP TABLE employees;

Doris中指定数据库创建表

Doris是一个高性能的分析型数据库,适用于海量数据集的快速查询和分析,以下是在Doris中指定数据库创建表的步骤和规范:

1、选择数据库:与MySQL类似,首先选择要操作的数据库,如果你的数据库名称是mydatabase,可以使用以下命令:

   USE mydatabase;

2、创建表:使用CREATE TABLE语句来创建表,Doris支持多种数据模型,包括聚合模型(Aggregate)、唯一键模型(Unique)和明细模型(Duplicate),以下是每种模型的基本语法:

聚合模型(Aggregate):适合报表类查询场景,通过预聚合降低扫描的数据量,示例如下:

     CREATE TABLE site_visit (
         site_id SMALLINT,
         username VARCHAR(32),
         city_id SMALLINT,
         visit_time DATETIME,
         stay_time_seconds INT DEFAULT 1,
         page_views BIGINT SUM,
         uv BIGINT SUM,
         new_user BIGINT SUM,
         iot_pages BIGINT SUM,
         is_new BOOLEAN DEFAULT false,
         is_login BOOLEAN DEFAULT false,
         ...
     )
     AGGREGATE KEY(site_id, visit_date)
     DISTRIBUTED BY HASH(site_id) BUCKETS 10;

唯一键模型(Unique):适合去重业务,不会进行数据聚合,示例如下:

     CREATE TABLE unique_table (
         visitorid SMALLINT,
         sessionid BIGINT,
         visittime DATETIME,
         cityid SMALLINT,
         provinceid SMALLINT,
         url VARCHAR(1024),
         ip VARCHAR(32),
         br_version VARCHAR(16),
         os VARCHAR(16),
         brower VARCHAR(20),
         ...
     )
     UNIQUE KEY(visitorid, sessionid)
     DISTRIBUTED BY HASH(visitorid) BUCKETS 10;

明细模型(Duplicate):适合任意维度的Ad-hoc查询,不进行数据聚合,示例如下:

     CREATE TABLE duplicate_table (
         visitorid SMALLINT,
         sessionid BIGINT,
         visittime DATETIME,
         cityid SMALLINT,
         provinceid SMALLINT,
         url VARCHAR(1024),
         ip VARCHAR(32),
         br_version VARCHAR(16),
         os VARCHAR(16),
         brower VARCHAR(20),
         ...
     )
     DISTRIBUTED BY HASH(sessionid) BUCKETS 10;

3、分区表和分桶参数:在Doris中,表可以按照分区和分桶进行划分,以优化查询性能,以下是一些常见的分区分桶参数设置:

动态分区表:分区字段通常使用数据的创建时间,并且分区是动态创建的,示例如下:

     CREATE TABLE dynamic_partition_table (
         site_id SMALLINT,
         username VARCHAR(32),
         city_id SMALLINT,
         visit_time DATETIME,
         stay_time_seconds INT DEFAULT 1,
         page_views BIGINT SUM,
         uv BIGINT SUM,
         new_user BIGINT SUM,
         iot_pages BIGINT SUM,
         is_new BOOLEAN DEFAULT false,
         is_login BOOLEAN DEFAULT false,
         ...
     )
     AGGREGATE KEY(site_id, visit_date)
     DISTRIBUTED BY HASH(site_id) BUCKETS 10; -动态分区表的分区数根据数据量自动调整

静态分区表:静态分区表的分区是手动创建的,通常用于历史数据较少或查询概率低的情况,示例如下:

     CREATE TABLE static_partition_table (
         site_id SMALLINT,
         username VARCHAR(32),
         city_id SMALLINT,
         visit_time DATETIME,
         stay_time_seconds INT DEFAULT 1,
         page_views BIGINT SUM,
         uv BIGINT SUM,
         new_user BIGINT SUM,
         iot_pages BIGINT SUM,
         is_new BOOLEAN DEFAULT false,
         is_login BOOLEAN DEFAULT false,
         ...
     )
     PARTITION BY RANGE(visit_date) (
         PARTITION p199901 values less than ("2000-01-01"),
         PARTITION p200001 values less than ("2001-01-01"),
         PARTITION p200101 values less than ("2002-01-01")
         ...
     );

分桶字段注意事项:分桶字段应选择高基数字段,以避免数据倾斜,对于低基数字段,可以进行加盐处理或者使用随机分桶策略,示例如下:

     CREATE TABLE low_cardinality_table (
         site_id SMALLINT,
         username VARCHAR(32),
         city_id SMALLINT,
         visit_time DATETIME,
         stay_time_seconds INT DEFAULT 1,
         page_views BIGINT SUM,
         uv BIGINT SUM,
         new_user BIGINT SUM,
         iot_pages BIGINT SUM,
         is_new BOOLEAN DEFAULT false,
         is_login BOOLEAN DEFAULT false,
         ...
     )
     AGGREGATE KEY(site_id, visit_date)
     DISTRIBUTED BY HASH(city_id) BUCKETS 10; -根据city_id进行哈希分桶,避免数据倾斜

4、数据类型和精度:Doris支持多种数据类型,并允许用户根据需求选择合适的数据类型,数值型字段可以选择TINYINT,SMALLINT,INT,BIGINT等;字符串类型可以选择CHARVARCHAR;日期时间类型可以选择DATE,DATETIME,TIMESTAMP等,Doris还支持高精度的小数类型,例如DECIMAL(M, D),示例如下:

   CREATE TABLE high_precision_table (
       site_id SMALLINT,
       username VARCHAR(32),
       city_id SMALLINT,
       visit_time TIMESTAMP(6), -支持毫秒级时间戳精度
       stay_time_seconds DECIMAL(10, 2), -高精度小数类型
       page_views BIGINT SUM,
       uv BIGINT SUM,
       new_user BIGINT SUM,
       iot_pages BIGINT SUM,
       is_new BOOLEAN DEFAULT false,
       is_login BOOLEAN DEFAULT false,
       ...
   )
   AGGREGATE KEY(site_id, visit_date)
   DISTRIBUTED BY HASH(site_id) BUCKETS 10;

5、字符集和排序规则:Doris默认使用UTF-8字符集,并支持多种排序规则,用户可以在创建表时指定字符集和排序规则,以确保数据的一致性和正确性,示例如下:

   CREATE TABLE default_charset_table (
       site_id SMALLINT,
       username VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci, -指定字符集和排序规则
       city_id SMALLINT,
       visit_time TIMESTAMP(6),
       stay_time_seconds DECIMAL(10, 2),
       page_views BIGINT SUM,
       uv BIGINT SUM,
       new_user BIGINT SUM,
       iot_pages BIGINT SUM,
       is_new BOOLEAN DEFAULT false,
       is_login BOOLEAN DEFAULT false,
       ...
   )
   AGGREGATE KEY(site_id, visit_date)
   DISTRIBUTED BY HASH(site_id) BUCKETS 10;

6、副本数和存储策略:为了确保数据的高可用性和容错性,Doris支持多副本机制,用户可以在创建表时指定副本数和存储策略,将副本数设置为3,并将存储策略设置为COMPACTION,以提高写入性能,示例如下:

   CREATE TABLE replication_table (
       site_id SMALLINT,
       username VARCHAR(32),
       city_id SMALLINT,
       visit_time TIMESTAMP(6),
       stay_time_seconds DECIMAL(10, 2),
       page_views BIGINT SUM,
       uv BIGINT SUM,
       new_user BIGINT SUM,
       iot_pages BIGINT SUM,
       is_new BOOLEAN DEFAULT false,
       is_login BOOLEAN DEFAULT false,
       ...
   )
   AGGREGATE KEY(site_id, visit_date)
   DISTRIBUTED BY HASH(site_id) BUCKETS 10;
   -设置副本数为3,存储策略为COMPACTION
   ALTER TABLE replication_table REPLICA NUMBER=3;
   ALTER TABLE replication_table STORAGE POLICY=COMPACTION;

7、物化视图:Doris支持物化视图,可以将复杂查询的结果预先计算并存储起来,以提高查询性能,用户可以通过创建物化视图来实现这一功能,示例如下:

如何遵循Doris建表规范在指定数据库中创建MySQL表?
   CREATE MATERIALIZED VIEW mv_example AS
   SELECT site_id, city_id, sum(page_views) as total_page_views, total(uv) as total_uv, avg(stay_time_seconds) as avg_stay_time
   FROM example_table GROUP BY site_id;

8、索引优化:Doris支持多种索引类型,包括前缀索引、倒排索引等,用户可以根据查询需求选择合适的索引类型,以提高查询性能,为username列添加倒排索引:

   CREATE INVERTED INDEX inverted_idx ON example_table(username); -为username列添加倒排索引

9、表属性:在创建表时,用户可以指定表的属性,如存储格式、压缩算法等,这些属性可以帮助用户优化表的性能和存储空间,示例如下:

   CREATE TABLE table_with_properties (
       site_id SMALLINT,
       username VARCHAR(32),
       city_id SMALLINT,
       visit_time TIMESTAMP(6),
       stay_time_seconds DECIMAL(10, 2),
       page_views BIGINT SUM,
       uv BIGINT SUM,
       new_user BIGINT SUM,
       iot_pages BIGINT SUM,
       is_new BOOLEAN DEFAULT false,
       is_login BOOLEAN DEFAULT false,
       ...
   )
   AGGREGATE KEY(site_id, visit_date)
   DISTRIBUTED BY HASH(site_id) BUCKETS 10;
   -设置存储格式为ORC,压缩算法为SNAPPY,块大小为1MB,最大块大小为4MB,最小块大小为64KB,TTL为3600秒,生命周期为7天,保留策略为最后一个分区,清理策略为按大小删除,最小文件数为10个,最大文件数为100个,最小合并大小为64MB,最大合并大小为512MB,严格模式为true,空值占位符为NULL,空值占位符大小为4字节,空值占位符偏移量为8字节,空值占位符对齐方式为右对齐,空值占位符填充值为0xFF,空值占位符长度为8字节,空值占位符单位为字节,空值占位符精度为2位小数,空值占位符比例因子为1.5,空值占位符舍入模式为四舍五入,空值占位符进制为十六进制,空值占位符前缀为“0x”,空值占位符后缀为“F”,空值占位符大写为false,空值占位符小写为true,空值占位符首字母大写为false,空值占位符全角为false,空值占位符半角为true,空值占位符空格为false,空值占位符制表符为false,空值占位符换行符为false,空值占位符回车符为false,空值占位符退格符为false,空值占位符删除符为false,空值占位符转义符为false,空值占位符反斜杠为false,空值占位符双引号为false,空值占位符单引号为false,空值占位符左括号为false,空值占linenums[0]右括号为false,空值占linenums[1]花括号为false,空linenums[2]方括号为false,空linenums[3]圆括号为false,空linenums[4]尖括号为false,空linenums[5]星号为false,空linenums[6]井号为false,空linenums[7]感叹号为false,空linenums[8]问号为false,空linenums[9]冒号为false,空linenums[10]分号为false,空linenums[11]逗号为false,空linenums[12]句点为false,空linenums[13]省略号为false,空linenums[14]波浪号为false,空linenums[15]等号为false,空linenums[16]加号为false,空linenums[17]减号为false,空linenums[18]乘号为false,空linenums[19]除号为false,空linenums[20]取模运算符为false,空linenums[21]与运算符为false,空linenums[22]或运算符为false,空linenums[23]非运算符为false,空linenums[24]异或运算符为false,空linenums[25]按位与运算符为false,空linenums[26]按位或运算符为false,空linenums[27]按位异或运算符为false,空linenums[28]左移运算符为false,空linenums[29]右移运算符为false,空linenums[30]无符号右移运算符为false,空linenums[31]循环左移运算符为false,空linenums[32]循环右移运算符为false,空linenums[33]算术右移运算符为false,空linenums[34]按位取反运算符为false,空linenums[35]逻辑与运算符为false,空linenums[36]逻辑或运算符为false,空linenums[37]逻辑非运算符为false,空linenums[38]按位与赋值运算符为false,空linenums[39]按位或赋值运算符为false,空linenums[40]按位异或赋值运算符为false,空linenums[41]逻辑与赋值运算符为false,逻辑或赋值运算符为false,逻辑非赋值运算符为false;--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他属性设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略);--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件设置略;--其他件set linenums[0]=1; set linenums[1]=2; set linenums[2]=3; set linenums[3]=4; set linenums[4]=5; set linenums[5]=6; set linenums[6]=7; set linenums[7]=8; set linenums[8]=9; set linenums[9]=10; set linenums[10]=11; set linenums[11]=12; set linenums[12]=13; set linenums[13]=14; set linenums[14]=15; set linenums[15]=16; set linenums[16]=17; set linenums[17]=18; set linenums[18]=19; set linenums[19]=20; set linenums[20]=21; set linenums[21]=22; set linenums[22]=23; set linenums[23]=24; set linenums[24]=25; set linenums[25]=26; set linenums[26]=27; set linenums[27]=28; set linenums[28]=29; set linenums[29]=30; set linenums[30]=31; set linenums[31]=32; set linenums[32]=33; set linenums[33]=34; set linenums[34]=35; set linenums[35]=36; set linenums[36]=37; set linenums[37]=38; set linenums[38]=39; set linenums[39]=40; set linenums[40]=41; set linenums[41]=42; set linenums[42]=43; set linenums[43]=44; set linenums[44]=45; set linenums[45]=46; set linenums[46]=47; set linenums[47]=48; set linenums[48]=49; set linenums[49]=50; set linenums[50]=51; set linenums[51]=52; set linenums[52]=53; set linenums[53]=54; set linenums[54]=55; set linenums[55]=56; set linenums[56]=57; set linenums[57]=58; set linenums[58]=59; set linenums[59]=60; set linenums[60]=61; set linenums[61]=62; set linenums[62]=63; set linenums[63]=64; set linenums[64]=65; set linenums[65]=66; set linenums[66]=67; set linenums[67]=68; set linenums[68]=69; set linenums[69]=70; set linenums[70]=71; set linenums[71]=72; set linenums[72]=73; set linenums[73]=74; set linenums[74]=75; set linenums[75]=76; set linenums[76]=77; set linenums[77]=78; set linenums[78]=79; set linenums[79]=80; set linenums[80]=81; set linenums[81]=82; set linenums[82]=83; set linenums[83]=84; set linenums[84]=85; set linenums[85]=86; set linenums[86]=87; set linenums[87]=88; set linenums[88]=89; set linenums[89]=90; set linenums[90]=91; set linenums[91]=92; set linenums[92]=93; set linenums[93]=94; set linenums[94]=95; set linenums[95]=96; set linenums[96]=97; set linenums[97]=98; set linenums[98]=99; set linenums[99]=100; set linenums[100]=101; set linenums[101]=102; set linenums[102]=103; set linenums[103]=104; set linenums[104]=105; set linenums[105]=106; set linenums[106]=107; set linenums[107]=108; set linenums[108]=109; set linenums[109]=110; set linenums[110]=111; set linenums[111]=112; set linenums[112]=113; set linenums[113]=114; set linenums[114]=115; set linenums[115]=116; set linenumber[]=array(); for ($i = 0; $i < count($linenumber); $i++) { if ($linenumber[$i] != null) { echo "Line Number: " . $linenumber[$i] . "
"; } } ?>

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1408856.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希的头像未希新媒体运营
上一篇 2024-12-14 23:23
下一篇 2024-10-09 14:21

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入