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
的表,包含id
、name
、position
和salary
四个字段,可以使用以下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
等;字符串类型可以选择CHAR
或VARCHAR
;日期时间类型可以选择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支持物化视图,可以将复杂查询的结果预先计算并存储起来,以提高查询性能,用户可以通过创建物化视图来实现这一功能,示例如下:
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
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复